Астрофизикалық құбылыстарды моделдеу үшін cuda қолдану



КІРІСПЕ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..5

1 CUDA технологиясы және оның артықшылықтары ... ... ... ... .6
1.1 GPU.дағы параллель есептеулер
1.1.1 Параллель есептеулердің артықшылықтары
1.1.2 GPU мен CPU . дағы параллель есептеулер арасындағы айырмашылық ... ... ...
1.1.3 GPU.дағы есептеулерді қолданудың бірінші әрекеттері
1.1.4 GPU дағы параллель есептеулердің қолдану аясы
1.2 CUDA технологиясына кіріспе
1.2.1 NVIDIA CUDA .ң мүмкіншіліктері
1.2.2 CUDА . ның жетістіктері және шектеулері
1.2.3 CUDА . ның даму тарихы
1.2.4 NVIDIA CUDA .ны қолдайтын бейнекарталар
1.2.5 NVIDIA CUDA құрамы
1.3 CUDA.да программалау негіздері
1.3.1 CUDA .да программалаудың моделі
1.3.2 Бұтақталу
1.3.3 Ағындар арасындағы қарым . қатнастар
1.3.4 CUDA жадының модельдері
1.3.4.1 Жад түрін таңдау, жергілікті жадтың орнына бөлінетін жадты қолдану
1.3.4.2 Циклдерді жаю
1.3.4.3 Бөлінетін жад банкілерінің жанжалдар
1.3.5 Бағдарламалау ортасы
1.3.6 CUDA дағы программаларды тиімдету

2 Жұлдыздардың шартәріздес шоғырланулары мен олардың эволюциясы ... ... ... ... ... .18
2.1 Жұлдыздардың шартәріздес шоғырлануларының қасиеттері ... ...18
2.2 Жұлдыздардың шартәріздес шоғырлануларының эволюциясы ... 19
2.2.1 Қарапайым модельдер
2.2.2 Тасу эффекті
2.2.3 Жеке және қос жұлдыздардың өзара әрекеті
2.2.4 Шартәріздес шоғырланулардың булануы ... ... ... ..19
2.2.5 Динамикалық үйкеліс
3 Нәтижелер және оларды талдау ... ... ... ... ... ... ... ... ... ... ... ... ... ... 25
3.1 Зерттеу әдістемесі
3.2 Нәтижелерді талдау
ҚОРЫТЫНДЫ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...34
ҚОЛДАНЫЛҒАН ӘДЕБИЕТТЕР ТІЗІМІ ... ... ... ... ... ... ... ... ... ... ... 35
Компьютер әлдеқашан теоретик-астрономдардың ғана емес, сонымен қатар бақылаушылардың да негізгі құралына айналған, себебі енді бейне қабылдаушы ретінде ПЗС матрица қызмет ететіндіктен, астрономдар бейнелерді окуляр емес, монитор арқылы бақылай алады. Компьютерді астрономияда қолдану басқа ғылым салаларында да сияқты өте әрқилы. Бұл дегеніміз телескоптар мен серіктерді басқару, бақылауды автоматтандыру, алынған мәліметтерді өңдеу және талдау, үлкен каталогтармен жұмыс істеу, аспан механикалық есептеулерді жүргізу, қазіргі ғылымды онсыз елестете алмайтын компьютерлік желілер. Сонымен қатар, компьютер астрофизикалық процестерді сандық моделдеу үшін (компьютерлік эксперименттерді жүргізу үшін) қажет.
Астрофизикадағы компьютерлік модельдеудің ерекшелігі – астрофизикалық процестерге денелердің орасан көп саны қатысатынына байланысты бір біріне ұқсас схемалармен көлемі төтенше жоғары есептеулерді жүргізуге жиі тұра келетіні. Осыған байланысты астрофизикада компьютерлік эксперимепнттердің көбін суперкомпьютерсіз жүргізу мүмкін емес.
Мысалы, Әлемнің ірі масштабты құрылысын және оның эволюциясын моделдеу үшін ғалымдардың халықаралық консорциумы Virgo құрылды. Өлшемі шамамен екі миллиард жарық жылына тең кубтық көлеміндегі (еске сала кетейік, Метагалактиканың өлшемі 10 млрд.жарық жылынан асады) материяның үлестірілуінің эволюциясын зерттеу барысында бір ғана компьютерлік тәжірибені жүргізу Гархингтегі ( Германия ) Макс Планк қоғамының суперкомпьютерлік орталығының негізгі суперкомпьютер жұмысының бір айдан көп уақытын алды. Бұның өзінде жұмыс тек қана 10 млрд.бөлшектермен жасалды, ал бұл, әрине, мәселені айтарлықтай қарапайымдату, өйткені жалғыз біздің Галактикамызға шамамен 300 млрд.жұлдыз кіреді.
Бірақ суперкомпьютерлер тек осындай алып жұмыстар үшін емес, сонымен қатар әлде-қайда қарапайым тәжірибелер үшін де қажет. Мысалы, Санта-Круздағы Калифорния университетінің ғалымдары әлемдегі ең жылдам 100 компьютердің қатарына жататын жаңа суперкомпьютерді планеталық физика мен астрофизика саласындағы зерттеулерді жүргізу үшін орнатыпты . Суперкомпьютердің қажеттілігі осы саладағы зерттеу асажаңа жұлдыздар мен галактикаладың жарылыстары, жұлдыздар мен планеталар қойнауындағы сұйықтықтардың динамикасы сынды күрделі физикалық құбылыстарды компьютерлік модельдеуді жиі қажет ететінімен байланысты.
Астрофизикалық зерттеулер суперкомпьютерді қажет ететін көптеген басқа да мысалдарды келтіруге болады.
Кез келген есептеу құралының басты сипаттамалырының бірі –жылдамдығы. Дербес компьютердің жылдамдығы орталық процессордың (CPU-ң ) тактылық жиiлiгiмен тiкелей байланысты. Соңғы он жылда есептеу технологияларының дамуы жылдам қарқынмен жүрді. Мысалы, х86 архитектурадағы процессорының тактылық жиілігі 1978 жылы маусымда шыққанынан бастап қазірге дейін 700 есе артқан.
1 NVIDIA CUDA — неграфические вычисления на графических жадах Алексей Берилло 23 сентября 2008 г.
2 NVIDIA CUDA C Programming Guide 11/18/2011
3 CUDA by Example Jason Sanders, Edward Kandrot.2011 NVIDIA Corporation
4 Крис Касперски. Техника оптимизации программ. Эффективное использование памяти. - Спб.: БХВ-Петербург, 2003.
5 Lindholm, E., Nickolls, J., Oberman, S., Montrym, J. 2008. NVIDIA Tesla: A unified graphics and computing architecture.
6 Nickolls, J. 2007. NVIDIA GPU parallel computing architecture.
Stanford, CA; http://www.hotchips.org
7 http://developer.download.nvidia.com/compute/cuda/
8 http://www.nvidia.com
http://developer.nvidia.com
http://www.scs.fsu.edu
http://www.gpgpu.org
9 NVIDIA CUDA C Programming Best Practices Guide July 2009 NVIDIA Corporation.
10 Дарвин Дж. Г, Приливы и родственные им явления в Сол-нечной системе. — М.: Наука, 1965.
11 Чандрасекар С. Принципы звёздной динамики. — М..-ИЛ, 1948.
12 городников К, Ф. Динамика звёздных систем. -- М.: Физматлит, 1958.
13 Саслау У. Гравитационная физика звёздных и галактиче¬ских систем. — М.: Мир, 1989.
14 Спитцер Л. Динамическая эволюция шаровых скопле¬ний. — М.: Мир, 1990.
15 Белецкий В, В, Очерки о движении космических тел.—М.: Наука, 1977.

Пән: Астрономия
Жұмыс түрі:  Дипломдық жұмыс
Тегін:  Антиплагиат
Көлемі: 78 бет
Таңдаулыға:   
Қазақстан Республикасының Білім және ғылым министрлігі

әл-Фараби атындағы Қазақ ұлттық университеті

Құдайберген М.

ДИПЛОМДЫҚ ЖҰМЫС

АСТРОФИЗИКАЛЫҚ ҚҰБЫЛЫСТАРДЫ МОДЕЛДЕУ ҮШІН CUDA ҚОЛДАНУ

Мамандық 050611-Астрономия




















Алматы 2012
Қазақстан Республикасырың Білім және ғылым министрлігі

әл-Фараби атындағы Қазақ ұлттық университеті

Физика-техникалық факультеті

Қатты дене физикасы және бейсызық физика кафедрасы

