5

私はOpenMPを初めて使用します。forループに複数のコアを使用しようとしていますが、次のコンパイルエラーが発生します。

「エラーC3016:'x':OpenMPのインデックス変数'for'ステートメントは符号付き整数型である必要があります」。

Microsoft Visual Studio 2010(私が使用しているもの)の標準であるOpenMP 2.0は、何らかの理由で符号なしデータ型をサポートしていないことは知っていますが、このループで符号なしデータ型が使用されているとは思いません。

これが私のコードがどのように見えるかです:

可変宣言:

struct Vertex
{
    float x, y;
};

FractalGenerator::Vertex FractalGenerator::_fracStart;
FractalGenerator::Vertex FractalGenerator::_fracEnd;
float FractalGenerator::_pointPrecision = 0.008f;
float FractalGenerator::_scaleFactor = 1;

Forループ:

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 xfloatは算術型ですが、整数型ではありません。

整数型は、、、、、、、および符号付きおよび符号なし整数型(、、、、、、および)のいずれboolcharです。char16_tchar32_twchar_tcharshortintlonglong 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 に答える