Паралелни алгоритми

Циљ и исход предмета

Усвајање теоретског знања и практичних вештина за разумевање и развој паралелних рачунарских програма. Студент разуме кључне концепте и проблеме развоја паралелних алгоритама, и упознат је са релевантним карактеристикама савремених паралелних рачунарских система. Способан је да осмисли и имплементира паралелни алгоритам за решавање датог проблема.

Теоријска настава

Паралелни рачунарски системи и Флинова таксономија. Лимити паралелизације, Амдалов и Густафсонов закон. Дељена, локална и дистрибуирана меморија. Перформансе паралелних алгоритама. Анализа проблема како би се пронашле могућности за паралелизам. Кратак осврт на основе програмског језика Python. Упознавање са основним концептима паралелног програмирања кроз примере у програмском језику Пyтхон. Паралелизација употребом већег броја нити. Паралелизација употребом већег броја процеса. Синхронизација, баријере и семафори. Развој софтвера за рачунаре са великим бројем језгара и графичке процесоре. CUDA и pyCUDA оквири за развој софтвера. Векторизација кода кроз Intel AVX сет инструкција. Програмирање на основу тока података.

Практична настава

Прорачуни убрзања и ефикасности које је могуће остварити паралелизацијом. Практичан увод у програмски језик Python и развој софтвера у Jyputer Lab окружењу. Употреба већег броја нити у циљу паралелизације и ограничења Python интерпретера (Global Interpreter Lock). Употреба већег броја процеса у циљу паралелизације. Синхронизација и комуникација иземђу процеса. Пример паралелних алгоритама из домена научног софтвера, пословних апликација и рада над графовима. Програмско окружење CUDA. Примери програма написаних у ЦУДА окружењу и извршавање кроз pyCUDA омотач, Jyputer Lab и Google Cloud.