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

CUDA β€” нСграфичСскиС вычислСния Π½Π° графичСском процСссорС

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

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ возмоТности CUDA для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с GPU Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ интСрфСйсы (рис. 4.2), Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ CUDA-runtime ΠΈΠ»ΠΈ CUDA-driver (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ интСрфСйсы CUDA-runtime ΠΈ CUDA-driver ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся, хотя это Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ). CUD A (Compute Unified Device Architecture) прСдставляСт собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ (графичСский процСссор… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

CUDA β€” нСграфичСскиС вычислСния Π½Π° графичСском процСссорС (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

CUD A (Compute Unified Device Architecture) [12−14] прСдставляСт собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ (графичСский процСссор ΠΈΠ»ΠΈ GPU) ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΎΡ‡Π΅Π½ΡŒ высокой ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°.

АрхитСктура CUDA

GPU Π΅ΡΡ‚ΡŒ спСциализированноС Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ устройство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся сопроцСссором ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌΡƒ процСссору ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° (CPU), ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ собствСнной ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ количСства (тысячи ΠΈ Π΄Π΅ΡΡΡ‚ΠΊΠΈ тысяч) ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½ΠΈΡ‚Π΅ΠΉ (ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² управлСния) ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… согласно ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠžΠšΠœΠ”. ЛогичСская структура связанных Π΄Π²ΡƒΡ…ΡŠΡΠ΄Π΅Ρ€Π½ΠΎΠ³ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ Π³Ρ€Π°Ρ„ичСского процСссоров ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° Ρ€ΠΈΡ. 4.1.

Π”Π²ΡƒΡ…ΡŠΡΠ΄Π΅Ρ€Π½Ρ‹ΠΉ CPU ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊ Π½Π΅ΠΌΡƒ GPU.

Рис. 4.1. Π”Π²ΡƒΡ…ΡŠΡΠ΄Π΅Ρ€Π½Ρ‹ΠΉ CPU ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊ Π½Π΅ΠΌΡƒ GPU.

ВСхнология ΠžΡ€Π΅ΠΏΠœΠ , рассмотрСнная Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 3, ΠΈ Ρ‚Схнология CUDA Π²ΠΏΠΎΠ»Π½Π΅ совмСстимы ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для достиТСния максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ускорСния.

ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, выполняСмыми Π½Π° CPU, ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, выполняСмыми графичСским процСссором, Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ различия:

  • β€’ Π½ΠΈΡ‚ΠΈ, выполняСмыС Π½Π° GPU, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΊΡ€Π°ΠΉΠ½Π΅ Π½ΠΈΠ·ΠΊΠΎΠΉ «ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ» — ΠΈΡ… ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… рСсурсов (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² CPU);
  • β€’ для эффСктивной ΡƒΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΠΈ возмоТностСй GPU Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ тысячи ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½ΠΈΡ‚Π΅ΠΉ (для CPU ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 10…20 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²).

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ возмоТности CUDA для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с GPU Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ интСрфСйсы (рис. 4.2), Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ CUDA-runtime ΠΈΠ»ΠΈ CUDA-driver (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ интСрфСйсы CUDA-runtime ΠΈ CUDA-driver ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся, хотя это Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ).

Бостав ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния CUDA.

Рис. 4.2. Бостав ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния CUDA.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для CUDA ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π½Π° «Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΌ» языкС Π‘, ΠΏΡ€ΠΈ этом ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ «ΡΠ΄Ρ€Π°») выполняСтся Π½Π° GPU, Π° ΠΎΠ±Ρ‹Ρ‡Π½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ — Π½Π° CPU. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ CUDA, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ участиС Π² ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ прилоТСния, автоматичСски ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ частСй ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡ… Π·Π°ΠΏΡƒΡΠΊΠΎΠΌ.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для CUDA, графичСский процСссор прСдставляСт собой ΠΎΠ΄Π½ΠΎ устройство управлСния ΠΈ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΎ-логичСских устройств (АЛУ), ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ собствСнной рСгистровой ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (распрСдСлСниСм рСгистров ΠΌΠ΅ΠΆΠ΄Ρƒ АЛУ управляСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС CUDA) ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌ уровням памяти Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ объСма ΠΈ Π±Ρ‹ΡΡ‚родСйствия. ВсС Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΎ-логичСскиС устройства Π² Π»ΡŽΠ±ΠΎΠΉ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ устройством управлСния. РСально устройств управлСния нСсколько (ΠΈΡ… ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ зависит ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ графичСского процСссора). Π‘ΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ устройства управлСния связанных с Π½ΠΈΠΌ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΎ-логичСских устройств, рСгистров, быстрой раздСляСмой памяти, доступной ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ АЛУ, ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ локальной памяти ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ АЛУ, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€. ВсС ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ: ΠΊΡΡˆΡƒ тСкстур, ΠΊΡΡˆΡƒ констант ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ памяти устройства, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ осущСствляСтся взаимодСйствиС с ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ элСмСнты памяти ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π° нСдоступны ΠΈΠ· CPU. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° памяти графичСского процСссора ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ доступа ΠΊ ΠΏΠ°ΠΌΡΡ‚ΠΈ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ уровня ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½Π° Ρ€ΠΈΡ. 4.3.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… областСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ΠΎΠ² осущСствляСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС CUDA, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся «ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ» для программиста. Π•ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ с Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ («ΡΠ΄Ρ€ΠΎ» Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ CUDA) прСдставляСт собой сСтку (grid) Π±Π»ΠΎΠΊΠΎΠ² (block) ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (thread). Π‘Π»ΠΎΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² — это Π½Π°Π±ΠΎΡ€ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², выполняСмых ΠΎΠ΄Π½ΠΈΠΌ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ΠΎΠΌ. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ собой. Π‘Π΅Ρ‚ΠΊΠ° ΠΈ (нСзависимо ΠΎΡ‚ Π½Π΅Π΅) ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ² ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΎΠ΄Π½ΠΎ-, Π΄Π²ΡƒΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΡƒΡŽ структуру Π±Π»ΠΎΠΊΠΎΠ² ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² соотвСтствСнно. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ размСрностСй ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π·Π°Π΄Π°Π΅Ρ‚ программист. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ послС запуска ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ (структурам), хранящим Π΅Π³ΠΎ собствСнныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° Π²Π½ΡƒΡ‚Ρ€ΠΈ сСтки.

АрхитСктура CUDA прСдусматриваСт ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ возмоТностСй ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ся Π² Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π°Ρ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π»ΠΈΠ½Π΅Π΅ΠΊ (GEforce, Quadro, NVS, Tesla, ION). Π Π°Π·Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ графичСских процСссоров, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π² Ρ‚Π°ΠΊΠΈΡ… Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π°Ρ…, ΠΈΠΌΠ΅ΡŽΡ‚ каТдая собствСнный Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, количСство рСгистров, объСм раздСляСмой памяти ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π°) ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ возмоТностСй, сгруппированныС Π² Π²Π΅Ρ€ΡΠΈΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΎΡ‚ 1.0 Π΄ΠΎ 5.5 (ΠΏΠΎ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π½Π° 2014 Π³ΠΎΠ΄).

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° памяти графичСского процСссора.