Қорғауға жіберілді
_____________Кафедра меңгерушісі_________Приходько О.Ю.

ДИПЛОМДЫҚ ЖҰМЫС

Тақырыбы: АСТРОФИЗИКАЛЫҚ ҚҰБЫЛЫСТАРДЫ МОДЕЛДЕУ ҮШІН CUDA ҚОЛДАНУ

050611-Астрономия мамандығы бойынша

Орындаған
Құдайберген М.

Ғылыми жетекшісі
Наурзбаева А.Ж.
ф.-м.ғ.к, доцент

Норма бақылаушы
Тлеубаева И.С.

Алматы 2012

РЕФЕРАТ

Бітіру жұмысы: 33беттен, 78 формуладан, 38 суреттен, 15
қолданылған әдебиеттер тізіміннен тұрады.
Термин сөздер: Рендеринг, Шейдер,CPU.PGPU.
Жұмыстың өзектілігі: Астрофизикадағы компьютерлік модельдеудің
ерекшелігі – астрофизикалық процестерге денелердің орасан көп саны
қатысатынына байланысты бір біріне ұқсас схемалармен көлемі төтенше жоғары
есептеулерді жүргізуге жиі тұра келетіні. Осыған байланысты астрофизикада
компьютерлік эксперимепнттердің көбін суперкомпьютерсіз жүргізу мүмкін
емес. Алайда, CPU жиілігінің арту динамикасына мұқият қарасақ, оның соңғы
жылдары елеулі түрде бәсеңдегенін байқаймыз. Тактылық жиіліктің тоқтаусыз
өсуі бірқатар технологиялық маңызды себептерге байланысты мүмкін емес болып
табылады. Сондықтан да қазіргі заманғы есептеуіш жүйелердің өндірушілері
бір процессордың жиілігін көтеруге емес, процессорлар мен ядролар санын
көбейтуге көп назар аударуда. Бүгінгі видеокарталарда, мысалы GF8800GTX,
процессор саны 128 жетуі мүмкін. Көптеген жоғары көлемдегі есептеу жұмысын
жүргізуді талап ететін есептер GPU архитектурасына жақсы орналасып,
олардың сандық шешуін айтарлықтай жылдамдатуға мүмкіндік береді екен.
Алайда, бұл есептерді қосымшаларды шеңберінде программалаудың графикалық
интерфейсі шешу тиімсіз, себебі бұл API мүлдем басқа қолданысқа арналған.
Сол себепті Nvidia компаниясында Compute Unified Device Architecture
(қысқаша CUDA) технологиясын — GPGPU-ң C тілінде программа жазуға
мүмкіндік беретін технологиясын даярлады.
Жұмыстың мақсаты: CUDA технологиясын игеріп, бұл технологияны
есептеудің жоғары көлемін жүргізуге талап ететін астрофизикалық
мәселелерді шешу үшін қолданудың тиімділігін миллион жұлдызға дейін кіргізе
алатын шартіріздес жұлдыздық шоғырланулардың эволюциясын модельдеу
мысалында көрсету.
Зерттеу әдісі: CUDA-ның астрофизикалық құбылыстарды моделдеу үшін
тиімділігін растау үшін біз жұлдыздардың әр түрлі санын, атап айтсақ, 1024,
2048, 3072, 4096, 5120, 7168, 10240, 14336, 16384 жұлдызды кіргізетін
шартәріздес жұлдыздық шоғырланудың эволюциясын программалаудың С++ тілінде
моделдедік.

ТЕРМИНДЕР
• API ( ағылшын тілінен қысқартылған Application Programming
Interface) – қосымшаның бағдарламалық интерфейсі.
• DirectX- ойынды құрастыру және басқа жоғарышығарушы
мультимедиялық қосымшаны құрастыру үшін төмен бағдарламалық
интерфейс жиынтығы. Өл өзінде дыбыс және қосу мәзірі, 2D, 3D
графиктерді қолдау қосымшалары бар.
• Direct3D (D3D)- үшөлшемді қарапайымдылықтың қорытынды интерфейсі
( геометриялық дене). DirectX ға кіреді.
• OpenGL (ағылшын тілінен қысқартылған Open graphics Library, сөзбе
сөз аударғанда ашық графикті кітапхана) – екіөлшемді және үшөлшемді
компьтерлік графиктерде қолданылатын қосымшаларды жазуда тілге
бағынбайтын бағдарламалық интерфейс. Қиын үшөлшемді суреттерді онай
жолмен салу үшін шамамен 250 функциясы бар жиыннан тұрады. Бейне
ойындарды құрастыруда, САПР, виртуалды шындықта, ғылыми жұмыстарда
қолданылады. Windows тұғырнамада DirectX пен бәсекелеседі.
• OpenCL (ағылшын тілінен қысқартылған Open computing Language, сөзбе
сөз аударғанда есептеудің ашық тілі). Фреймворк (жүйенің
бағдарламалық тірегі) компьютерлік бағдарламаларды жазуға арналған,
ол бағдарламалар әртүрлі графикалық (GPU) және орталық
процесссорлармен (CPU) қатысты. OpenCL фреймворкте тілді
бағдарламалау және қосымшаларды бағдарлау интерфейсі (API). OpenCL
өзінде нұсқама және мәліметтер деңгейінде қамтамасыз жасайды және
GPGPU техникасын құрастырушы болып табылады.
• GPGPU (ағылшын тілінен қысқартылған General-Purpose Graphics
Processing Units, сөзбе сөз аударғанда GPU-барлық нұсқамада)-
бейнекартаның графикалық жадында құрал жабдықтарды барлық
есептеулерде қолдану, ол жай кезде орталық жад жұмыс атқарады.
• Шейдер ( ағылшынша shader) – синтезделетін суреттерде көленкені
орналастыру бағдарламасы, ол үшөлшемді графиктерде соңғы
параметрлерді анықтау үшін қолдагылады. Ережеге сәйкес жарықтың
жұтылуы және шағылуында, текстураны орнатуда, шағылу және сынуда,
қараңғылауда, беттікпен араласуда және өңдеу орындарының әсері
қиындықтарды туғызады. Қиын беттіктерде қарапайым геометриялық
денелер арқылы суреттелінеді.
• Рендеринг ( ағылшынша rendering) – суреттелу, компьютерлік графикада
программалық жабдықталу арқылы суретті алу жұмысы.
• SDK(ағылшын тілінен қысқартылған Software Development Kit) –
программалық жабдықталуда құрал жабдықтар жиыны.
• CPU (ағылшын тілінен қысқартылған Central Processing Unit, сөзбе сөз
аударғанда – орталықнегізгінегізгі есептелінеті құрылғы) – орталық
микрожад; машиналық нұсқамаларды орындайтын құрылғы; ПК қамтамасыз
ететін аппарат бөлігі, ол бөлік есептелінетін операцияларды және ПК
барлық құрылғыларын түзейтін жұмысқа жауап береді.
• GPU (ағылшын тілінен қысқартылған Graphic Processing Unit, сөзбе сөз
аударғанда – графиктік есептелінетін құрал) –графикалық жад, ПК
жекеленген бөлігі немесе ойын құралы, бұл құрал графикалық
суреттеуді атқарады. Қазіргі таңдағы графикалық жадтар ынғайлы
қорытындылап және компьютерлік графикаларды анық бейнелейді.
Графикалық жад қазіргі кездегі бейнеадаптерлерінде үшөлшемді
графиктерді тездететін жад ретінде қолданылады, бірақ оны кей
жағдайларда есептелу үшін қолданылады.

МАЗМҰНЫ

КІРІСПЕ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... .. ... ..5

1 CUDA технологиясы және оның артықшылықтары ... ... ... ... .6
1.1 GPU-дағы параллель есептеулер
1.1.1 Параллель есептеулердің артықшылықтары
1.1.2 GPU мен CPU – дағы параллель есептеулер арасындағы
айырмашылық ... ... ...
1.1.3 GPU-дағы есептеулерді қолданудың бірінші әрекеттері
1.1.4 GPU дағы параллель есептеулердің қолдану аясы
1.2 CUDA технологиясына кіріспе
1.2.1 NVIDIA CUDA –ң мүмкіншіліктері
1.2.2 CUDА - ның жетістіктері және шектеулері
1.2.3 CUDА - ның даму тарихы
1.2.4 NVIDIA CUDA –ны қолдайтын бейнекарталар
1.2.5 NVIDIA CUDA құрамы
1.3 CUDA-да программалау негіздері
1.3.1 CUDA -да программалаудың моделі
1.3.2 Бұтақталу
1.3.3 Ағындар арасындағы қарым - қатнастар
1.3.4 CUDA жадының модельдері
1.3.4.1 Жад түрін таңдау, жергілікті жадтың орнына бөлінетін
жадты қолдану
1.3.4.2 Циклдерді жаю
1.3.4.3 Бөлінетін жад банкілерінің жанжалдар
1.3.5 Бағдарламалау ортасы
1.3.6 CUDA дағы программаларды тиімдету

