OpenMP в Visual Studio 2005

Я пытаюсь использовать 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 сбивает компилятор с толку, но так быть не должно. Любые идеи?


person Joe Waller    schedule 06.10.2009    source источник
comment
Это странно. Я только что скомпилировал все три фрагмента без каких-либо проблем.   -  person macbirdie    schedule 06.10.2009


Ответы (1)


Я нашел проблему. Какой-то гений определил следующий макрос глубоко внутри заголовков:

#define for   if ( false ) ; else for

Мое единственное предположение заключается в том, что это использовалось для того, чтобы переменные, объявленные в циклах for, правильно отображались в Visual C++ 6. Проблема была решена путем отмены определения или комментирования макроса.

person Joe Waller    schedule 14.10.2009