小编Mar*_*ari的帖子

C++ 优化矩阵乘法微内核中的 L1 缓存使用

我的任务是实现一个优化的矩阵乘法微内核,该微内核C = A*B从以下代码片段开始用 C++ 进行计算。我遇到了一些违反直觉的行为,我需要一些帮助来更好地理解正在发生的事情。

\n
void mat_mul(double* A, double* B, double* C) {\n  for (int n = 0; n < N; ++n) {\n    for (int k = 0; k < K; ++k) {\n      for (int m = 0; m < M; ++m) {\n        C[m + n*M] += A[m + k*M] * B[k + n*K];\n      }\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

挑战条件如下:

\n
    \n
  • M、N、K 在编译时定义
  • \n
  • K = 128
  • \n
  • M、N 可以在编译时选择,但必须 < 32
  • \n
  • 矩阵按列优先顺序排列
  • \n
  • 数据对齐可以在编译时决定(默认=32字节对齐)
  • \n …

c++ optimization avx matrix-multiplication cpu-cache

6
推荐指数
1
解决办法
658
查看次数

Scipy 带状本征求解器比标准本征求解器慢得多

我观察到有关特征求解器的奇怪行为scipy.linalg.eig_banded

我正在生成具有特定结构的大小为 N=p*f 的带状矩阵。这些矩阵是对称三块对角矩阵,主对角线上有 p 个大小为 fxf 的块,非对角线上有 p-1 个大小为 f*f 的单位矩阵。

p=3 和 f=3 的示例:

 [2 2 2 1 0 0 0 0 0]
 [2 2 2 0 1 0 0 0 0]
 [2 2 2 0 0 1 0 0 0]
 [1 0 0 3 3 3 1 0 0]
 [0 1 0 3 3 3 0 1 0]
 [0 0 1 3 3 3 0 0 1]
 [0 0 0 1 0 0 4 4 …
Run Code Online (Sandbox Code Playgroud)

performance numpy linear-algebra scipy eigenvalue

5
推荐指数
1
解决办法
108
查看次数