天天看點

Cuda實戰-01 入門程式HelloWorld概述程式補充輸出

概述

        不管是學習什麼程式設計語言,一般入門的實戰程式一般都是從Hello World開始的。這一節,我們就用Hello World程式進行Cuda實戰,程式的内容主要是讓CPU和GPU分别列印Hello World,在CPU中列印内容為

Hello World From CPU!

,在GPU中列印内容為

Hello World From GPU!

,具體實作請參考程式案例。

程式

//C語言标準庫
#include <stdio.h>
//Cuda運作庫
#include <cuda_runtime.h>

//核函數,GPU中運作:在GPU中列印Hello World
__global__ void mykernel(void) {
    //GPU列印Hello World
    printf("Hello World From GPU!\n");
}

//主函數,CPU中運作,修飾符__host__可以省略不寫
int main(void) {
    //CPU列印Hello World
    printf("Hello World From CPU!\n");
    //調用核函數,啟用GPU執行列印任務
    mykernel << <2, 2 >> > ();
    //同步函數,作用為:強制CPU等待GPU執行完才執行
    cudaDeviceSynchronize();
    return 0;
}
           

補充

mykernel << <2, 2 >> > ();

原型為

mykernel << <block, thread>> > ()

,第一個參數為格中塊結構,第二個參數為塊中線結構。在這裡代表啟動了一個網格,網格裡面有2個線程塊,每個線程塊有2個線程,整個網格有4個線程,是以結果應該列印出4個Hello World。

cudaDeviceSynchronize();

一般情況下CPU調用核函數kernel後,就不會管GPU是否執行完畢,立即執行下一條語句。當調用這個同步語句後,它會阻塞CPU執行,直到GPU執行完畢後才會執行下一條語句。如果把這一條語句注釋掉,那麼控制台輸出裡面就看不到GPU部分列印的Hello World了。

輸出

Cuda實戰-01 入門程式HelloWorld概述程式補充輸出

繼續閱讀