OpenMP — индексная переменная в выражении OpenMP для оператора for должна иметь целочисленный тип со знаком

Я новичок в OpenMP. Я пытаюсь использовать несколько ядер для цикла for, но я получаю эту ошибку компиляции:

msgstr «ошибка C3016: ‘x’: переменная индекса в OpenMP ‘для оператора’ должна иметь целочисленный тип со знаком».

Я знаю, что OpenMP 2.0, который является стандартным для Microsoft Visual Studio 2010 (что я использую), по какой-то причине не поддерживает типы данных без знака, но я не верю, что в этом цикле используются типы данных без знака.

Вот как выглядит мой код:

Переменные Declerations:

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

Решение

Похоже, 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;
// ...
}
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]