#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:
Комментарии:
1. Значит ли это, что мне не нужно ничего скачивать / устанавливать?
2. Я думаю, вам нужно установить TDM-GCC, потому что, насколько я знаю, стандартный MinGW не поддерживал openmp.
3. Не могли бы вы, пожалуйста, дать мне несколько прямых указаний, потому что мне кажется, что я все испортил.
4. можете ли вы сказать мне, что вы перепутали?
5. Я установил TDM-GCC, и теперь я хотел включить gomp и -fopenmp, но я ничего не могу найти в этих разделах. Возможно, я ошибся.