核函数就是托管给GPU执行的函数,一般来说,并发量大,但是逻辑简单、分支少的函数适合交给GPU执行。
看代码:
#include<stdio.h>
__global__ void hello_world(void)
{
printf("GPU: Hello world!\n");
}
int main(int argc,char **argv)
{
printf("CPU: Hello world!\n");
hello_world<<<1,10>>>();
cudaDeviceReset();
return 0;
}
输出:
CPU: Hello world!
GPU: Hello world!
GPU: Hello world!
GPU: Hello world!
GPU: Hello world!
GPU: Hello world!
GPU: Hello world!
GPU: Hello world!
GPU: Hello world!
GPU: Hello world!
GPU: Hello world!
(1)global 说明这是一个核函数,供给GPU调用的。准确地说,__global__表示这个函数是从CPU处调用的GPU代码。
(2)<<<1,10>>>表示的是一个网格里面的block数量,每个block之下的线程数量。网格、block、线程数在后面章节有详细介绍。
(3)cudaDeviceReset()表示同步等待过程,因为GPU和CPU是独立运行的,如果CPU先于GPU执行完的话,程序就会退出。