当前位置: 首页 > news >正文

核函数(Kernel function)

核函数

  • 核函数在GPU上进行并行执行

  • 注意:

    • 限定词__global__修饰 [双下划线]
    • 返回值必须是void
  • 形式:

    • _global_ void kernel_function( argument arg){

      ​ printf(“hello world from the GPU\n”);

      }

    • void __global__kernel_function( argument arg){

      ​ printf(“hello world from the GPU\n”);

      }

核函数的特点:

  1. 核函数只能访问GPU内存
    • CPU和GPU是异构架构
    • CPU有自己的内存, GPU有自己的显存
    • CPU和GPU之间进行内存访问只能通过PCIe总线进行
  2. 核函数不能使用变长参数
  3. 核函数不能使用静态变量
  4. 核函数不能使用函数指针
  5. 核函数具有异步性

CUDA程序编写流程:

int main(void){

​ 主机代码 //一般对GPU进行配置以及数据处理的内容

​ 核函数调用 //进行并行加速数据处理

​ 主机代码 //一般将GPU运行后的数据回传给CPU主机, 还会进行对CPU GPU内存的释放工作

​ return 0;

}

#include <stdio.h>// CUDA核函数(__global__修饰符表示在GPU上执行)
__global__ void hello_from_gpu(){printf(“hello world from the GPU\n”); // GPU端打印
}int main(void){// 调用核函数:1个块,每个块1个线程(总线程=1)// 格式如下:// 核函数名称<<<网格配置(grid), 块配置(block), 其他参数>>>(); // <<< ... >>>‌:CUDA特有的语法,用来指定核函数在GPU上的执行配置。// 1, 1:表示网格(grid)中的块(block)数量和每个块中的线程(thread)数量// 总线程数 = 网格中的块数 × 每个块中的线程数 = 1 × 1 = 1// CUDA的核函数并行执行,通过网格和块的层级结构,可以灵活地组织线程hello_from_gpu<<<1, 1>>>();// 等待GPU操作完成(否则主机代码可能提前退出)// 强制主机(CPU)等待GPU完成所有操作,确保打印输出可见// 因为GPU操作是异步的,若不等待,主机代码可能提前退出,导致看不到打印结果。cudaDeviceSynchronize();return 0;
}

相关文章:

  • langchain4j整合springboot
  • 【AI】基于生活案例的LLM强化学习(入门帖)
  • 第四章-初始化Direct3D
  • Blink和V8的关系
  • 雅思阅读--重点短语/句式39个
  • Day 12 训练
  • PostgreSQL存储过程“多态“实现:同一方法名支持不同参数
  • C语言进阶—函数(static,递归,回调,指针,内联,变参,结构体尺寸)
  • DID在元宇宙的应用爆发:数字身份资产化与跨平台迁移——解析Decentraland等项目的虚拟身份全链路实现
  • 25G 80km双纤BIDI光模块:远距传输的创新标杆
  • 蓝桥杯-通电(最小生成树java)
  • 盛最多水的容器
  • UE5 MetaHuman眼睛变黑
  • 软件设计师-软考知识复习(3)
  • 【强化学习】什么是强化学习?2025
  • 解决 Exception in thread “main“ java.lang.NoClassDefFoundError
  • 【java】程序设计基础 八股文版
  • 深入理解 Web 架构:从基础到实践
  • 0506--01-DA
  • tinyrenderer笔记(Phong光照模型)
  • 抗战回望20︱《山西省战区抗敌行政工作检讨会议议决案》:“强民政治”、“说服行政”
  • 潘功胜:将创设科技创新债券风险分担工具
  • 青岛双星名人集团董事长发公开信称家人逼迫交出管理权?公司回应
  • 五一假期,新任杭州市委书记刘非到嘉兴南湖瞻仰红船
  • “五一”假期余额不足两天,多地景点已约满、限流
  • 四人自驾游宣恩因酒店爆满无处住宿,求助文旅局后住进局长家