函數名稱 < << BlockSize, ThreadSize>> > (函數參數)
CUDA的執行, 保證兩件事:
1. 同一個 block 內的所有 thread, 會在同一個 SM (Stream Multiprocessor) 被同時執行.
2. 在任何下一個 kernel的block執行前, 會把目前 kernel 內的所有block執行完畢.
以下簡單的 CUDA 專案, 用來觀察執行的情形, CUDA 的同步機制, 會在一個Block執行完畢後才換另一個Block, 但是 Block 之間並沒有特定順序. 這個簡單的例子, 因為printf輸出占用同一個輸出資源的關係, 看起來Block內的Thread有照順序執行, 但是無法保證一定會這樣, 因為每個Thread實際上是同時被執行.
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
__global__ void hello()
{
printf("This is thread %d in block %d\n", threadIdx.x, blockIdx.x);
}
int main()
{
int blockSize =4,
threadSize = 3;
// running in parallel
hello
<< <blockSize, threadSize >> > ();
//force the printf to flush
cudaDeviceSynchronize();
getchar(); //wait keypressed
return 0;
}
|
執行結果:
沒有留言:
張貼留言