05.27.09
Использование OpenMP: старт
Распараллеливание задач, подчас, бывает крайне необходимой штукой. Однако в самом начале изучения одной из библиотек для этого — OpenMP — сталкиваешься со страшной проблемой: нифига не паралеллится. Итак, раз и на всегда что нужно делать:
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
int main(int argc, char ** argv)
{
#pragma omp parallel
{
printf("Hello, world!\n");
}
return 0;
}
Теперь компилируем:
alexander@A64x2 ~/Temp $ gcc -fopenmp -c test.c
alexander@A64x2 ~/Temp $ gcc -o test test.o -lgomp
Здесь ключевыми являются флаги -fopenmp и -lgomp, использование которых, похоже, очевидно всему миру кроме меня… А результат выполнения у меня был таков:
alexander@A64x2 ~/Temp $ ./test
Hello, world!
Hello, world!
LG.BALUKATION сказал,
Четверг, 28 Май, 2009 в 21:17
Кажется в 2007 году, пока этой штуки ещё не было в GCC, Sun на TechDays очень хвастался наличием OpenMP в своих компиляторах (есть только для Солярки и Линухи). Если интересна базовая инфа – можно попробовать отыскать те слайды и полистать их, вроде как вполне доступно описывали что оно, для чего нужно и как использовать.
Вообще мне кажется несколько не очевидным использование этой штуки, т. е. при написании не всегда ясно как поведёт себя код на конкретной машинке – с ручным распараллеливанием оно как-то понятнее.
Engraver сказал,
Четверг, 28 Май, 2009 в 21:32
Спасибо за предупреждение, учту. Ато я еще полный ноль в параллельных приложениях
Но юзать кластер и даже не попытаться заюзать несколько процов для решения задачки кажется обидным)) Еще MPI на очереди… Там вроде более «ручное»
LG.BALUKATION сказал,
Вторник, 2 Июнь, 2009 в 02:53
Кстати я тут недавно чтот глянул сайтиков… похоже OpenMP есть уже во всех основных линушных компиляторах, заодно кое-что новое для себя открыл – надоб попробовать однажды.
В общем, изначально онож появилось в интеловских супер-компилях по пол-кило зелени за экземпляр, но интел оказывается раздаёт их всем желающим для не-коммерческого использования под линухом нахаляву. Так что можно попытать счастья и в оригинальной реализации – вроде как для интеловских камней оно генерит более быстрый код, правда не полностью совместимо с GCC.
После такого, мне стало интересно – а как же конкуренты? AMD делает ставку на open64. Некогда очень крутой компиль для MIPS от SGI, сорсы которого были открыты и сейчас на его основе есть как коммерческие решения (по те же пол-кило зелени за экземпляр – это чтоль такая модная цена для компилятора?), так и халявные. Вроде как в рамках проекта ведутся не хилые исследования по генерации быстрого кода и штука должна быть тоже весьма интересная. Помимо него, AMD предлагает и просто допиленные для своих камней GCC.
Sun Studio тоже есть халявная под линух, вроде как иногда выдаёт оптимальный код лучше GCC, но вот будующее этого проекта кажется мне несколько туманным.
Engraver сказал,
Вторник, 2 Июнь, 2009 в 15:58
Код лучше GCC?? Интересно, нужно глянуть будет. Ато я только PCC встречал, но мнения о нем весьма полярны в нете…