我有一个处理多层嵌套循环的程序,操作的是一个三维域:
unsigned int sX(m_sizeZ*m_sizeY);
unsigned int b(sX+m_sizeZ);
for(unsigned int i(1);i<m_sizeX-1;i++){
for(unsigned int j(1);j<m_sizeY-1;j++){
for(unsigned int k(1);k<m_sizeZ-1;k++){
m_r[b+k]=m_func[b+k]-m_cX*(m_data[b+k-sX]+m_data[b+k+sX]-2.0*m_data[b+k])
-m_cY*(m_data[b+k-m_sizeZ]+m_data[b+k+m_sizeZ]-2.0*m_data[b+k])
-m_cZ*(m_data[b+k-1]+m_data[b+k+1]-2.0*m_data[b+k]);
}
b+=m_sizeZ;
}
b+=2*m_sizeZ;
}
我的数组大小是m_sizeX * m_sizeY * m_sizeZ的两倍。
我这样迭代是因为我不想触及域的边界。
当使用(g++)-msse2 -ftree-vectorizer-verbose = 2编译时,我当然会得到多个嵌套循环的提示。
有没有什么方法可以使用单个循环而不需要(更多或更少)复杂的检查操作?
谢谢!