Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 加速neon arm中的矩阵速度_Performance_Arm_Matrix Multiplication_Simd_Neon - Fatal编程技术网

Performance 加速neon arm中的矩阵速度

Performance 加速neon arm中的矩阵速度,performance,arm,matrix-multiplication,simd,neon,Performance,Arm,Matrix Multiplication,Simd,Neon,我试着运行下面的代码1k x 1k,时间是1.4s 是否有任何可能的方法来提高速度,代码在raspberry pi-4上进行了测试 相同大小的基于numpy的乘法需要0.14秒来执行代码 A和B矩阵的大小相同,为1000 x 1000 代码在编译时自动矢量化 void matrix\u multiply\u neon(float32\u t*A、float32\u t*B、float32\u t*C、uint32\u t n、uint32\u t m、uint32\u t k){ int A_i

我试着运行下面的代码1k x 1k,时间是1.4s

是否有任何可能的方法来提高速度,代码在raspberry pi-4上进行了测试

相同大小的基于numpy的乘法需要0.14秒来执行代码

A和B矩阵的大小相同,为1000 x 1000

代码在编译时自动矢量化

void matrix\u multiply\u neon(float32\u t*A、float32\u t*B、float32\u t*C、uint32\u t n、uint32\u t m、uint32\u t k){
int A_idx;
int B_idx;
int C_idx;
浮动32x4_t A0;
浮动32x4_t A1;
浮动32x4_t A2;
浮动32x4_t A3;
浮动32x4_t B0;
浮体32x4_t B1;
浮动32x4_t B2;
浮动32x4_t B3;
浮动32x4_t C0;
浮动32x4_t C1;
浮动32x4_t C2;
浮动32x4_t C3;

对于(int i_idx=0;i_idx为什么不使用BLAS库?几十年来,有很多经过高度熟练的开发人员优化的、经过良好测试的、可移植的、开源的、非常快速的实现。是的,你完全正确。我试过使用BLAS库。这很好,也很有效。但我想知道的是,有没有办法提高spe如果这是为了学习,请注意,您可以执行平铺以提高缓存利用率。此外,您的FMA顺序依赖于ILP,因此可能会降低性能。我认为更大的寄存器阻塞也可能有帮助。要比好的BLAS库更快?不太可能,尤其是对于1k x 1k这样大的矩阵(大到足以隐藏函数调用开销和BLAS库无法硬编码精确大小的成本,就像内联后可能发生的那样)。这足够大,缓存阻塞技术将非常有价值。不过,如果您想了解BLAS库的运行速度有多快,这很好。(例如,缓存阻塞和使用多个依赖链展开循环以隐藏FP延迟)请注意,浮动上的许多优化(特别是关于更改顺序和断开依赖链)将由于操作关联差异而更改输出。这通常不是问题,但需要注意。