- #include
-
- #include
- __global__ void myfirstkernel(void) {
- }
-
- int main(void) {
- myfirstkernel << <1, 1 >> >();
- printf("Hello, CUDA!\n");
- return 0;
- }
与C编写的代码相比,有两个主要区别:
(1)一个名为myfirstkernel的空函数,前缀为__global__
__global__是CUDA C在标准C中添加的一个限定符,它告诉编译器在这个限定符后面的函数定义应该在设备上而不是在主机上运行。
对于main函数,NVCC编译器将把这个函数提供给C编译器,因为它没有被global关键字修饰,因此main函数将在主机上运行。
(2)使用<<1,1>>>调用myfirstkernel函数
代码中的第二个不同之处在于对空的myfirstkernel函数的调用带有一些尖括号和数值。这是一个CUDA C技巧:从主机代码调用设备代码。它被称为内核调用。尖括号内的值表示我们希望在运行时从主机传递给设备的参数。
简单来讲,它表示块的数量和将在设备上并行运行的线程数。因此,在这段代码中,<<<1,1>>>表示myfirstkernel将运行在设备上的一个块和一个线程或块上。
下面示例是一个