hirthwork 19.12.2012 15:56 mcabber

Здравствуйте, мои дорогие хикке и хиккочки,

В этот холодный вечер мы с вами поговорим о параллельных вычислениях и даже
проведём некоторые численные эксперименты. Для этого нам потребуются:

1. Какой-нибудь всем известный алгоритм, которых легко распараллеливается
2. Компилятор с поддержкой openmp, например gcc или msvs
3. Компьютер с более чем одним физическим ядром
4. Немного свободного времени

В качестве алгоритма возьмём сортировку слияниями. На каждой итерации
увеличения размера сливаемого окна мы имеем цикл, который сливает два
отсортированных массива в один большой сортированный. Особенностью данного
цикла является то, что все итерации данного цикла изолированны друг от друга и
пишут в разные области памяти. Вокруг этого цикла мы и напишем заклинание:

#pragma omp parallel for

Самые ленивые могут найти полный пример по ссылке: http://ideone.com/yawZnl
В нём вы увидите, полную реализацию сортировки массива int'ов размером в пол
миллиарда элеметов¹.
Теперь подумаем, чего же нам ожидать от openmp? Какого прироста
производительности? Я запускал тесты на четырёхядерном процессоре, значит ли
это, что я должен был получить четырёхкратное ускорение по сравнению с
однопоточным запуском?
Обратим внимание, что в случае с четырёхядерным процессором в последней и
предпоследней итерациях увеличения сливаемого окна смогут пронять участие не
все ядра процессора, а только одно и два соответственно. Поэтому из двадцати
девяти итераций (log₂500000000), эффективно ядра будут использованы лишь 27
раз, плюс ещё полраза, плюс ещё четвертинка:
27.75/29 ≈ 95.69%

Итак, мы с вами посчитали теоретическую оценку эффективности параллельного
алгоритма по сравнению с последовательным. Обратите внимание, что при
увеличении количества ядер или уменьшении количества элементов в массиве,
эффективность параллельного алгоритма будет падать.
Таким образом, ускорения более чем в 0.9569 * 4 ≈ 3.83 добиться никак нельзя².

Давайте запустим тест и сравним теоретические ожидания с практическими. Сначала
скомпилируем и трижды запустим тест без openmp, а затем скомпилируем и запустим
его же с openmp и сравним времена выполнения:

g++ -march=native -O3 -ansi -pedantic -Wall -Wextra main.c;./a.out;./a.out;./a.out;g++ -march=native -O3 -ansi -pedantic -Wall -Wextra -fopenmp main.c;./a.out;./a.out;./a.out

main.c:53:0: warning: ignoring #pragma omp parallel [-Wunknown-pragmas]
Array prepared
Time taken: 109.250078s
Array prepared
Time taken: 109.242994s
Array prepared
Time taken: 109.150572s
Array prepared
Time taken: 30.908248s
Threads: 4
Array prepared
Time taken: 30.860521s
Threads: 4
Array prepared
Time taken: 30.904798s
Threads: 4

Возьмём сумму времён выполнения последовательного алгоритма поделим её на сумму
времён выполнения параллельного алгоритма:
(109.250078+109.242994+109.150572)/(30.908248+30.860521+30.904798) ≈ 3.53

Меньше чем максимально возможно, но тем не менее, нельзя не отметить, что это
составляет 3.53 / 3.83 ≈ 92% от теоретической скорости.

Таким образом, OpenMP³ на управление потоками и синхронизацию данных между ними
тратит всего 8% полезного времени. Любите и почитайте его, как панацею и
продолжателя дела Закона Мура.

--
¹ Если быть точным, то 2²⁹ элементов. На большее у меня не хватило оперативной
памяти в компьютере
² Возможно некоторое ускорение за счёт более удачного попадания элементов в
кеш-процессора, но поскольку данный алгоритм использует последновательный
проход по массиву, то попадание элементов в кеш не окажет влияния. Любопытный
читатель может самостоятельно распараллелить какой-нибудь алгоритм перемножения
матриц, на которых теоретический предел ускорения можно значительно превысить
как раз за счёт многократного использования элементов находящихся в текущем
окне кэша.
³ С такими результатами название этой библиотеки можно написать с большой буквы

Recommended by: @richmond, @DZhon, @magog
1. gisty 19.12.2012 16:04

форматировать текст по ширине в 80 символов в 2012 году — пиздец

2. hirthworkgisty /1 19.12.2012 16:06 mcabber

высказывать мнение о котором не спрашивали — пиздец

3. richmond 19.12.2012 16:22

Поставили дедфуда на место.

4. hirthworkrichmond /3 19.12.2012 16:23 mcabber

его оттуда и не снимали

5. lHooFool 19.12.2012 16:26

Нихуя себе! Как ты сделал сноски с upper символами?

6. hirthworklHooFool /5 19.12.2012 16:27 mcabber

Compose

7. lHooFoolhirthwork /6 19.12.2012 16:27

