我正在尝试编写一些可进行向量化的 C 代码。这是我尝试的循环:
for(jj=0;jj<params.nx;jj++)
for(kk=0;kk<NSPEEDS;kk++)
local_density_vec[jj] += tmp_cells_chunk[jj].speeds[kk];
当我使用
-ftree-vectorizer-verbose=5
标志运行时,GCC会给我以下消息:http://pastebin.com/RfCc04aS。如何重写它以便可以自动矢量化。 NSPEEDS
为5。编辑:我已经继续研究它,但似乎无法对.speeds[kk]
进行矢量化。有没有一种重新构造它的方法?
tmp_cells_chunk
似乎是一个结构体。这意味着您拥有 结构体数组 打包。如果要进行矢量化,可能需要切换到结构体数组的内存布局。 - Mysticial