我的任务是实现一个优化的矩阵乘法微内核,该微内核C = A*B从以下代码片段开始用 C++ 进行计算。我遇到了一些违反直觉的行为,我需要一些帮助来更好地理解正在发生的事情。
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}\nRun Code Online (Sandbox Code Playgroud)\n挑战条件如下:
\n我观察到有关特征求解器的奇怪行为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)