А, понял, спасибо.

8. rudahirthwork /6 19.12.2012 16:28 curiosity~

Срыв покровов просто %)

9. hirthworkruda /8 19.12.2012 16:29 mcabber

ага. ZOG скрывает, но на самом деле лучший инструмент для выполнения любых задач — мозг

10. kbgisty /1 23.01.2013 10:28

почему? у меня если на две части разделить экран то как раз где-то по 100 символов влазит (стандартное 1280x разрешение, шрифт невелик).

11. kbkb /10 23.01.2013 10:29

ах да, сбоку никаких панелей нету, может с ними как раз по не больше 80 символов влезет

12. gistykb /11 23.01.2013 10:31 Gajim8557953C

потому в 2012 году почти все ПО уже умеет самостоятельно разбивать строки

13. kbgisty /12 23.01.2013 10:31 04a3831c

не понял, покажи пример.

14. hirthworkgisty /12 23.01.2013 10:34 mcabber

вот моё ПО (vim) и разбивает по мере набора

15. ulidtkohirthwork /2 23.01.2013 10:35

на самом деле нет // лолка

16. ulidtko 23.01.2013 10:36

> всем известный алгоритм, которых легко распараллеливается

/0 дальше не читал, гляну коменты ещё

17. ulidtkohirthwork /9 23.01.2013 10:36

> лучший инструмент для выполнения любых задач — мозг

проиграл

18. ulidtkohirthwork /14 23.01.2013 10:39

короче, ты не прав, поддерживаю гисти

19. hirthworkulidtko /18 23.01.2013 10:40 mcabber

короче, ты не прав, твоего мнения не спрашивали

20. gistykb /13 23.01.2013 10:43

notepad.exe, "перенос по словам"

21. ulidtkohirthwork /19 23.01.2013 10:50

да кто вы такие, что СПРАШИВАТЬ мое мнение?
я же не в рашке живу — могу высказывать что, где и когда захочу. Зрозуміло?

22. hirthworkulidtko /21 23.01.2013 10:51 mcabber

підгоріло?

23. gistyhirthwork /14 23.01.2013 10:54 Gajim8557953C

разбивать надо на выходе (браузер читателя), а не на входе (браузер писателя)

24. gistyhirthwork /22 23.01.2013 10:54 Gajim8557953C

пiдмакака

25. kbgisty /23 23.01.2013 10:54 04a3831c

я вот не понимаю, как можно автоматически разбивать читабельно, я иногда затрудняюсь в ручном режиме, а тут вообще страшно представить что получится

26. hirthworkgisty /23 23.01.2013 10:56 mcabber

писателю виднее как лучше представлять читателю его произведение

27. kbhirthwork /26 23.01.2013 10:57 04a3831c

я по этому и прошу пример такого "умного" редактора

28. gistyhirthwork /26 23.01.2013 10:57 Gajim8557953C

читателю виднее, в каком виде ему удобнее читать произведение

29. hirthworkkb /27 23.01.2013 10:57 mcabber

Homo sapiens

30. ulidtkohirthwork /22 23.01.2013 10:57

НУ ХОТЬ КТО-НИБУДЬ gets the «і» right // гуглом переводил, да?

31. kbhirthwork /29 23.01.2013 10:58 04a3831c

ссылку на ебилд или не было

32. ulidtkogisty /28 23.01.2013 10:58

абсолютно справедливое возражение.

33. hirthworkulidtko /30 23.01.2013 10:59 mcabber

я просто на четверть нечеловек^W хохол. ну и да, гуглом переводил

34. hirthworkkb /31 23.01.2013 11:00 mcabber

нет ебилда. приходится искать тян и вместе с ней из исходников собирать

35. hirthworkulidtko /32 23.01.2013 11:01 mcabber

стало быть картины вам подавай в виде набора красок, а вы сами уж их на холсте разместите?

36. ulidtkohirthwork /35 23.01.2013 11:03

короче, палю: http://www.ietf.org/rfc/rfc2646.txt секция 3.2

тебя это должно убедить. Готов закрыть тред? // как давно ты признавал свою неправоту? а?

37. hirthworkulidtko /36 23.01.2013 11:04 mcabber

мой блог — мои rfc

38. gistyhirthwork /35 23.01.2013 11:04 Gajim8557953C

ну ты сравнил. картины и какой-то технический высер.

39. ulidtkohirthwork /35 23.01.2013 11:06

если бы твое обилие импровизированных <br /> несло хоть какую-нибудь смысловую нагрузку (как у меня в #tiioes, например) — аналогия с красками подошла бы. Но по факту ты просто размечал большие параграфы, не самым удобным образом.

40. gistygisty /38 23.01.2013 11:07 Gajim8557953C

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

41. gistykb /13 23.01.2013 11:15

#tiitss

42. kbgisty /41 23.01.2013 11:24

#tiitss/1

Do you really want to delete ?