OpenMP - OpenMP 语句中的索引变量'for'必须具有有符号整型

OpenMP - index variable in OpenMP 'for' statement must have signed integral type

本文关键字:OpenMP 符号 整型 for 变量 语句 索引      更新时间:2023-10-16

我是OpenMP的新手。我试图使用多个内核for循环,但我得到这个编译错误:

"错误C3016: 'x': OpenMP 'for'语句中的索引变量必须是有符号整型".

我知道OpenMP 2.0,这是微软Visual Studio 2010的标准(我正在使用),由于某种原因不支持无符号数据类型,但我不相信我在这个循环中使用了任何无符号数据类型。

下面是我的代码:

变量此话:

struct Vertex
{
    float x, y;
};
FractalGenerator::Vertex FractalGenerator::_fracStart;
FractalGenerator::Vertex FractalGenerator::_fracEnd;
float FractalGenerator::_pointPrecision = 0.008f;
float FractalGenerator::_scaleFactor = 1;
循环:

float _fracStep =  _pointPrecision / _scaleFactor;
#pragma omp parallel for
for (float x = _fracStart.x; x < _fracEnd.x; x += _fracStep)
{
    for (float y = _fracStart.y; y < _fracEnd.y; y += _fracStep)
    {

看起来OpenMP不支持非整型作为for循环中的索引。你有float x,而float是算术类型,它不是整型。

整型是bool, char, char16_t, char32_t, wchar_t,以及任意有符号整型和无符号整型(char, short, int, long, long long)之一。

您需要转换您的算法,以使用其中一个用于for循环的索引。

int iEnd = (_fracEnd.x - _fracStart.x) / _fracStep;
int jEnd = (_fracEnd.y - _fracStart.y) / _fracStep;
for (int i = 0; i < iEnd; i++)
{
  float x = _fracStart.x + i * _fracStep;
  for (int j = 0; j < jEnd; j++)
  {
    float y = _fracStart.y + j * _fracStep;
    // ...
  }
}