小编par*_*ohn的帖子

gcc自动矢量化(未处理的数据参考)

我不明白为什么这样的代码没有用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)

gcc openmp auto-vectorization

3
推荐指数
1
解决办法
860
查看次数

警告:逗号的右侧操作数对gcc 4.4.7没有影响

在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_o​​perator

编辑:有效!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)

c c++ gcc

0
推荐指数
1
解决办法
1101
查看次数

标签 统计

gcc ×2

auto-vectorization ×1

c ×1

c++ ×1

openmp ×1