2 Жұлдыздардың шартәріздес шоғырланулары мен олардың
эволюциясы ... ... ... ... ... .18
2.1 Жұлдыздардың шартәріздес шоғырлануларының қасиеттері ... ...18
2.2 Жұлдыздардың шартәріздес шоғырлануларының эволюциясы ... 19
2.2.1 Қарапайым модельдер
2.2.2 Тасу эффекті
2.2.3 Жеке және қос жұлдыздардың өзара әрекеті
2.2.4 Шартәріздес шоғырланулардың булануы ... ... ... ..19
2.2.5 Динамикалық үйкеліс
3 Нәтижелер және оларды
талдау ... ... ... ... ... ... ... . ... ... ... ... ... ... ...25

3.1 Зерттеу әдістемесі

3.2 Нәтижелерді талдау

ҚОРЫТЫНДЫ
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ...34
ҚОЛДАНЫЛҒАН ӘДЕБИЕТТЕР ТІЗІМІ ... ... ... ... ... ... ... . ... ... ... ...35
КІРІСПЕ

Компьютер әлдеқашан теоретик-астрономдардың ғана емес, сонымен қатар
бақылаушылардың да негізгі құралына айналған, себебі енді бейне қабылдаушы
ретінде ПЗС матрица қызмет ететіндіктен, астрономдар бейнелерді окуляр
емес, монитор арқылы бақылай алады. Компьютерді астрономияда қолдану басқа
ғылым салаларында да сияқты өте әрқилы. Бұл дегеніміз телескоптар мен
серіктерді басқару, бақылауды автоматтандыру, алынған мәліметтерді өңдеу
және талдау, үлкен каталогтармен жұмыс істеу, аспан механикалық
есептеулерді жүргізу, қазіргі ғылымды онсыз елестете алмайтын компьютерлік
желілер. Сонымен қатар, компьютер астрофизикалық процестерді сандық
моделдеу үшін (компьютерлік эксперименттерді жүргізу үшін) қажет.
Астрофизикадағы компьютерлік модельдеудің ерекшелігі –
астрофизикалық процестерге денелердің орасан көп саны қатысатынына
байланысты бір біріне ұқсас схемалармен көлемі төтенше жоғары есептеулерді
жүргізуге жиі тұра келетіні. Осыған байланысты астрофизикада компьютерлік
эксперимепнттердің көбін суперкомпьютерсіз жүргізу мүмкін емес.
Мысалы, Әлемнің ірі масштабты құрылысын және оның эволюциясын
моделдеу үшін ғалымдардың халықаралық консорциумы Virgo құрылды. Өлшемі
шамамен екі миллиард жарық жылына тең кубтық көлеміндегі (еске сала
кетейік, Метагалактиканың өлшемі 10 млрд.жарық жылынан асады) материяның
үлестірілуінің эволюциясын зерттеу барысында бір ғана компьютерлік
тәжірибені жүргізу Гархингтегі ( Германия ) Макс Планк қоғамының
суперкомпьютерлік орталығының негізгі суперкомпьютер жұмысының бір айдан
көп уақытын алды. Бұның өзінде жұмыс тек қана 10 млрд.бөлшектермен жасалды,
ал бұл, әрине, мәселені айтарлықтай қарапайымдату, өйткені жалғыз біздің
Галактикамызға шамамен 300 млрд.жұлдыз кіреді.
Бірақ суперкомпьютерлер тек осындай алып жұмыстар үшін емес,
сонымен қатар әлде-қайда қарапайым тәжірибелер үшін де қажет. Мысалы, Санта-
Круздағы Калифорния университетінің ғалымдары әлемдегі ең жылдам 100
компьютердің қатарына жататын жаңа суперкомпьютерді планеталық физика мен
астрофизика саласындағы зерттеулерді жүргізу үшін орнатыпты .
Суперкомпьютердің қажеттілігі осы саладағы зерттеу асажаңа жұлдыздар мен
галактикаладың жарылыстары, жұлдыздар мен планеталар қойнауындағы
сұйықтықтардың динамикасы сынды күрделі физикалық құбылыстарды компьютерлік
модельдеуді жиі қажет ететінімен байланысты.
Астрофизикалық зерттеулер суперкомпьютерді қажет ететін көптеген
басқа да мысалдарды келтіруге болады.
Кез келген есептеу құралының басты сипаттамалырының бірі
–жылдамдығы. Дербес компьютердің жылдамдығы орталық процессордың (CPU-ң )
тактылық жиiлiгiмен тiкелей байланысты. Соңғы он жылда есептеу
технологияларының дамуы жылдам қарқынмен жүрді. Мысалы, х86 архитектурадағы
процессорының тактылық жиілігі 1978 жылы маусымда шыққанынан бастап қазірге
дейін 700 есе артқан.
Алайда, CPU жиілігінің арту динамикасына мұқият қарасақ, оның соңғы
жылдары елеулі түрде бәсеңдегенін байқаймыз. Тактылық жиіліктің тоқтаусыз
өсуі бірқатар технологиялық маңызды себептерге байланысты мүмкін емес болып
табылады, қазір процессор өңдеушілері кремнийлік тығырыққа тіреліп отыр.
Басқа себеп — жедел жад жұмысының салыстырмалы аз жылдамдығы.
Процессор қаншалықты жылдам жұмыс жасаса да, мүлт кететін жерлер
арифметикалық есептеулерге байланысты емес, кэш-қателер - жадпен сәтсіз
жұмыс істеу болады.
Сондықтан да қазіргі заманғы есептеуіш жүйелердің өндірушілері бір
процессордың жиілігін көтеруге емес, процессорлар мен ядролар санын
көбейтуге көп назар аударуда. Алдыңғы қатардағы жүйелерде орталық
процессордың ядро саны қазіргі таңда 8 –ге дейін жетті.
Программаны N ядроға параллельдетіп тастау арқылы алуға болатын
максимал үдеу Амдала заңы арқылы беріледі: S = 1(1-P+PN), мұнда Р –
программаның N процессорге параллельдетуге жататын бөлігін орындау уақыттың
үлесі. Сөйтіп, барлық программаның ¾ бөлігін параллельдете алсақ,
максимальды ұту 4 есені құрайды (программаның жұмысы төрт есе тез болады).
Сондықтан параллельдетуге жақсыбейімделген алгоритм мен әдістерді қолдану
маңызды.
Бірақ, GPU (Graphics Processing Unit) графикалық процессорларға
қарайтын болсақ, оларда паралельдету жолы әлдеқайда ерте таңдалған. Бүгінгі
видеокарталарда, мысалы GF8800GTX, процессор саны 128 жетуі мүмкін. Мұндай
жүйелерді дұрыс қолданған жағдайда, олардың тиімділігі өте жоғары болуы
мүмкін.
Алғаш видеокарталар сатылымға шыққанда, олар қарапайым ( орталық
процессормен салыстырғанда ), тар мамандандырылған, тек процессордың екі
өлшемді мәліметтерді көрнекі түрге айналдыру жөніндегі жұмысын жеңілдетуге
арналған болды.
Бүгінде видеокартаны кванттық механика, жасанды ақылдың,
физикалық есептеулер, криптография, фотографиялар бойынша бейнелерді қайта
қалпына келтіру, бейнелерді тану төңірегіндегі және т.б есептерді шешу үшін
пайдаланудың, яғни графикалық процессорды графикалық емес есептерді шешу
үшін пайдаланудың тенденциясы пайда болды. Сәйкес технологияларды
графикалық процессорларда жалпы есептеулерді программалау (GPGPU)
технологиясы деп атайды. Көптеген жоғары көлемдегі есептеу жұмысын
жүргізуді талап ететін есептер GPU архитектурасына жақсы орналасып,
олардың сандық шешуін айтарлықтай жылдамдатуға мүмкіндік береді екен.
Алайда, бұл есептерді қосымшаларды шеңберінде программалаудың
графикалық интерфейсі (API) (DirectX, OpenGL) шешу тиімсіз, себебі бұл API
мүлдем басқа қолданысқа арналған.
Сол себепті Nvidia компаниясында Compute Unified Device Architecture
(қысқаша CUDA) технологиясын — GPGPU-ң C тілінде программа жазуға
мүмкіндік беретін технологиясын даярлады. CUDA SDK деп аталатын алғашқы
нұсқасы 2007 жылы, жаңартылған нұсқасы 2010 жылы шықты.
Жоғарыда айтылғанның барлығына байланысты жұмыстың келесі
мақсаты алға қойылды: CUDA технологиясын игеріп, бұл технологияны
есептеудің жоғары көлемін жүргізуге талап ететін астрофизикалық
мәселелерді шешу үшін қолданудың тиімділігін миллион жұлдызға дейін кіргізе
алатын шартіріздес жұлдыздық шоғырланулардың эволюциясын модельдеу
мысалында көрсету.

