我不明白为什么这样的代码没有用gcc 4.4.6进行矢量化
int MyFunc(const float *pfTab, float *pfResult, int iSize, int iIndex)
{
for (int i = 0; i < iSize; i++)
pfResult[i] = pfResult[i] + pfTab[iIndex];
}
note: not vectorized: unhandled data-ref
Run Code Online (Sandbox Code Playgroud)
但是,如果我写下面的代码
int MyFunc(const float *pfTab, float *pfResult, int iSize, int iIndex)
{
float fTab = pfTab[iIndex];
for (int i = 0; i < iSize; i++)
pfResult[i] = pfResult[i] + fTab;
}
Run Code Online (Sandbox Code Playgroud)
gcc成功自动向量化此循环
如果我添加omp指令
int MyFunc(const float *pfTab, float *pfResult, int iSize, int iIndex)
{
float fTab = …Run Code Online (Sandbox Code Playgroud) 在Linux gcc 4.4.7中,我需要您的帮助以获得以下警告
for (int iLoop1= 0; iLoop1< iLoopN; ++iLoop1, ++iLoop2, !iIsOk)
Run Code Online (Sandbox Code Playgroud)
我在最后一个逗号之后的最后一个参数中发出以下警告
error: right-hand operand of comma has no effect
Run Code Online (Sandbox Code Playgroud)
我已经阅读了逗号运算符的wiki页面,但我不明白这个问题 https://en.wikipedia.org/wiki/Comma_operator
编辑:有效!iIsOk没有做任何我测试以下代码
// Example program
#include <iostream>
#include <string>
#include <iostream>
int main()
{
int iIsOk = 0;
for (int iLoop1 = 0; iLoop1 < 2; iLoop1++, !iIsOk)
{
std::cout << "IsOk=" << iIsOk << std::endl;
}
for (int iLoop1 = 0; iLoop1 < 2; iLoop1++, iIsOk = !iIsOk)
{
std::cout << "IsOk2=" << iIsOk << std::endl;
} …Run Code Online (Sandbox Code Playgroud)