Pull to refresh

Comments 7

Хороший, краткий, доступный обзор. Буду ждать продолжения.
Супер!
Каждый раз когда писал громоздкие «for» мечтал о подобной параллелизации. В ближайшее же время опробую.

Вот еще какой вопрос знатокам, сложно ли это прикрутить это к gcc или другим компиляторам кроме Visual Studio?
GCC поддерживает OpenMP с версии 4.2.
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
Есть ли средства отладки (оч желательно — бесплатные), чтобы увидеть сколько потоков запущены, какие переменные в каждом из них, над какими данными выполняются операции и т д...?
Intel Thread profiler — показывает достаточно наглядно, но это не совсем отладчик. Бесплатный первый месяц, потом можно повторить.
#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го уровней значительно уменьшаются, повышая когерентность кэша. Время заполнения матрицы возрастает. На процессорах с маленьким кэшем разница особенно заметна.
Sign up to leave a comment.