arn*_*rnm 5 c++ loops for-loop multicore openmp
我是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;
Run Code Online (Sandbox Code Playgroud)
对于循环:
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)
{
Run Code Online (Sandbox Code Playgroud)
看起来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;
// ...
}
}
Run Code Online (Sandbox Code Playgroud)