【发布时间】:2014-05-04 13:02:42
【问题描述】:
我目前正在尝试对以下代码进行矢量化:
velocity[0] = 0.0;
velocity[1] = 0.0;
velocity[2] = 0.0;
for (int i = 0; i < PARAMQ; i++)
{
velocity[0] += currentCell[i] * LATTICEVELOCITIES[i][0];
velocity[1] += currentCell[i] * LATTICEVELOCITIES[i][1];
velocity[2] += currentCell[i] * LATTICEVELOCITIES[i][2];
}
其中 LATTICEVELOCITIES 是一个二维整数数组
static const int32_t LATTICEVELOCITIES[PARAMQ][3] = {{0, -1, -1},
{-1, 0, -1},
{0, 0, -1},
{1, 0, -1},
{0, 1, -1},
{-1, -1, 0},
{0, -1, 0},
{1, -1, 0},
{-1, 0, 0},
{0, 0, 0},
{1, 0, 0},
{-1, 1, 0},
{0, 1, 0},
{1, 1, 0},
{0, -1, 1},
{-1, 0, 1},
{0, 0, 1},
{1, 0, 1},
{0, 1, 1}
};
currentCell 是一个双精度数组。
不幸的是,我能找到的所有示例都只处理相同类型的数组,我不知道如何只将两个整数加载到一个 128 位寄存器中,然后将它们转换为双精度数。
提前感谢您的帮助。
【问题讨论】:
-
您的数据组织对于矢量化来说不是最理想的——您能改变它吗?
-
我宁愿不改变它,但如果有必要我可以。你有什么建议?
-
如果您可以添加
LATTICEVELOCITIES的完整定义,这将有所帮助 - 我假设它类似于int32_t LATTICEVELOCITIES[PARAMQ][3];? -
我编辑了原始帖子以现在包含定义。
-
好的 - 谢谢 - 我们可以将定义更改为:
static const double LATTICEVELOCITIES[PARAMQ][4];(第四个元素只是一个虚拟元素),还是更好:static const double LATTICEVELOCITIES[3][PARAMQ];?