Рис. 4.3. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° памяти графичСского процСссора.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ устройства ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΈΠΌ Π²Π΅Ρ€ΡΠΈΡŽ CUDA, ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ вСрсии ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½Ρ‹Π΅ возмоТности. БоотвСтствиС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… возмоТностСй вСрсии CUDA ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ‚Π°Π±Π». 4.1.

Π’ Ρ‚Π°Π±Π». 4.2 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ соотвСтствиС тСхничСских характСристик, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, вСрсии CUDA, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π΅. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π°, Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

cuda GetDeviceProperties (…);

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ возмоТности (Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ здСсь возмоТности ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²ΠΎ Π²ΡΠ΅Ρ… вСрсиях).

ВСрсия CUDA.

1.0.

1.1 1.2.

1.3.

2.x.

3.0.

3.5.

ЦСлочислСнныС Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°Π΄ 32-разрядными словами Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ памяти.

НСт.

Π”Π°.

АтомарныС ΠΎΠ±ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ 32- Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ числами с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ памяти.

ЦСлочислСнныС Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°Π΄ 32-разрядными словами Π² Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ памяти.

НСт.

Π”Π°.

АтомарныС ΠΎΠ±ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ 32-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ числами с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ памяти.

ЦСлочислСнныС Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°Π΄ 64-разрядными словами Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ памяти.

Warp-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ голосования.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности.

НСт.

Π”Π°.

ЦСлочислСнныС Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°Π΄ 64-разрядными словами Π² Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ памяти.

АтомарныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° слоТСния Π½Π°Π΄ 32-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ числами с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ памяти.

Ѐункция _ballot ().

Набор Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ _threadfcncc_systcm ().

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ _syncthreads_count (), syncthrcads_and (), _syncthrcads_or ().

ΠŸΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

3-мСрная сСтка Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΈΠ²Π°Π½ΠΈΡ warp’oe.

НСт.

Π΄

Π°.

Π‘Π΄Π²ΠΈΠ³ΠΈ Π²ΠΎΡ€ΠΎΠ½ΠΊΠΎΠΉ.

НСт.

Π”Π°.

ДинамичСский ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ.

ВСхничСскиС спСцификации.

ВСрсия.

1.0 1.1 1.2 I 1.3.

2.x | 3.0 13.5.

Максимальная Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ сСтки Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρƒ- ΠΈΠ»ΠΈ z- размСрности сСтки Π±Π»ΠΎΠΊΠΎΠ².

23|-1.

Максимальная Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ…- ΠΈΠ»ΠΈ Ρƒ-размСрности Π±Π»ΠΎΠΊΠ°.

Максимальная z-Ρ€Π°Π·ΠΌΡΡ€Π½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠ°.

МаксимальноС количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Π±Π»ΠΎΠΊΠ΅.

Π Π°Π·ΠΌΠ΅Ρ€ warp’Π° (количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²).

МаксимальноС количСство Ρ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² Π² ΠΌΡƒΠ»ΡŒΡ‚ипроцСссорС.

МаксимальноС количСство Ρ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π½Ρ‹Ρ… warp’oB Π² ΠΌΡƒΠ»ΡŒΡ‚ипроцСссорС.

МаксимальноС количСство Ρ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΌΡƒΠ»ΡŒΡ‚ипроцСссорС.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… рСгистров Π² ΠΌΡƒΠ»ΡŒΡ‚ипроцСссорС.

8 К.

16К.

32 К.

64 К.

МаксимальноС количСство 32- Π±ΠΈΡ‚Π½Ρ‹Ρ… рСгистров Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ.

63 255.

ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ объСм раздСляСмой памяти Π½Π° ΠΌΡƒΠ»ΡŒΡ‚ипроцСссор

16 ΠšΠ’.

48 ΠšΠ’.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°Π½ΠΊΠΎΠ² раздСляСмой памяти.

ОбъСм локальной памяти Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ.

16 ΠšΠ’.

512 ΠšΠ’.

МаксимальноС количСство инструкций Π½Π° ΡΠ΄Ρ€ΠΎ.

2 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°.

512 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ².

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²Π΅ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ для CUDA [15].

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