ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ИспользованиС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний для графичСских процСссоров с использованиСм Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Nvidia Cuda

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ ΡΠ²ΡΠ·ΠΈ с ΡΡ‚ΠΈΠΌ компания NVIDIA выпустила ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ CUDA с C-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ языком программирования, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ свой компилятор ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для вычислСний Π½Π° GPU. НаписаниС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΠΎΠ² совсСм Π½Π΅ Ρ‚Π°ΠΊ-Ρ‚ΠΎ просто ΠΈ Π΄Π»Ρ этой Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ручная Ρ€Π°Π±ΠΎΡ‚Π°, Π½ΠΎ CUDA ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ всС возмоТности, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ программисту большой ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ИспользованиС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний для графичСских процСссоров с использованиСм Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Nvidia Cuda (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ИспользованиС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний для графичСских процСссоров с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Nvidia Cuda

ВСхнология CUDA — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-аппаратная Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° NVIDIA, основанная Π½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ языка программирования C. CUDA позволяСт ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ возмоТности Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ GPGPU, Π»ΠΈΠΊΠ²ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использовались Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ графичСский ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйсы Direct3D ΠΈΠ»ΠΈ OpenGL. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ OpenGL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ для Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΠΎΠ² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ нСдостатки, ΠΎΠ½ΠΈ Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠ΅. Они Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцифичСскиС возмоТности ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ быстрая раздСляСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ. РСшив эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, компания NVIDIA выпустила Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ CUDA c C-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ языком программирования со ΡΠ²ΠΎΠΈΠΌ компилятором ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ для вычислСний Π½Π° GPU.

Π’ Π½Π°ΡˆΠ΅ врСмя всС мСньшС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. Π£ Π½Π°Ρ появились Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π»Π°Π΄ΠΎΠ½ΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь прикосновСния ΠΏΠ°Π»ΡŒΡ†Π° ΠΊ Π΄ΠΈΡΠΏΠ»Π΅ΡŽ. ВысокоскоростныС ΠΊΠ°Π½Π°Π»Ρ‹ связи, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Π΅Π· Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ большими объСмами Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π‘Π²Π΅Ρ€Ρ…ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ процСссоры ΠΈ Ρ‚ΠΎΠ½ΠΊΠΈΠ΅ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠΈ, ΡƒΠ»ΡŒΡ‚Ρ€Π°Π±ΡƒΠΊΠΈ, ΠΌΠ°ΠΊΠ±ΡƒΠΊΠΈ всС с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ процСссорами. ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ ΠΎΠ΄Π½Π° большая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ сроки. Иногда поступаСт такая Π·Π°Π΄Π°Ρ‡Π°, Ρ‡Ρ‚ΠΎ для Π΅Ρ‘ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π±Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ самых соврСмСнных сСрвСрных Π·Π°Π»ΠΎΠ² с ΡΠ°ΠΌΡ‹ΠΌΠΈ соврСмСнными процСссорами Π±ΡƒΠ΄Π΅Ρ‚ нСдостаточно ΠΈ Π΄Π°ΠΆΠ΅ экономичСски Π½Π΅Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π΅Ρ‘ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π’ ΡΡ‚ΠΎ врСмя ΠΈ Π²ΡΡ‚ΡƒΠΏΠ°Π΅Ρ‚ Π² ΠΈΠ³Ρ€Ρƒ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π΅ массовоС ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΠ΅, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ General-Purpose computation on GPUs (GPGPU) — ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния Π½Π° Π³Ρ€Π°Ρ„ичСских процСссорах. Π’Π΅Π΄ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΡ‹ содСрТащиС сотни матСматичСских ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ², ΠΈ Ρ‡Ρ‚ΠΎ данная ΠΌΠΎΡ‰ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° для большого ускорСния мноТСства Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ интСнсивных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. И ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ поколСния GPU ΠΈΠΌΠ΅Π΅Ρ‚ достаточно Π³ΠΈΠ±ΠΊΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, Ρ‡Ρ‚ΠΎ вмСстС с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°ΠΌΠΈ ΠΈ Π²Ρ‹ΡΠΎΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ языками программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ эти возмоТности ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈΡ… Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ доступными [1].

ВычислСния Π½Π° GPU Ρ€Π°Π·Π²ΠΈΠ²Π°Π»ΠΈΡΡŒ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ быстро. И Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡˆΠ½ΠΈΠΉ дСнь ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΠΎΠ², NVIDIA, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΈ Π°Π½ΠΎΠ½ΡΠΈΡ€ΠΎΠ²Π°Π» ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Compute Unified Device Architecture (CUDA). ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ программирования GPU, CUDA Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° с ΠΏΡ€ΡΠΌΡ‹ΠΌ доступом ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ возмоТностям Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚. ВСхнология CUDA — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-аппаратная Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° NVIDIA, основанная Π½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ языка программирования C. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° CUDA устранила Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ GPGPU, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйсы Direct3D ΠΈΠ»ΠΈ OpenGL ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ графичСский ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€.

ДоступныС стандарты, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ OpenGL, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ популярными ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΎΠ½ΠΈ Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ для Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΠΎΠ² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Π’Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ массу нСдостатков, ΠΎΠ½ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅. Π’Π°ΠΊ ΠΆΠ΅ ΠΎΠ½ΠΈ Π½Π΅ Π΄Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцифичСскиС возмоТности ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ быстрая раздСляСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΈΠΌΠ΅ΡŽΡ‰Π°ΡΡΡ Π² ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссорах.

Π’ ΡΠ²ΡΠ·ΠΈ с ΡΡ‚ΠΈΠΌ компания NVIDIA выпустила ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ CUDA с C-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ языком программирования, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ свой компилятор ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для вычислСний Π½Π° GPU. НаписаниС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΠΎΠ² совсСм Π½Π΅ Ρ‚Π°ΠΊ-Ρ‚ΠΎ просто ΠΈ Π΄Π»Ρ этой Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ручная Ρ€Π°Π±ΠΎΡ‚Π°, Π½ΠΎ CUDA ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ всС возмоТности, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ программисту большой ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ возмоТностями GPU [2]. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° CUDA прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, выполняСмыС Π½Π° Π³Ρ€Π°Ρ„ичСских процСссорах видСоускоритСлСй ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ GeForce сСрии 8, 9, 200, Π° Ρ‚Π°ΠΊΠΆΠ΅ спСциализированныС для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ расчСтных Π·Π°Π΄Π°Ρ‡ GPU сСмСйства Quadro ΠΈ Tesla.

Π’ Π½Π°ΡΡ‚оящСС врСмя Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° послСдняя вСрсия CUDA 5.5, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ появились Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΎΠ²Ρ‹Π΅ возмоТности, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • — MPS (Multi-Process Service) Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ нСскольким процСссам Π² MPI-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ GPU c Compute Capavility 3.5;
  • — Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ARMv7;
  • — Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ для Ubuntu 12.04/12.10, OpenSUSE 12.2, SLES 11, Fedora 18, RHEL 6;
  • — ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ CUFFT, CUPTI, CURAND, CUSPARSE, Thrust;
  • — ΠΏΠΎΠ΄ MacOS Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ компилятора ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Clang;
  • — ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ cuda-gdb Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π΅, Ссли Π΅Π΅ Compute Capavility 3.5;
  • — ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ся удалСнная ΠΎΡ‚Π»Π°Π΄ΠΊΠ°;
  • — ΡΡ‚Π°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ MPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ;
  • — Visual Profiler ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ характСристики ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ NVIDIA CUDA:

  • — ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний Π½Π° Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΠ°Ρ… NVIDIA;
  • — Π±ΠΎΠ»ΡŒΡˆΠΎΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΎΡ‚ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π΄ΠΎ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡ‡ΠΈΠΏΠΎΠ²ΠΎΠΉ;
  • — ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ языки программирования C;
  • — ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ числСнного Π°Π½Π°Π»ΠΈΠ·Π° FFT (быстроС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅) ΠΈ BLAS (линСйная Π°Π»Π³Π΅Π±Ρ€Π°);
  • — ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ CPU ΠΈ GPU;
  • — Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅ с Π³Ρ€Π°Ρ„ичСскими API OpenGL ΠΈ DirectX;
  • — ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° 32- 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм: Windows XP, Windows 7/8, Windows Vista, Linux ΠΈ MacOS X;
  • — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

ГрафичСский ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программистов, считаСтся Π½Π°Π±ΠΎΡ€ΠΎΠΌ стадий ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π‘Π»ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, Π° Π±Π»ΠΎΠΊ Π΄Π²ΠΈΠΆΠΊΠΎΠ² растСризации Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ пиксСли, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅. Врадиционная модСль программирования GPGPU ΡƒΠΊΠ°Π·Π°Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1.

Врадиционная модСль программирования GPGPU.

Рисунок 1 — Врадиционная модСль программирования GPGPU.

ИспользованиС GPGPU для вычислСний ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния ΠΈΠΌΠ΅ΡŽΡ‚ ограничСния Π² Π²ΠΈΠ΄Π΅ слишком большой слоТности. Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ограничСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ всСго лишь Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° зависимости ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° ΠΎΡ‚ Π΅Π³ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, Π° ΡΠ·Ρ‹ΠΊ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Ρ… ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² это язык записи этих Ρ„ΠΎΡ€ΠΌΡƒΠ» с Π‘ΠΈ-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ синтаксисом [3].

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ для вычислСния Π½Π° GPU ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ NVIDIA отличаСтся ΠΎΡ‚ ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ GPGPU Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ позволяСт Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для GPU Π½Π° ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΌ языкС C ΡΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΌ синтаксисом, указатСлями ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌ для доступа ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ рСсурсам Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΠΎΠ². NVIDIA CUDA сущСствуСт нСзависимо ΠΎΡ‚ Π³Ρ€Π°Ρ„ичСских API, ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ особСнностями, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для вычислСния ΠΎΠ±Ρ‰Π΅Π³ΠΎ значСния.

ВСхнология CUDA Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ Π΄Π²Π° API: высокого «CUDA Runtime API» ΠΈ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ «CUDA Driver API» ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ, Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ совмСстноС использованиС ΠΎΠ±ΠΎΠΈΡ… Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. ВСхнология высокого уровня Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ «ΡΠ²Π΅Ρ€Ρ…Ρƒ» Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, Π³Π΄Π΅ всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ runtime API компилируСтся Π² ΠΏΡ€ΠΎΡΡ‚Ρ‹Π΅ инструкции, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ Driver API. Но Π΄Π°ΠΆΠ΅ API высокого уровня ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ знания ΠΎΠ± ΡƒΡΡ‚ройствС ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΠΎΠ² NVIDIA, слишком высокоуровнСвой абстракции Ρ‚Π°ΠΌ Π½Π΅Ρ‚. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΡƒΠΊΠ°Π·Π°Π½ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния Π½Π° ΡƒΡ€ΠΎΠ²Π½ΠΈ.

Рисунок 2 — ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния Π½Π° ΡƒΡ€ΠΎΠ²Π½ΠΈ Π•ΡΡ‚ΡŒ ΠΈ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ высокий — Π΄Π²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

CUBLAS это CUDA Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Basic Linear Algebra Subprograms (BLAS), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для вычислСния Π·Π°Π΄Π°Ρ‡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ прямого доступа ΠΊ Ρ€Π΅ΡΡƒΡ€ΡΠ°ΠΌ GPU;

CUFFT это CUDA Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Fast Fourier Transform для расчёта ускорСнного прСобразования Π€ΡƒΡ€ΡŒΠ΅, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сигналов. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ: complex-complex (C2C), real-complex (R2C) ΠΈ complex-real (C2R)[3].

РазбСрСмся Π² ΡΡ‚ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. CUBLAS — это ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π½Π° ΡΠ·Ρ‹ΠΊ CUDA стандартныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹, Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ поддСрТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ CUBLAS. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹, Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CUBLAS, ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ появившиСся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. CUBLAS примСняСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для создания ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚оТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ GPU, Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π΄Π»Ρ чтСния ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡΡ‚Ρƒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π‘ΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ BLAS: ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ 1, 2 ΠΈ 3 для Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ CGEMM для комплСксных. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ — это Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎ-Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ — Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎ-ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ — ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎ-ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

CUFFT это CUDA Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ускорСнного прСобразования Π€ΡƒΡ€ΡŒΠ΅ — ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ сигналов, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Ρ‚. ΠΏ. CUFFT прСдоставляСт простой интСрфСйс для эффСктивного вычислСния FFT Π½Π° Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΠ°Ρ… производства NVIDIA Π±Π΅Π· нСобходимости Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ собствСнного Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° FFT для GPU. CUDA Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ FFT ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ 1D, 2D, ΠΈ 3D прСобразования комплСксных ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ΅ исполнСниС для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… 1D трансформаций Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ 2D ΠΈ 3D трансформаций ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… [2, 16 384], для 1D поддСрТиваСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎ 8 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² элСмСнтов. nvidia cuda ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ВСхнология CUDA это ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° доступная ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ любой программист, Π·Π½Π°ΡŽΡ‰ΠΈΠΉ язык Π‘ΠΈ. НСобходимо Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΡƒΡ‚ΡŒ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅ программирования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ вычислСниям. Но Π΅ΡΠ»ΠΈ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΎ распараллСливаСтся, Ρ‚ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° CUDA вСрнутся Π² ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅.

Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, вСроятно, Ρ‡Ρ‚ΠΎ Π² ΡΠΈΠ»Ρƒ ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠ³ΠΎ распространСния Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ Π² ΠΌΠΈΡ€Π΅, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния Π½Π° GPU сильно ΠΏΠΎΠ²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΈΠ½Π΄ΡƒΡΡ‚Ρ€ΠΈΡŽ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний. Π˜ΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ возмоТности ΡƒΠΆΠ΅ Π²Ρ‹Π·Π²Π°Π»ΠΈ большой интСрСс Π² Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… ΠΊΡ€ΡƒΠ³Π°Ρ…, Π΄Π° ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½ΠΈΡ…. Π’Π΅Π΄ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ возмоТности ускорСния Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ€Π°ΡΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сразу Π² Π΄Π΅ΡΡΡ‚ΠΊΠΈ Ρ€Π°Π· Π±Ρ‹Π²Π°ΡŽΡ‚ Π½Π΅ Ρ‚Π°ΠΊ часто ΠΈ ΡΡ‚ΠΎ Π΅Ρ‰Π΅ Π½Π΅ ΠΏΡ€Π΅Π΄Π΅Π».

  • 1 БорСсков А. Π’., Π₯Π°Ρ€Π»Π°ΠΌΠΎΠ² А. А. ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ CUDA. — Πœ.: Π”ΠœΠš ΠŸΡ€Π΅ΡΡ, 2010. — 232 с.
  • 2 БорСсков А. Π’., Π‘Π°Π΄ΠΎΠ²Π½ΠΈΡ‡ΠΈΠΉ Π’. А. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния Π½Π° GPU. АрхитСктура ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ модСль CUDA: Π£Ρ‡Π΅Π±. пособиС — Изд-Π²ΠΎ Московского унивСрситСта, 2012. — 336 с.
  • 3 Π‘Π΅Ρ€ΠΈΠ»Π»ΠΎ А. NVIDIA CUDA — нСграфичСскиС вычислСния Π½Π° Π³Ρ€Π°Ρ„ичСских процСссорах// Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ рСсурс сСти ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚IXBT.com, 23.09.2008 Π³. — http://www.ixbt.com/video3/cuda-1.shtml.
ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