记录 | CUDA编程中 __host__ 标识符可以省略的情况
CUDA 完全兼容 C++,因此任何函数如果没有指明修饰符,则默认就是 __host__
,而如果是 CPU 上的函数,由于本身就是 host 的,所以 __host__
是可以省略的。
比如:
#include <cstdio>
#include <cuda_runtime.h>
__device__ void say_hello(){
printf("Hello, world from GPU!\n");
}
__host__ void say_hello_host(){
printf("Hello, world from CPU!\n");
}
__global__ void kernel(){
say_hello();
}
int main(){
kernel<<<1, 1>>>();
cudaDeviceSynchronize();
say_hello_host();
return 0;
}
可以写成:
#include <cstdio>
#include <cuda_runtime.h>
__device__ void say_hello(){
printf("Hello, world from GPU!\n");
}
void say_hello_host(){ // 省略__host__
printf("Hello, world from CPU!\n");
}
__global__ void kernel(){
say_hello();
}
int main(){
kernel<<<1, 1>>>();
cudaDeviceSynchronize();
say_hello_host();
return 0;
}