sre*_*ean 9 c++ iterator pointer-aliasing
g ++确实__restrict__为指针实现,但我找不到任何关于迭代器的东西.我的总体意图是鼓励编译器对stl循环进行矢量化.
编辑:
即使编译器无法进行向量化,__restrict__关键字也应该能够告诉编译器在循环内不需要不必要的重新加载.
我不知道你直接问题的答案.但是,编译器只能为一个循环进行矢量化std::vector,因为它是唯一具有连续存储的容器(我认为),并且在连续存储位置之间没有依赖关系(例如std::list).不过,我不知道怎么做.
更新
一些实验(这可能是也可能不是相关的总体目标)后,我发现,在ICC,下面确实没有 vectorise:
typedef std::vector<float> V;
V vec(4096);
for (V::iterator it = vec.begin(); it != vec.end(); ++it)
{
*it *= *it;
}
Run Code Online (Sandbox Code Playgroud)
而以下是:
V vec(4096);
V::iterator it2 = vec.end();
for (V::iterator it = vec.begin(); it != it2; ++it)
{
*it *= *it;
}
Run Code Online (Sandbox Code Playgroud)
显然,问题不是迭代器,而是对vec.end()循环结构内部的调用,这显然不能被排除,尽管很明显循环体不会影响向量边界.
在海湾合作委员会,我无法得到任何矢量化.这并不奇怪,因为海湾合作委员会在发现上证所机会方面比国际商会更糟糕.
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |