Comments 7
Хороший, краткий, доступный обзор. Буду ждать продолжения.
+1
Супер!
Каждый раз когда писал громоздкие «for» мечтал о подобной параллелизации. В ближайшее же время опробую.
Вот еще какой вопрос знатокам, сложно ли это прикрутить это к gcc или другим компиляторам кроме Visual Studio?
Каждый раз когда писал громоздкие «for» мечтал о подобной параллелизации. В ближайшее же время опробую.
Вот еще какой вопрос знатокам, сложно ли это прикрутить это к gcc или другим компиляторам кроме Visual Studio?
+1
GCC поддерживает OpenMP с версии 4.2.
+1
reddot@doone:~/default/samples/openmp$ sudo apt-get install libgomp1
reddot@doone:~/default/samples/openmp$ cat hello.c
#include <stdio.h>
int main()
{
#pragma omp parallel
printf(«hello world\n»);
return 0;
}
reddot@doone:~/default/samples/openmp$ gcc -Wall -Wextra -fopenmp hello.c
reddot@doone:~/default/samples/openmp$ ./a.out
hello world
hello world
reddot@doone:~/default/samples/openmp$ cat hello.c
#include <stdio.h>
int main()
{
#pragma omp parallel
printf(«hello world\n»);
return 0;
}
reddot@doone:~/default/samples/openmp$ gcc -Wall -Wextra -fopenmp hello.c
reddot@doone:~/default/samples/openmp$ ./a.out
hello world
hello world
+1
Есть ли средства отладки (оч желательно — бесплатные), чтобы увидеть сколько потоков запущены, какие переменные в каждом из них, над какими данными выполняются операции и т д...?
+1
#pragma omp parallel for
for (ptrdiff_t i = 0; i < n; i++)
dst[i] = sqrt(src[i]);
На практике столкнулся с параллельным заполнением огромных матриц. Если элементы матрицы заполняются по одинаковой простой формуле, то эффективнее будет изменить планировщик потоков:
#pragma omp parallel for schedule(static)
Анализ производительности микроархитектуры показал, что промахи кэша 1го и 2го уровней значительно уменьшаются, повышая когерентность кэша. Время заполнения матрицы возрастает. На процессорах с маленьким кэшем разница особенно заметна.
0
Sign up to leave a comment.
Параллельные заметки №3 — базовые конструкции OpenMP