ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π΄Π»Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ 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.
Π ΠΈΡΡΠ½ΠΎΠΊ 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.