5

我是 OpenMP 的新手。我正在尝试将多个内核用于 for 循环,但出现此编译错误:

“错误 C3016:'x':OpenMP 'for' 语句中的索引变量必须具有有符号整数类型”。

我知道 OpenMP 2.0 是 Microsoft 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)
    {
4

1 回答 1

6

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

整数类型是以下之一:boolcharchar16_tchar32_twchar_t以及任何有符号和无符号整数类型(charshortintlonglong 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;
    // ...
  }
}
于 2012-12-25T19:13:32.747 回答