1 CUDA ТЕХНОЛОГИЯСЫ ЖӘНЕ ОНЫҢ АРТЫҚШЫЛЫҚТАРЫ

1.1 GPU-дағы параллель есептеулер

Compute Unified Device Architecture (CUDA) Nvidia бұл-GPU
мекемелеріне үлкен масштабтағы жоғары эффективті есептеулер үшін
бағдарламалық жабдықталу болып табылады. Жылдық қорытындылардан кейін CUDA
ғылым және техникалық аймақтар арасында қарсыластарын ұтты, негізгі
ұсынылған кезеңі 2006 жылы. Сол кездері Nvidia жоба жасап, GPU үшін
әмбебап құрылғы секілді кедергі жасайды, ол құрылғы electronicgames және 3D
графикадан жоғары болып тұр. Қайта басу тармағы қосалқы орналасқан жіптер
бойынша басқара алады, және де бұл процессорлар жеке регистры FPU
болғандықтан, олар жеке тұрақты есте сақтауларды бөлді.

CUDA өзінде softwaredevelopment құрал жабдықтарын, міндет
кітапханаларын және hardwareabstraction механизмі бар екенін көрсетті.
Бірақ CUDA өзінде бағдарламашылардың арнайы кодекс жазғандарын қалайды,
бірақ олар қарапайым жағдайларды басқаруларын қаламады. CUDA ойлап
тапқыштары қарапайым CC ++ компилятормен қоса орталық жад арқылы GPU с
кодексімен біріктіре алуларына болды. Бірақ бұл қарқынды дамуларға жол
тартуда, негізгі дәлдік математиканың жүзетін үтір дәлдігіне бағынулары
болып тұр. Жүзетін үтір Doubleprecision, ол осы жылдан кейінгі GPU дің жаңа
тармағы Nvidia ның жол картасында жоспарда тұр.

Бір жағынан Nvidiaның мықты болуы, оның бәсекелестерін мықты болуына
әрекет жасайды. Nvidia барлық кездері өзінің интерфейстан төмен
бағдарлдамасын GPU-дің архитектурасын ешқашан айтпаған. Бұның қорытындысы
яғни программистердің осыған ұқсас жұмыстардың болмауында негіз болған.
Бұлардың орнына олар APIдің анықталынған графикалық функцияларын ұсынады.
Біріншіден бұл жоғарғы дәрежелі программалық модельдерді ықшамдайды,
программистер үшін GPUдағы қиын мәліметтерді ажыратуларын оңайлатады.

Екіншіден Nvidiaғы абстракциялық жағдайлар GPUдің архитектурасын
өзіне ыңғайлы қылып өзгертуіне мүмкіндік жасайды. соңғы GeForce Nvidia, 8
архитектурада 128 жіп процессорлары бар, олардың әрқайсысы 96 қосалқы жіпке
дейін басқара алады, ең көбі 12,288 жіпке дейін. Nvidia APIді өзгертпей ақ
GPU дің келесі кезеңдерінде түгелімен қайта құруына болады. Керісінше,
микропроцессорлардың архитектураның негізгі бөлігі тастарда қалыптасқан.

1. Параллель есептеулердің артықшылықтары

Дербес компьютерлерді кішкентай керемет компьютерге айналдыру
жабдықтары ерте кезден бері танымал. Өткен ғасырдың 80жылдарының өзінде
сауда орындарында сол кезде кең тараған ISA кеңейуінің слоттарына қойылған
транспьютерлер ұсынылып отырған. Алғашқы уақытта оның міндеттеріне қатысты
оны шығару ерекше әсер берген, алайда кейін әмбебап жадлардың тез жұмыс
жасауы артып, параллель шығару мәселесі жақсарғаннан соң транспьютердің
мағынасы қалмады. Бірақта ол құрылғылар қазір болса да ол арнайы әр түрлі
тездетуші құрылғылар. Алайда оларды қолдану аясы тар болғандықтан, бұл
құрылғылар көп қолданыла бермейді[1].
Бірақ соңғы кездерде паралельді есептеу үш көлемді ойындармен
байланысты көпшілік сауда орындарына көшті. Көп ядролы әмбебап құрылғылар
паралельді векторлы есептеулерге қарапайым әмбебап жадлардың шамасы жете
бермейтін 3D-графикте қолданылып, жоғарғы шыңды өндіріске жетті. Әрине
жоғарғы жылдамдықтар тек арнайы міндетте ғана көтеріледі, біраз шектеулері
де бар. Бірақ бұндай құрылғылар қазір бұрын қолданылмаған аумақта да жиі
қолданыла бастады. Сондай паралельді жаддың жақсы мысалына Sony Play
Station ойын приставкаларында қолданылатын Sony – Toshibo-IBM альянсы
құрған Cell жадлары мен сауда нарықтарында көсем болып келген NVIDIA және
AMD компанияларының барлық заманауи бейнекарталарын жатқызуға болады.
Cell Ол барлық әмбебап жадтардан бірінші шықса да,3D бейне тездетушілерге
бірнеше жыл бұрын бірінші графикалық емес есептеу технологиясы GPGPU
негіздемесі шықты (General- Purpose computation on GPUs). Қазіргі заманауи
чиптер жүздеген математикалық орындау блоктарды қабылдаған. Және осы
күштер интенсивті қосымша есептерді тезірек шығаруға көмек береді. Қазіргі
GPU ұрпақтары жоғарғы дәрежелі тілдік программалар мен программа-апаратты
архитектураларда осы мүмкіндіктерді ашып, оларды қолжетімді етіп жасайтын
ыңғайлы архитектурасы бар.
Бірақ GPCPU-ды құру заманауи бейнечиптерді орындайтын тез әрі
ыңғайлы шейдерлі программалардың шығуына әсер етті. Өндірушілер GPU-ді тек
3D-де қолданып қана қоймай басқа да паралельді есептеулерде қолдана
алатындай етіп жасауды ойлады. Ол үшін GPGPU-да графикалық API қолданылды:
OpenGL және Direkt3D. Онда мәліметтер бейнечипке текстур ретінде беріліп,
ал есептеу программалары шейдерлер ретінде көшірілді. Ол тәсілдердің
келеңсіздіктеріне ауыр дәрежеде жобалау және CPU және GPU арасындағы
айырбас шектеулері жатады.
GPU есептеулері өте тез қарқында жүрген және жүріп келеді. Және
кейін бейнечиптерді шығарушы NVIDIA және AMD негізгі өндірушілері
сәйкес CUDA (Comute Unified Devise ArChitecture)және CTM (Close To Metal
немесе AMD Stream Computing) платформаларын ойлап тапты. Өткен модельдерге
қарағанда GPU бейнекарттың аппаратты мүмкіндіктеріне тікелей
қолжетімділікпен жасалған. Платформалар өзара сыйыспайды. CUDA ол C
программалауының кеңейген тілі, ал CМТ ол ассемблярлық кілтті орындаушы
вертуалды тіл. Онымен қоса екі платформалар өткен GPGPU модельінің
маңызды шектеулерін таратты.
Әрине, OpenGL де қолданылатын ашық стандарттар әмбебап болып
көрінеді. Олар әр түрлі өндірушілердің бейнечиптеріне тура сол кодты
пайдалануға мүмкіндік туғызады. Алайда ол тәсілдерде бірнеше кемшіліктер
бар, олар біршама ыңғайлы әрі жұмсақ. Сонымен қатар арнайы бейнекарттардың
мүмкіндіктерінің бір шамасымен танысуға көмек береді.
Сол себепті NVIDIA компаниясы CUDA платформасына көшірді. Оның С
программалық тілі өзінің компиляторы мен кітапханасымен GPU-да есеп
шығаруға арналған. әрине оптималды кодты бейнечипте жазу оңай шаруа емес,
ол қосымша жұмысты талап етеді. Бірақ CUDA дәл осы мүмкіндіктерді
айқындауға арналған және программистке GPU-дың барлық мүмкіндіктерін
бақылауға көмектеседі. NVIDIAжәнеCUDAGe Forse нің 8,9,200 сериялы
бейнечиптерінде қолданылатын G8x, G9x, GT2xx чиптерінде бар. Қазіргі кезде
CUDA 2.0 дің қорытынды нұсқасы шықты. Онда одан да басқа жаңа мүмкіндіктер
пайда болды. CUDA 32-64 битті Linux, Windows, MacOS X операциялық
жүйелерінде қолдануға болады.

