Паралелни системи

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

Усвајање знања и практичних вештина за разумевање и развој паралелних рачунарских система.

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

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

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

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

Прорачуни убрзања и ефикасности које је могуће остварити паралелизацијом. Практичан увод у развој софтвера у Jyputer Lab окружењу. Употреба већег броја нити у циљу паралелизације и ограничења Python интерпретера (GIL). Употреба већег броја процеса у циљу паралелизације. Синхронизација и комуникација између процеса. Рачунарски кластери и GPU хостови. Употреба библиотека OpenMP, OpenCL и OpenACC. Пример паралелних алгоритама из домена научног софтвера, пословних апликација и операција над графовима. Програмско окружење CUDA. Примери програма написаних у CUDA окружењу и извршавање кроз pyCUDA омотач, Jyputer Lab и Google Cloud.