GPU 中的計算單元之間能不能通信?

有沒有類似所有計算單元都能訪問的寄存器?


常規做法的話,單元之間通訊得通過global memory。intel為了加速這個,專門在phi里加了一個很小的message buffer,用於消息傳遞。

至於非常規做法,還是有的。比如,在CUDA里可以不用重新啟動一次Kernel就能在單元間做全局同步,也算是一種通訊了。但這個仍然需要global memory。

/* First, sync within each Block */
__syncthreads();
/* Pick a representative from each (here, 1D) block */
if (threadIdx.x == 0) {
/* Get my barrier number */
int barno = barnos[blockIdx.x] + 1;
int hisbarno;
int who = (blockIdx.x + 1) % gridDim.x;
/* Check in at barrier */
barnos[blockIdx.x] = barno;
/* Scan for all here or somebody passed */
do {
/* Wait for who */
do {
hisbarno = barnos[who];
} while (hisbarno &< barno); /* Bump to next who */ if (++who &>= gridDim.x) who = 0;
} while ((hisbarno == barno) (who != blockIdx.x));
/* Tell others we are all here */
barnos[blockIdx.x] = barno + 1;
}
/* Rejoin with rest of my Block */
__syncthreads();


Nvidia實現了GPUDirect技術,可以讓同主機GPU或跨主機GPU之間進行通信。

https://developer.nvidia.com/gpudirect


全局內存Global Memory所有計算單元都可訪問,但是沒有可以所有計算單元都訪問的寄存器

相關文檔:

http://docs.nvidia.com/cuda/cuda-c-programming-guide/#memory-hierarchy


推薦閱讀:

opencl的前景如何?
高通和英偉達,誰能成為汽車處理器的贏家?
Imagination Technologies 的行業地位如何,有哪些領先技術優勢?
為什麼顯卡不裝驅動也能使用?
是不是GPU和DSP進行邏輯判斷要比CPU慢?

TAG:圖形處理器GPU | GPU通用計算 | 並行計算 | CUDA |