2. GPU және CPU арасындағы параллель есептеулердегі айырмашылық

Әмбебап жадлардың жиілігінің артуы физикалық шектеулерге әкеліп
тірелді, және энергияны жоғары дәрежеде пайдалану мен көп көлемде оны
шығару бір чипте бірнеше ядроны орналастыруға байланысты болды. Қазіргі
кездегі сатылатын жадтарда тек төрт ядро ғана болады, және олар қарапайым
қосымшаларға ғана арналған. Онда MIMD деп аталатын көптеген әр түрлі
командалар жинағы орналасқан. Әр бір ядро жеке жұмыс жасап, әр түрлі
жадтарда әр түрлі мүмкіндіктерді орындайды.
Төрт компонентті және екі компонентті векторларға арналып
мамандандырылған векторлық мүмкіндіктер әмбебап жадтарда біріншіден
графикалық қосымшаларға деген сұраныс артуынан шықты. Сол себепті GPU-ді
дәл осы мүмкіндіктер үшін қолдану ыңғайлы болып отыр. Себебі, ол дәл осыған
арналған. Мысалы, NVIDIA бейне чиптерінде негізгі – сегіз немесе он
ядролы, жүздеген ALU-ы бар, бірнеше мыңдаған регистрі бар және толық жадты
бөліп тұратын бөлгіші бар мультижад орналасқан. Сонымен қатар онда бейне
картада барлық мультижадтарды пайдалануға болатын әлемдік жад, әр бір
мультижадта локальды жад, және константқа арналған қарапайым жадтары бар.

Ең бастысы GPU -дағы бірнеше мультижад ядролары SIMD ядролары
болып табылады, және бұл ядролар сол ережелерді бір уақытта орындайды,
жобалаудың бұндай түрі графикалық алгоритмдер мен көптеген ғылыми
мүмкіндіктерге қарапайым болып табылады. Бірақ ол қосымша спецификалық
жобалауды қажет етеді. Сонымен қоса тағы СPU мен GPU архитектуралары
арасындағы айырмашылықтарды атап өтейік. СPU ядролары жоғарғы өндірісті
тек бір ғана топтың мүмкіндіктерін орындауға арналған, ал GPU параллель
орналасқан топтардың көп көлемдегі мүмкіндіктерін орындауға арналған.
Әмбебап жадтар жоғарғы өндірісті дәрежеге жету үшін мамандандырылған[2].
Бейнечиптерде жұмыс параллельді орналасқандықтан олар қарапайым. Бейнечип
кірерде полигон тобын қабылдап, қажетті мүмкіндіктерді орындап, шығарда
пиксельдерді өткізеді. Пиксельдер мен полигондарды өңдеу еркін, оларды бір
бірінен бөлек параллельді орындайды. Сол себепті бастапқы параллельді
ұйымдастырушылық жұмыстан GPU-дың жұмысында үлкен көлемде басқа СPU
топтарындағы талаптарға қарағанда оңай жүктелетін блоктар бар. Сонымен
қатар заманауи GPU-лар тактта бір талаптан артық орындауы мүмкін. Кей
кезде олар MAD+ MUL және MAD+SFU операцияларын бір кезде орындайды.
GPU мен CPU жадқа кіру мәселелеріне байланысты ерекшеленеді, және
GPU- да ол байланысқан және ерекше болып тұр. Егер жадтан мәтін текстильі
оқылса, одан бірнеше минуттан кейін басқа текстильдеріне уақыт келеді, және
оларды жазу үшін де пиксель фреймбуферге жазылады, және бірнеше такттан
кейін жанында орналасқанға жазылады. Сол себепті жадты ұйымдастыру CPU-да
қолданылатындардан ерекшеленеді, және бейнечипке әмбебап жадларға
қарағанда үлкен көлемдік еш - жадтар қажет емес. Тек бірнеше килобайтты
қажет ететін текстурлар ғана керек. Сонымен қатар CPU мен GPU жадтарының
өздерінің ерекшеліктері бар. Барлық орталық жадтарда тізбекті жадты
бақылаушылары болмайды, ал GPU-да әдетте бірнеше бақылаушы бар, яғни NVIDIA
GT200 чипінда 64- битті қаналда сегіз бақылаушы болады. Сонымен қатар
бейнекарталарда жылдам жад қолданылады, нәтижесінде бейнечиптер жоғарғы
дәрежелі өткізгіш жад болып табылады. Ол параллельді есептеу үшін маңызды.
Есептелінетін жүйелердің негізгі қиындықтарды туғызатын мәселелерінің бірі
болып жадтың жүйеден жай жұмыс істеуі болып отыр. CPU шығарушылары оларды
кэшті енгізу арқылы жолын табады. Көп жағдайда қолданылатын жад аймақтары
жоғарғы оперативті немесе кэш-жадқа орналастырылады, олар жүйе жиілігінде
жұмыс жасайды. Бұл көп қолданылатын мәселе және өзінің есептеу арқылы
жүйені қосуында уақытты ұтуға мүмкіндік береді.
Программистер үшін кэш тұнық. Олар оқығанда, мәліметтер жазғанда
оперативті жадқа тіке түспейді, олар кэш арқылы өтіп түседі. Бұлар
жазғаннан кейін кей мәндерді тез есептеуге мүмкіндік береді.
GPU да (мұнда GeForce туралы айтылған) кэштер бар, олар қажетті,
бірақ бұл механизм CPUдағы секілді қуатты емес. Біріншіден, барлық жадта
кэштенеді, ал екіншіден кэштер тек оқылу үшін ғана жұмыс атқарады.
GPU да қосалқы есептеулерді қолданып, жадтың жай айналуын жасырады.
Бір есептеулер мәліметтерді күтіп тұрғанда, басқалары жұмыс жасап тұрады.
Бұл CUDA ның орташа алғанда шығарылымды көтеру үшін арналған мақсаттарының
бірі.
Әмбебап жадтарда транзисторлар мен чиптердің аумағы буфер
командасына өтеді. Барлық бұл аппаратты блоктар көптеген топ бұйрықтарын
орындау үшін қажет. Бейнечиптер транзисторларын орындаушы блоктардың
массивтеріне құртады. Олар жадты бірнеше көлемге бөлетін блоктар тобын
басқарады. Жоғарыда айтылғандар жеке топтардың жұмысын тездетпейді. Ол
чипке сонда орындалатын және жоғарғы өткізгіштік жадты қажет ететін
бірнеше мыңдаған топтарды шығаруына көмектеседі.
Кештеудің ерекшеліктері жайлы. Әмбебап орталық жадтар кеш - жадты
өндірудің дәрежесін жадқа кірудің баяулауын тоқтату арқылы ұлғайту үшін
пайдаланады. Ал GPU кешті немесе ортақ жадты өткізу жолағын үлкейту үшін
қолданады. CPU үлкен жадты кеш арқылы жадқа деген кіру баяулығын азайтады.
Бұл аппаратты бөліктер чиптің көп аумағы мен көп қуатты қажет етеді.
Бейнечиптер жадқа кіру баяулығын бірнеше мыңдаған топтарды қатар алып жүру
арқылы қарастырады. Яғни, бір топ өзінің жадтағы мәліметтерін күтіп
отырғанда, келесі бейнечип басқа топтың есептерін күтпей жылдам шығара
береді. Көп топты қолдаудың бірнеше ерекшеліктері бар. CPU бір жадты ядрода
1-2 топ есеп шығарады, ал бейнечиптер чиптегі бірнеше дана болып келетін
мультижад арқылы 1024 топ қарастырады. Егер CPU-да бір топтан екінші топқа
ауысу жүздеген такттан тұрса, онда GPU бір күнде бірнеше топқа ауыса алады.
Сонымен қатар орталық жадтар SIMD блолктарын векторлық есептер үшін
қолданады. Ал бейнечиптер оны топты скалярлы өңдеу үшін қолданады. SIMD ол
кезде өндірушіден векторға өзгертуді талап етпейді.
Қорытындысында GPU қуатын дұрыс қолдану негізіне ғылыми және басқа
да графикалық емес есептеулерде алгаритмдерді бірнеше блоктарға
параллельдеу болып табылады. Мысалы, молыкулалы модельдеудегі бірнеше
қосымшалар бейнекартада есептеуге жақсы дағдыланған. Олар есептеу кезінде
көп дәрежеде қуат қажет етеді. Сол себепті олар параллельді есептеу үшін
тиімді[3-7].

1-Сурет CPU және GPU да әр түрлі логика қанша орын алатындығы
көрсетеді

GPU да есептеулерді жүргізу алгоритмдерде жақсы нәтижені көрсетеді.
Олар параллельді мәліметтер өңдеу жолын қолданады. Сонымен қатар жақсы
нәтижелерге жетеді. Егер арифметикалық талаптардың саны жадқа байланысты
санға қатысты болса онда жадтың көлемі өседі.
Жоғарыда айтылған барлық ерекшеліктердің нәтижесінде бейнечиптердің
теориялық өндірілуі CPU өндірісінен асады. NVIDIA компаниясы осындай CPU
мен GPU өндірісімен соңғы бірнеше жыл бойы айналысып келеді.

3. GPU-дағы есептеулерді қолданудың бірінші әрекеттері

Бейнечиптерді параллельді математикалық есептеулерде бұрыннан бері
қолдануға тырысқан. Сондай қолданудың бірінші мүмкіндіктері өте жұпыны
болған, және кейбір аппаратты функцияларда шектеу жасаған, мысалы
растеризация және Z буферизацияда. Бірақ қазіргі ғасырда шейдерлер пайда
болғаннан кейін матрицаларды шығара бастаған. 2003 жылы SIGGRAPN да бөлек
секция GPU мен шығаруға бөлінген. Және ол GPGPU (General –
Purposcomputationon GPU) деген атауға ие болған. BrookGPU көбірек танымал –
бұл Brook жобалауының GPU да графикалық емес есептеулерін жүргізетін топтық
тілінің компиляторы болып табылады. Ол шыққанға дейін өндірушілер
бейнечиптерде есеп шығару үшін кең тараған екі API: Direkt3D немесе
OpenGLбіреуін пайдаланады. Ол GPUдың қолданысын шектеді, себебі оның 3D
графигінде шейдер мен текстур қолданылады. Brook оның жұмыстарын
жеңілдетуіне көмектеседі. Стенфорд университетінде шыққан бұл С тілінің
кеңеюлері программистерден үш дәрежелі API ді жасырды да, бейнечипті
параллельді жад ретінде көрсетті. Компилятор бір файлын C++ кеңейту
кілтімен және DirektX, OpenGL, x86 қосымшаларымен қолданды. Әрине Brook-
тың көптеген кемшіліктері бар. Бірақ оның жай ғана пайда болуының өзі де
GPU есептеріне NVIDIA және ATI ға қызығушылық туындайды. Себебі бұл
сауданы күрделі түрде өзгертіп, жаңа секторлар шығарды. Яғни, бейнечиптер
бойынша параллельді есептеу.
Кейінірек Brook жобасының көптеген зерттеушілері NVIDIA
өндірушілерінің құрамына кірігіп кетті. Олар параллельді есептеудің жобалық-
апаратты бағытын дамытқан. NVIDIA – ның ең негізгі ерекшелігі өндірушілер
GPUдың барлық ерекшеліктерін біледі. Ол жобаның күшіне NVIDIA CUDA
айналды.

4. GPU-дағы параллель есептеулердің қолдану аясы

Есептеулерді бейнечипке көшіру қандай ерекшелікті әкелетінін түсіну
үшін орта сандық есепті мысал келтірейік. Орта есеппен GPUда есеп шығару
үшін көптеген берілген тапсырмаларда әмбебап жадтарға қарағанда 5 тен
30ға көбейгені байқалады. Ең үлкен сандар SSE блоктары арқылы жақсы
есептелетін кодта бар.
Тек бірнеше осында мысалдарды атап кетейік:
• Флуоресцентті микроскопия: 12x;
• Молекулярлы динамика ( non – bonder forsecalc) : 8-16x
• Электростатика (Кулонды тікелей және көп дәрежелі түрде суммирлеу): 40-
120x және 7x

Қазір GPU да келесі есептеулер жүргізіледі: анализ және суреттер
мен сигналдарды өңдеу, физиканы симуляциялау, есептеу математикасы, есептеу
биологиясы, қаржылық есептер, мәліметтер базасы, газдар мен сұйықтар
динамикасы, криптография, адаптикалық сәулелі терапия, астрономия, дыбысты
өңдеу, биоинформатика, биологиялық симуляция, компьютерлік көз қарас,
мәліметтер анализі (datamining), цифрлық кино және теледидар,
электромагнитті симуляция, геоақпараттық жүйе, әскери қолданыстар, таулық
жобалар, молекулярлы динамика ,магнитті –резонансты топография, нейрожелі,
мухитаралық графикті зерттеулер, физика бөлігі, квантті химия, сәулелер
трассировкасы, визуализация, радарлар, гидродинамикалық модельдеу, жасанды
интелект, спутникті мәліметтер анализі, сейсмикалық барлау, хирургия,
ультрадыбыс, бейнеконференциялар.
Олар жайлы қосымшаларды NVIDIA компаниясының сайтының CUDA жайлы
бөлігінен табуға болады. Көріп отырғандарыңыздай тізім өте үлкен, бірақ бұл
барлығы емес. Оны жалғастыруға да болады, тіпті болашақта басқасын да тауып
алуы мүмкін.

1. CUDA технологиясына кіріспе

Бұл тақырыпта программистерге қуатты есептелінетін сипатта
бейнекарталарды қолдану технологиясы жазылған. Nvidia ұсынған құралдар С++
тілі көмегімен географиялық жүйесіне бағдарлама жасауға мүмкіндік береді.
Еспетелінетін технологиялардың дамуы соңғы онжылдақта қарқынды дамуда. Оның
дамуы соншалықты жүйе құраушылар “кремнийлі тұғырыққа” тірелді. Тактілі
жиілігінің өсуі технологиялық себептерге мүмкін емес болды. Осыдан кейін
барлық қазіргі таңдағы жүйе құраушылары бір жүйенің жиілігінің өсуіне емес,
жүйенің және ядерлердің өсуіне көңіл аударатын болды. Қазіргі таңда орталық
жүйе (CPU) берілу жүйесінде 8 ге теңеседі.
Барлық себеп – салыстырмалы түрде оперативті жадтың жылдамдығының аз
болуы. Жүйенің тез жұмыс істеуі қалай болғанмен, мысалы тар жолдар, бұл
практикада көрсеткендей бұл арифметикалық операция емес, бұл яғни кэш-
кедергінің сұралуы болып тұр.
Дегенмен, графикалық жүйелерге қарайтын болсақ GPU (Graphics
Processing Unit) қосалқы жолға алдындары келген. Қазіргі таңдағы
бейнекарталарда, мысалғы GF8800GTX, жүйе саны 128ге жетуі мүмкін. Жүйе
шығарушылар программалағанда мәнді болуы мүмкін (сур 1).

1.2-Сурет. GPU және CPU үшін құбылмалы нүктелердің операциялар саны.

Сатылымда алғаш рет бейнекарталар шыққанда, олар жеткілікті
қарапайым болды (орталық жүйемен салыстырғанда) азғана қызметке бағытталған
құрылғылар, олар екіөлшемді мәліметтердің көзқарасы бойынша жүйенің
қиындығын алу үшін арналған. Ойын индустриясының дамуы және Doom (сур2)
және Wolfenstein (сур 3) секілді үшөлшемді ойындардың пайда болуы 3D
аймағында қажеттіліктер пайда бола бастады.
3Dfx компаниясының ұсынуларында алғашқы Voodoo (1996) бейнекарталар
шыққанда және 2001 жылға дейін GPUда кірген ақпараттар үшін фиксирленген
операциялар жыйынын құраған. Көру алгоритмдерде программистерде басқа
амалдар болмаған, және ыңғайлылығы үшін шейдерлер-аз бағдарламалар шыққан,
олар әрбір шың және пиксель үшін бейнекарталарды атқарды. Олардың
жұмыстарына шыңдарда қайтакірулер кірген және нүктеде жарықты есептеу
болған, мысалғы Фонга моделі бойынша. Дегенмен қазіргі таңда шейдерлер
үлкен қарқынды дамуда, олардың азғана қызметке бағытталған үшөлшемді
қайтақұрылу және разтеризациялау үшін ойлап табылған.
GPU әмбебап көпжүйелі жүйе дамуына бағытталғанда, шейдерлер тілі
азғана қызметке бағытталған болып қалады. Оларды FORTRAN тілімен
салыстыруға болады, сонымен қатар олар бір мәселе ғана үшін арналған.
Шейдерлер басқа мәселелерге аз арналған, тек үшөлшемді қайта құрылған және
растеризациядан басқа, FORTRAN секілді сандық есептеулерден басқа
есептеулерді шығару үшін ыңғайлы емес.
Квантты механика, интелектуалды өнерлер, криптографияның физикалық
есептеулері, физикалық корректілі визуализацияның, фотолар бойынша
реконструкция және қайта танылуы орталықтарында ұлттық емес бейне
карталарды қолдануды есептеулері бүгінгі таңда пайда болды. Бұл есептеулер
API ортасында ыңғайсыз болып отыр (DirectX, OpenGL) , олар дегенмен басқа
қолданулар үшін ойлап табылған.
GPU дың ортақ мақсаты бағдарламаның дамуы үлкен ауқымда
технологиянның үшін ойға келді. Nvidia компаниясының қалауында Computer
Unified Device Architecture технологиясы ойлап табылды, оған қарсылас Ati-
Stream технологиясы болды.
Осы мақала жазылғанда STREAM технологиясы CUDA-дан әлде қайда артта
қалып отырған, сондықтан бұл қарастырылмайды. Біз CUDA ның GPGPU
технологиясына басты көңілді аударамыз, ол С++ тілінде жазуға мүмкіндік
береді.

1. NVIDIA CUDA –ң мүмкіншіліктері

CUDA технологиясы бұл NVIDIAның программалық-аппаратты есептеуші
архитектурасы болып табылады, ол Си тілінің кеңейтілуіне негізделген, ол
графикалық жылдамдатқыштың құралдарын құрауда және қосалқы есептерді құру
кезінде жадты басқаруына мүмкіндік береді. CUDA GeForce-тің сегізінші жаңа
түрінде және одан жоғары түрлірінде (GeForce 8, GeForce 9, GeForce 200),
сонымен қатар Quardo жәнеTesla графикалық жүйелердегі бейнетездеткіштерінің
алгоритмін анықтауға көмектеседі.
CUDA көмегімен жасалынған GPUдің еңбек сыйымдылығы жеткілікті үлкен,
ол алдыңғы GPGPU есептеулерінен төмен. Осындай бағдарламалар MPI секілді
бірнеше мультижүйелердің қосымшаларының бөлуін талап етеді, бірақ ортақ
бейнежадта сақталатын ақпараттар бөлінбеуі қажет. OpenMP секілді
мультижадын бағдарламалағанда, CUDA бағдарламасы жадтың жақсы ұйымдасуын
талап етеді.
Құраушылар үшін қабылдаулар көптеген мысалдар мен жақсы
құжатталғаннан тұрады. Оқыту бағдарламасы OpenMP және MPIмен таныс
болғандар үшін екі-төрт аптаны құрауы мүмкін. АPIдің негізі болып Си
тілінің кеңейтілуі болып табылады, кодтың көрсетілімі үшін осы тілде CUDА
SDK жүйесіне ашық компилятор Open 64 негізінде құрылған nvcc тобындағы
компилятор кіреді.
CUDA-ның негізгі сипаттамалары:
• NVIDIA бейнечиптеріндегі қосалқы шешімдер үшін біріздендірілген
бағдарламалық-аппараттық есептеулер;

• ұялыдан мультичиптерге дейін үлкен қолдау шешімдер жинағы;

• Си бағдарлауындағы қалыпты тілі;

• FFT (Фурьенің жылдам қайта құрылуы) және BLAS (сызықты алгебра) сандық
талдаудағы қалыпты кітапхана;

• CPU және GPU арасындағы оңтайландырылған мәліметтер алмасуы;

• Графикалық API OpenGL және DirectX арасындағы әсер;

• 32 және 64 битті қабылдайтын операциялық жүйелер: Windows XP, Windows
Vista, Linux және MacOS X;

• Төмен деңгейде құрау мүмкіншілігі.

Сонымен қатар операциялық жүйелерді қолдауда барлық негізгі
диструбуттарды (Red Hat Enterprise Linux 3.x4.x5.x, SUSE Linux 10.x)
қолдануын айта кету керек, бұл негізі энтузиасттердің айтуы бойынша. CUDА
барлық басқа жиындарда да жұмыс атқарады: Fedora Core, Ubuntu, Gentoo және
т.б.
CUDА (CUDА Toolkit) құраушылары келесілерді қосады:
• Nvcc компиляторы;

• FFT және BLAS кітапханалары;

• профильдеуші;

• GPU үшін gdb дұрыстаушысы;

• Стандартты NVIDIA драйверінің құрамындағы CUDА runtime драйвері;

• CUDА Developer SDK (ағымдағы код, утилитердер және құжаттану).

Ағымдағы код үшін мысал: битонды қосалқы сұрыптау (bitonic sort),
матрицаның өзгерісі, үлкен алаптардағы қосалқы префиксті жинақтау, суретті
аудару, қосалқы вейвлет-қайта құрылуы, мысалғы OpenGL және Direct3D ара-
қатынасы, CUBLAS және CUFFT кітапханаларын қолдану, опиционның бағасын
есептеу ( Блэк-Шоулза формула, биноминальді түрі, Монте-Карло әдісі),
Mersenne Twister кездейсоқ сандары үшін қосалқы генератор, үлкен массив
үшін есептелінетін гистограммалар, дыбысқысымы, Собеля сүзгіші (шекара
орналасуы).

2. CUDА - ның жетістіктері және шектеулері

Программисттің көзқарасы бойынша графикалық конвейер құру жиыны
болып табылады. Геометрия блогы үшбұрышты болып түрленеді, ал мониторда
көрсетілген блок растеризациясы - ол пиксель. GPGPU ды бағдарлаудағы ұлттық
түрі келесідей болады:

1.3-Сурет GPGPUді бағдарламалағандағы дәстүрлі модель

Осындай түрдегі есептеулерді GPU ға көшіру үшін арнайы қадамдар
керек. Екі вектордың элементті орналасуы бейнеде немесе буфер бейнетысында
фигураның талдауын қажет етеді. Қалпы растеризуланып, әр пиксельдің түрі
берілген бағдарламада есептелінеді. Әр пиксель үшін бағдарламалар кірілген
мәліметтерді есептейді. Осы көпсанды операциялар қарапайым тілдегі
бағдарлау бір оператор бойынша жұмыс істеуіне қажет.
Осыдан GPGPU қолдану барлық мақсаттағы есептеулер үшін құраушыларды
оқытуда үлкен қиындық түрінде болып тұр. Басқа шектеулер де жеткілікті,
пиксельді шейдер бұл пиксельдің оның координатасындағы қорытынды түсіне
бағынышты формула ғана, ал пиксельді шейдерлер тілі-Си бойынша осы
формулалардың тілдік жазылулары. GPGPUдағы алғашқы әдістері қулы болды, ол
GPU дің қуаттылығын қолданады, ол барлық ыңғайлылықсыз болған. Онда
мәліметтер сурет түрінде көрсетілген, ал алгоритм-растеризация бағдарламасы
болып отыр. Мұнда модель жадын және қолдануын ерекше белгілеп кету керек.
NVIDIA компаниясындағы GPU дағы бағдарламалық-аппараттық
архитектурасы GPGPUдің алдыңғы модельдерінен келесі белгілер бойынша
ерекшеленіледі, яғни Си тілінде стандартты синтаксис бойынша GPU үшін
программаларды жазуға мүмкіндіе береді. CUDА графикалық API ға бағынышты
емес және арнайы ортақ есептеулер үшін бірнеше ерекшеліктері бар.

CUDА ның GPGPU есептеулеріндегі дәстүрлі тіл табу алдындағы
басымдылықтары.
• CUDА қосымшасындағы бағдарламалау интерфейсі Си тіліндегі
бағдарлауына негізделген, ол процессті оқуда және CUDА
архитектурасын енгізуде оңайлатады;

• CUDА 16 кб өлшемдегі бөлінген ағындар арасындағы мультижадды
қаматмасыздандырады, ол текстуралы таңдаулармен салыстыратын
кэшті ұйымдастыратын енді өкізу жолағын қолданады;

• Жүйе және бейнежад арасындағы оңтайлы мәліметтер айналымы;

• Графикалық API дағы қажеттіліктердің болмауы;

• Жадтың сызықты мекені, gather және scatter, қолдану мекендегі
басылым мүмкіншіліктері;

• CUDА ның жабық архитектурасы, ол NVIDIAға тәуелді.

CUDА негізгі шектеулері:
• Атқарылатын функциялардағы ресурс көмегінің болмауы;

• 32 ағындағы блоктың минимальді ені;

• NVIDIA тәуелді CUDАның жабық архитектурасы.

GPGPU ның алдыңғы әдістері көмегімен жасалынған бағдарламаның әлсіз
орындары болып оның шыңдық шейдерлерді атқаратын блоктарды қолданбауы, онда
мәліметтер текстурада сақталынады, олар экраннан тыс буферлерде
көрсетіледі, ал көпжолды алгоритмдер пиксельді шейдерлі блоктарды
қолданады. GPGPU дың шектеулері ретінде келесілерді атап кетуімізге болады:
аппаратты мүмкіншіліктерді эффективті қолдаунары аз болуы, жадты өткізудегі
жолақтардың аз болуы, scatter операциясының болмауы (тек gather ғана бар),
графикалық APIді міндетті түрде қолдану.
GPGPU ның алдыңғы әдістеріне қарағанда CUDАның негізгі
басымдылықтары ретінде бұл архитектураның графикалық емес есептеулерді
эффективті дұрыс шығарулары және бағдарламада графикалық концепция үшін
ыңғайлы жағдайда алгоритмдерді ауыстырмай С тілін қолданулары болып отыр.
CUDА GPUда графикалық APIді қолданбай есептеудің жаңа жолын ұсынды, ол жол
жадқа баратын қосымша жолдың бірі (scatter немесе gather). Осындай шешімдер
GPGPUдың қателіктерін жойды және барлық атқарылатын блоктар жұмыс жасайды,
сонымен қатар толықсанды математика және битті қозғалудығы операцияларды
қолдану аясын кеңейтті.
Онымен қоса, CUDА графикалық APIде қол жеткізе алмайтын аймақтардың
ашылуына жол беретін аппаратты мүмкіндіетерді ашты, мысалғы бөлінетін
жадтар секілді. Бұл аз көлемді жад ағын блоктарына рұқсат алады
(мультижүйеде 16 килобайт). Бұл көп қолданылатын мәліметтерді кэштейді және
ол осы есептеулер үшін текстуралы таңдаулармен салыстырғанда үлкен
жылдамдықты қамтамасыз етеді. Ол өз кезегінде көп қосымшаларда қосалқы
алгоритмдердің сезімталдылығын төмендетеді. Мысалғы, бұл сызықты алгебра
үшін тиімді, ол Фурьенің тез қайта құрылуына және суреттердің фильтірлі
өңделуі үшін қажет.
CUDАға ыңғайлы және жадқа рұқсат алуы. Графикалық APIдегі
программалық код мәліметтерді бір дәлдіктегі құбылмалы нүктемен 32-х
мәнінде шығарады ол алдымен орналасу аймағын анықтап алады (RGBA мәні сегіз
render target үшін бірдей), ал CUDА ол scatter басылымын көтере алады, ол
басылым кез келген мекен үшін тежеусіз мәліметтер болып отыр. Мұндай
басымдылықтар GPU де басқа алгоритмдердің орындалуына мүмкіндік береді,
олар графикалық APIде негізделген GPGPU көмегінің тәсілі арқылы атқарылады.
Сонымен қатар графикалық API мәліметтерді текстураларда сақтайды,
оның себебі алгоритмдердің қиындатылуы және арнайы мекендерді қолданылуын
талап етуінің болғаны. Ал CUDА кез келген мекенде барлық мәліметтерді оқи
алады. Сонымен қатар бір жағынан айтқанда CUDА GPU және CPU арасындағы
мәліметтер алмасуын ыңғайлатады. Ал төмен деңгейлі қалайтын тапқыштар үшін
CUDА ассемблерде төмен деңгейлі бағдарлама жабдықталуын ұсынады.

3. CUDА - ның даму тарихы

CUDА тапқыштарымен 2006 жылы чиппен бірге G80 шығарылды, ал оның
негізігі CUDА SDK шығуы 2007 жылы болды. 2007 жылы Tesla шешімі бойынша 1.0
версиясы шықты, ол G80 чипіне негізделген, және ол жоғарышығарылым
есептеулер үшін арналған. Одан, жыл соңында CUDАның бета түрі 1.1 шықты, ол
мәнсіз болғанмен көп жаңа мүмкіндіктерді әкелді.
CUDА1.1 түрінде шыққан NVIDIA бейне драйверлерінде CUDА функциялануы
қолданғаны болды. Бұл CUDА ның кез келген бағдарламаларында GeForce8 және
одан жоғары бейне карталарын айтуға болады, драйвердің минимальді түрі
169.xx. ті атап кетсек болады. Бұл шығарущылар үшін өте қажетті, бұл
шарттарды сақтау бағдарламалар оңай жұмыс істей алады. Сонымен қатар
асинхронды есептеулер іске қосылды, тағы мәліметтерді бейнежадтарда
ассихронды берілуі, жадқа рұқсат алу операциялары, 64 битті Windows түрін
көтеретін және SLI режиміндегі CUDАның мультичиті жұмысының
мүмкіншіліктері.
Осы уақытта GT200-CUDA 2.0 негізіндегі есептеулер қазіргі таңда
тиімді болып отыр, олар сызықты GeForce GTX 200 орнына шыққан. Бұл бета түр
2008 жылы шықты.Екінші түрінде екі дәлдікті есептеулерді және Mac OS X
көтереді, онда 3D текстурасы қыбылданады.
Екі дәлдікті есептеулерге қарасақ, онда олардың осы кездегі
аппаратты шығарылуда бірдәлдіктен жылдамдығы аз болуы байқалды. Оның
себептері біздің GeForce GTX 280 мақаласында қарастырылған. GT200 дегі
орналастырулар бұл негізінен FP32 қарағанда 10 есе төмен[8-9].
Шығарылымдар негізінен одан да төмен болуы мүмкін, оған себеп
архитектурасының 32 битті оқылуы болуы мүмкін, сонымен қатар ол екі
дәлдікті графикалық қосымша және GT200 үшін де қажетті емес. Қазіргі
таңдағы төртядерлі жүйелер шығарылымы әлде қайда төмен болып отыр.
Болашақта бірдәлдікке қарағанда 10 есе төмен болуы мүмкін, мұндай жағдай
аралас дәлдіктер үшін қажет. Көп таралған құрал бірдәлділікке жақындап,
одан одан екідәлдікті анықтайды. Енді оны бейнекарталарда жасауы мүмкін.
CUDA 2.0 тағы бір қажетті мүмкіншіліктерінің бірі болып GPU ге
қатысы болмауы. Қазір орталық жүйенің тез атқарылуы үшін жоғары эффективті
көп ағынды SSE кодында CUDA кодын ортақтауға болады. Бұл мүмкіншіліктер тек
дұрыс орналастыруда ғана емес, сонымен қатар NVIDIA бейнекартасы еркін
қолдануы. CUDAның қалыпты жағдайда болуына себеп ретінде NVIDIAның барлық
жүйеде болуы негіз болып отыр. 2.0 түріне дейін мұндай жағдайды екі код
түрінде істелуі мүмкін: CUDAға жеке және CPU ға жеке. Ал енді CPUда барлық
CUDAны атқаруға болады, бұл төмен жылдамдықты болса да.

4. NVIDIA CUDA –ны қолдайтын бейнекарталар

CUDA көмегі бар болған барлық бейнекарталар дыбыс және бейне
өңдеуден бастап медицина және ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Үшөлшемді бейнелеуарқылы галактикалар пішіндерін модельдеу
Параллельді алгоритімді ақпараттық қауіпсіздікте қолдану
Астрофизикалық ағын лақтыруларды моделдеу
Дискілік галактикаларды моделдеу
Шаңкөмірлі отынды жағу кезіндегі жану камерасының температуралық сипаттамаларына ауырлық күшінің әсері
Құрылымы әртүрлі галактикаларды фракталдық бейнелеу
Жартылай иондалған классикалық гeлий плазмасының диэлeктрлік өтімділік тeнзоры
Бейсызық физиканың жаңа әдістері және компьютерлік модельдеудің көмегімен айнымалы жұлдыздар мен галактикалардың фракталдық қасиеттері мен заңдылықтарын анықтау
Астрофизика институты
ДИПЛОМДЫҚ ЖОБАНЫҢ ЭКОЛОГИЯЛЫҒЫ МЕН АДАМНЫҢ ТIPШIЛIК ӘPЕКЕТIНЕ ҚАУIПСIЗДIГI
Пәндер