簡體   English   中英

OpenMP-OpenMP'for'語句中的索引變量必須具有帶符號的整數類型

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

我是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)
    {

看起來OpenMP不支持非整數類型,因為它是for循環中的索引。 您有float x ,雖然float是算術類型,但不是整數類型。

整數類型是以下類型之一: 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;
    // ...
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM