我正在创建一个简单的矩阵乘法程序,在 Intel Xeon Phi 架构上运行。程序看起来像这样(参数是 A、B、C),并且时间不包括初始化:
//start timing
for(int i = 0; i < size; i++){
for(int k = 0; k < size; k++) {
register TYPE aik = A[i][k];
for(int j = 0; j < size; j++) {
C[i][j] += aik * B[k][j];
}
}
}
//end timing
我正在使用限制、对齐数据等。但是,如果使用动态内存 (posix_memalign) 分配矩阵,则计算会严重减慢,即对于 TYPE=float 和 512x512 矩阵,在动态情况下大约需要 0.55 秒,而在其他情况下大约需要 0.25 秒。在不同的架构(英特尔至强 E5)上,也会出现减速,但几乎不明显(大约 0.002 秒)。
任何帮助都将不胜感激!