Jump to content

Параллельное программирование (обзорные статьи)


Recommended Posts

Posted

доходчивая статейка:)

....

Теперь самое интересное.

 

Программа будет работать равноуспешно на системе с любым количеством ядер. В случае если у вас всего лишь одно ядро, то программа будет работать чуть хуже, чем наш первый однопоточный вариант. Зато если у вас два ядра, то — теоретически — задачу вы посчитаете в два раза быстрее, так как в системе появляется два потока (главный поток, создавший эти два потока-задания, ложится спать, ожидая окончания выполнения потоков), каждый из которых можно отдать на исполнение физическому ядру процессора, то есть выполнять их одновременно. PROFIT!

 

 

Еще в мае прошлого года Intel показывала работающий прототип 48-ядерного процессора с архитектурой x86, которому вполне хватало воздушного охлаждения. То-то простора для программистских экспериментов!

 

Перед тем как выполнять все эти скучные температурные расчеты, вы можете спросить у операционной системы, на которой в данный момент работает ваша программа, а сколько, собственно, процессорных ядер у нее за душой? Она говорит — ядер у нас N. Тогда вы разбиваете исходный массив на N частей, считаете его в N потоков и тем самым загружаете процессор полностью! (Поздравляю! Теперь вы 1С-программист, который еще и умет писать эффективные многопоточные приложения!)

 

Но шутки в сторону! Практическая часть этой заметки подошла к концу, и мы с вами переходим к заключительной части.

 

Ложка дегтя

 

На первый взгляд, даже измученному сессией студенту-филологу может показаться, что писать программки для метеорологов, на 100% использующие возможности современных многоядерных процессоров, проще простого. Огорчу вас. Это, мягко говоря, не так.

 

Во-первых, само по себе многопоточное программирование довольно сложная и коварная штука, и у многих программистов есть проблемы с возможностью представить себе в голове, как программа будет работать на самом деле. Вследствие этого, многопоточные приложения обычно подвержены появлению в них очень тонких и неочевидных ошибок, которые трудно воспроизвести и обнаружить (любознательные бегут в поисковик с запросами deadlock и race condition).

 

Момент второй — переход от линейного решения задачи к многопоточному его варианту, который был бы при этом еще и эффективнее линейного, чаще всего есть весьма и весьма нетривиальная задача. Код такого решения почти всегда объемнее и сложнее линейного кода, а значит его дольше писать, сложнее отлаживать и дороже сопровождать. Более того, в мире существует огромное число задач, которые крайне неохотно поддаются распараллеливанию (даю подсказку, это такие, где каждый последующий шаг вычисления жестко завязан на результат работы предыдущего).

 

 

В общем, умение писать хорошо масштабирующие по количеству ядер программы — это целое искусство.

 

Лучшие умы человечества бьются над тем, чтобы упростить написание подобного рода программ. К примеру, есть целый класс языков программирования (так называемые функциональные языки), код на которых автоматически можно выполнять на любом количестве ядер. Одна проблема — языки эти довольно специфичны, они не очень хорошо подходят для решения целого ряда задач, и их доля на рынке колеблется в районе жалких пары процентов. Замечу, что, в противоположность экзотическим функциональным языкам программирования, существует целый ряд современных и популярных языков, которые вообще не поддерживают эффективную многопоточную модель. Например, к таким относится Python и Ruby.

....

 

http://www.3dnews.ru/offsyanka/zanimatelnaya-mnogoyadernost/print

 

и ещё пару, но по-серьёзней статьи

 

Возвращение микроядерных операционных систем

http://www.citforum.idknet.com/computer/2006-05/

 

На пути к переносимым параллельным программам

http://citforum.univ.kiev.ua/programming/theory/parall_prog/

 

если у кого есть более свежие познавательные статьи, пожалуйста поделитесь.:) Интересуюсь, для своего расширения кругозора.:)

ИМХО с уважением.:v:

[sIGPIC]http://forums.eagle.ru/signaturepics/sigpic44790_4.gif[/sIGPIC]

____________________

AthlonII X3 3,3GHz / GA-990FXA-D3 / DDR3 2x4GB Team 1860MHz/ GoldenField 550W / 2Gb XFX HD7850 / LG 42"LM340T (3D)1920x1080

Posted

Если тебя интересует распределение вычислений как таковое, а так же дополнительная информация об этом вопросе и способах решения, то тебе сюда http://distributed.ru/

 

Кстати, вычисления на процессоре, это уже вобщем то прошлый век. Нормальные алгоритмизаторы и программисты уже давно распахивают поле вычислений на мощностях видеокарты. Достаточно сказать, что я на всех своих 4-х физических ядрах кор ай7 при 3.8 ГГц получаю общую производительность в ~60 Gflop, то используя ресурсы своей видеокарты радеон 5850 получаю 2200 Gflop. Почувствуй разницу.

В основном, распределенными вычислениями и многопоточностью сейчас занимаются передовики распределенных вычислений на указанном выше сайте. При этом решаются задачи в соверешнно разных направлениях, начиная от предсказания погоды и заканчивая математическими проектами типа поиска чисел Мерсенна.

 

Если что, пиши в личку. :)

  • Like 2

MB: MPG-Z390 GP / i7 9700KF 4,8 ГГц / DDR4 64 Gb 3466 МГц / GTX 2080Super / Acer 43" ET430KWMIIQPPX 4k / Win 10

 

Podp_39_Su-27-45.png

Posted
Если тебя интересует распределение вычислений как таковое, а так же дополнительная информация об этом вопросе и способах решения, то тебе сюда http://distributed.ru/

 

Если что, пиши в личку. :)

 

очень интересно.:thumbup:

  • Like 1

ИМХО с уважением.:v:

[sIGPIC]http://forums.eagle.ru/signaturepics/sigpic44790_4.gif[/sIGPIC]

____________________

AthlonII X3 3,3GHz / GA-990FXA-D3 / DDR3 2x4GB Team 1860MHz/ GoldenField 550W / 2Gb XFX HD7850 / LG 42"LM340T (3D)1920x1080

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...