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

#c #parallel-processing #openmp

#c #параллельная обработка #openmp

Вопрос:

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

Комментарии:

1. Помогает ли эта страница? gcc.gnu.org/onlinedocs/libgomp/… По сути, вы добавляете -fopenmp в качестве флага компилятора и добавляете sprincle #pragma omp whatever в свой код

Ответ №1:

Я мало что сделал с 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("%lin", 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:

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

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

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

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

TDM-GCC

Комментарии:

1. Значит ли это, что мне не нужно ничего скачивать / устанавливать?

2. Я думаю, вам нужно установить TDM-GCC, потому что, насколько я знаю, стандартный MinGW не поддерживал openmp.

3. Не могли бы вы, пожалуйста, дать мне несколько прямых указаний, потому что мне кажется, что я все испортил.

4. можете ли вы сказать мне, что вы перепутали?

5. Я установил TDM-GCC, и теперь я хотел включить gomp и -fopenmp, но я ничего не могу найти в этих разделах. Возможно, я ошибся.