CUDA顯卡硬件
一般用Host指代計(jì)算機(jī)的CPU磨隘,而用Device指代顯卡的GPU
一個(gè)GPU有多個(gè)流處理器(streaming multiprocessors)(SM),每一個(gè)SM包含:
- memory register for threads to use
- several memory caches
- shared memory
- constant cache
- texture memory
- L1 cache
- thread schedulers
- Several CUDA cores (analagous to streaming processor in AMD cards) - number depends on microarchitecture generation
- Each core consists of an Arithmetic logic unit (ALU) that handles integer and single precision calculations and a Floating point unit (FPU) that handles double precision calculations
- Special function units (SFU) for transcendental function (FPU) that handles double precision calculations
例如,高端的Kepler構(gòu)架顯卡有15個(gè)SMs,每個(gè)又有12組每組16個(gè)的CUDA core,這樣一共有2880個(gè)CUDA core(其中只有2048個(gè)線程可以同時(shí)操作)纵朋。合理的CUDA使用方法是盡量保證快速為線程輸入數(shù)據(jù)使之始終保持工作狀態(tài),因而理解memory hiearchy非常重要茄袖。GTX 750 只有 512個(gè)CUDA core
獲取GPU信息
不同NVIDIA顯卡對(duì)于CUDA的支持并不相同,因而使用CUDA前嘁锯,不僅要了解它的物理構(gòu)架還要了解其對(duì)CUDA的支持情況宪祥,NVIDIA使用Compute Capability來(lái)描述產(chǎn)品對(duì)CUDA功能的支持情況,可以在支持網(wǎng)頁(yè)上查詢到產(chǎn)品的 Compute Capability家乘。
The Compute Capability describes the features supported by a CUDA hardware.
同時(shí)蝗羊,Compute Capability雖然描述的不是GPU的構(gòu)架,但由于二者都是在新產(chǎn)品中不斷更新仁锯,因而它們之間也有一定的相關(guān)關(guān)系耀找。
例如,每個(gè)SM上ALU的數(shù)量隨版本變化:
Compute Capability | 1.x | 2.0 | 2.1 | 3.x | 5.x | 6.0 | 6.1 |
---|---|---|---|---|---|---|---|
number of ALU | 8 | 32 | 48 | 192 | 128 | 64 | 128 |
使用numba
的接口可以獲得GPU的相關(guān)信息,如:
from numba import cuda
my_gpu = cuda.get_current_device()
獲得型號(hào):
print(my_gpu.name)
>> 'GeForce GTX 750'
獲得 Compute Capability:
print(my_gpu.COMPUTE_CAPABILITY)
>> (5, 0)
獲得SM數(shù)量:
print(my_gpu.MUTIPROCESSOR_COUNT)
>> 4
獲得CUDA core的總數(shù):
print(my_gpu. MUTIPROCESSOR_COUNT * 128)
>> 512