Как настроить openMP - PullRequest
       15

Как настроить openMP

3 голосов
/ 12 ноября 2011

Я хотел бы протестировать openMP с C на Windows 7 с Eclipse IDE.Я не могу найти где-нибудь некоторые конкретные шаги для настройки openMP.Вы можете мне помочь?

Ответы [ 2 ]

6 голосов
/ 12 ноября 2011

Я мало что сделал с OpenMP, но вот что я нашел, попробовав сам.

OpenMP позволяет сообщать компилятору, что все должно работать параллельно. Вот пример, который считается до 10000000000:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    long result = 0;
    long i;

#pragma omp parallel for reduction(+: result)
    for (i = 0; i < 10000000000; i++) {
        result++;
    }
    printf("%li\n", result);
    return EXIT_SUCCESS;
}

Это скомпилируется как обычная программа на C:

$ gcc -o OpenMPTest main.c

На моем компьютере он запускается за 30 секунд:

$ time ./OpenMPTest
10000000000

real 0m30.674s
user 0m30.628s
sys 0m0.014s

Добавление опции -fopenmp в gcc включает поддержку OpenMP. Это все, что вам нужно для запуска цикла в нескольких потоках.

$ gcc -o OpenMPTest main.c -fopenmp

Это сокращает время работы до 15 секунд в двухъядерной системе:

$ time ./OpenMPTest
10000000000

real 0m15.840s
user 0m30.123s
sys 0m0.037s

Вот краткое описание того, что делает эта строка #pragma:

#pragma omp

Это префикс для команд openmp.

parallel

Сообщает компилятору, что следующий оператор должен выполняться параллельно.

for reduction(+: result)

Объединяет все значения переменной result из параллельных циклов в одно значение путем сложения. Удаление этого приводит к неправильному выводу окончательного номера.

Я знаю, что вы используете eclipse, но документы MSDN довольно хороши для описания OpenMP: OpenMP в Visual C ++

2 голосов
/ 12 ноября 2011

В Eclipse вам необходимо настроить следующие параметры в конфигурации вашего проекта:

C/C++ Build -> Settings -> Includes: add gomp 

C/C++ Build -> Settings -> Miscellaneous -> Other Flags:  add -fopenmp

Вам также необходимо установить бинарные файлы openmp для MinGW:

TDM-НКУ

...