You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请问__global__与__host__ __device__函数声明有何区别?

两种CUDA函数声明的核心区别

1. __host__ __device__ 函数

  • 编译器会生成两个独立代码副本:一个适配CPU(主机端)编译执行,另一个适配GPU(设备端)编译执行
  • 调用场景灵活:既可以在主机端的CPU代码里像普通函数一样直接调用,也能在设备端的核函数或其他__device__函数内部调用
  • 不具备GPU并行线程入口资格:无法通过<<<gridDim, blockDim>>>的CUDA启动语法来触发大量并行线程执行

2. __global__ 函数

  • 仅生成GPU设备端的代码副本,主机端无法直接调用函数逻辑
  • 是专门的GPU并行线程入口函数:必须通过<<<gridDim, blockDim>>>的CUDA启动语法触发,会在GPU上启动指定数量的并行线程执行
  • 调用限制严格:主机端只能通过启动语法触发它,不能直接执行函数体内代码;同时它也不能被其他设备端函数(如__device__函数)调用

关键差异对比

特性__host__ __device__ 函数__global__ 函数
代码副本生成主机+设备双副本仅设备端副本
调用方式主机端直接调用/设备端函数内调用仅通过<<<...>>>启动
并行线程入口资格无有(GPU并行启动入口)

举个直观例子:

  • 对__host__ __device__函数,你可以在CPU代码里直接写my_kernel(input, output, size);运行,也能在某个__global__函数里调用它让每个GPU线程执行
  • 对__global__函数,必须写my_kernel<<<128, 256>>>(input, output, size);来启动GPU线程,直接在CPU代码里写my_kernel(input, output, size);会编译报错

内容的提问来源于stack exchange,提问作者user366312

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:17:01