[英]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
是算術類型,但不是整數類型。
整數類型是以下類型之一: 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;
// ...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.