我有一个有限差分代码用于波传播,因为有很多临时混合派生词,我定义了一个临时内存缓冲区并将它们分成块来存储每个派生术语以提高内存效率。代码看起来像
Wrk = malloc(2*(4*nxe*(2*ne+1) + 15*nxe)*sizeof(float));
计算功能:
float *dudz = Wrk + NE;
float *dqdz = dudz + nxe;
for (int i=ix0_1; i<ixh_1; i++)
dudz [i] = hdzi*(u[i+nxe]-u[i-nxe]);
问题在于,代码在英特尔编译器12下运行良好,但是在使用英特尔编译器13和14进行编译时它会爆炸。
来自intel编译器12,13和14的所有编译将通过向量化循环来优化上面的代码。如果我通过定义关闭intel编译器13和14的编译器优化
volatile float *dudz = Wrk + NE;
代码也可以正常运行,但速度较慢。
如果你们中的任何人能给我一些建议,我将不胜感激, 非常感谢你,
gqchen