gpt4 book ai didi

c++ - 英特尔编译器无法向量化这个简单的循环?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:51 26 4
gpt4 key购买 nike

所以我有下面的代码,这对我来说似乎很简单:

#define MODS_COUNT 5

int start1 = <calc at runtime>;
int start2 = <calc at runtime>;

for (int j=0; j<MODS_COUNT; j++) // loop 5 times doing simple addition.
logModifiers[start1 + j] += logModsThis[start2 + j];

这个循环是外循环的一部分(不确定这是否有区别)

编译器说:消息:循环未矢量化:矢量化可能但似乎效率低下。

为什么这个循环不能向量化?这对我来说似乎很简单。我如何强制矢量化并自行检查性能?

我有英特尔 C++ 编译器 2013 更新 3。

完整代码在这里,如果有人感兴趣的话:http://pastebin.com/Z6H5ZejW

编辑:我知道编译器认为它效率低下。我在问:

为什么效率低下?

我怎样才能强制执行它以便我可以对自己进行基准测试?

Edit2:如果我将其更改为 4 而不是 5,则它会被矢量化。是什么让 5 效率低下?我认为它可以用 2 条指令完成,第一个执行 4 个指令,第二个是“正常”执行 1 个指令,而不是 5 个指令。

最佳答案

根据英特尔编译器中的矢量化:

有128字节长的SIMD(单指令多数据)寄存器。所以如果 sizeof(int) 是 4 那么 4 整数可以放在这些寄存器中并且单个指令可以在这些 4 int 上执行s.(这还取决于是否对这些 int 执行了相同类型的操作,这里是真的。更多关于 LHS 上数组的每个元素取决于 a 的不同元素不同的数组。)

如果有 8 个 int,则需要两条指令。(而不是没有向量化的 8 个)。

但是如果有 5(或 6 或 7)个 int,那么也将需要两条指令。 可能 并不比没有矢量化代码更好。

进一步阅读 LINK .

关于c++ - 英特尔编译器无法向量化这个简单的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16297028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com