OpenMP в Visual Studio 2005
-
19-09-2019 - |
Вопрос
Я пытаюсь использовать OpenMP для создания параллельного цикла for в Visual Studio 2005 Professional.Я включил omp.h и указал флаг компилятора /openmp.Однако я не могу скомпилировать даже простейший параллельный цикл for.
#pragma omp parallel for
for ( int i = 0; i < 10; ++i )
{
int a = i + i;
}
Вышеупомянутое приводит к ошибке компилятора C3005 в строке #pragma.
Google не особо помог.Я нашел только один малоизвестный японский веб-сайт, на котором у пользователя были похожие проблемы.Ни слова о резолюции.
Стандартный параллельный блок компилируется нормально.
#prgram omp parallel
{
// Do some stuff
}
Так будет до тех пор, пока вы не попытаетесь добавить цикл for.
#pragma omp parallel
{
#pragma omp for
for ( int i = 0; i < 10; ++i )
{
int a = i + i;
}
}
Вышеупомянутое вызывает ошибку компилятора C3001.Кажется, что «for» сбивает с толку компилятор, но это не должно быть так.Есть идеи?
Решение
Я нашел проблему.Какой-то гений определил следующий макрос глубоко внутри заголовков:
#define for if ( false ) ; else for
Я могу только предположить, что это использовалось для того, чтобы переменные, объявленные в циклах for, имели правильную область видимости в Visual C++ 6.Отмена определения или закомментирование макроса решила проблему.