GPU编程

GPU编程既要考虑CPU硬件也要考虑GPU硬件。这种编程称为异构编程

代码从CPU上开始执行,遇到需要大量并行化的部分,再到GPU上并行,然后将结果返还给CPU再进行其他可能的计算。

CPU上的向量加法

  • 开辟内存空间,
  • 初始化两个向量,
  • 循环相加,或者使用向量化的相加
  • 释放内存

这种计算效率很受带宽限制,例如下面代码要计算长度为100万的两向量加法

cpp 复制代码
#include <iostream>
int main(void) {
int N = 1<<20; // 1M elements
float *x = new float[N]; // Allocate memory
float *y = new float[N];
// initialize x and y on the CPU
for (int i = 0; i < N; i++) {
 x[i] = 1.0f; y[i] = 2.0f;
}
    
// Run on 1M elements on the CPU
add(N, x, y);
    
// Free memory
delete [] x; delete [] y;
return 0;
}

GPU上的向量加法

在GPU上执行的函数称为内核函数(kernel),由CPU调用内核函数

  • GPU上开辟内存空间(显存)
  • 将数据复制到GPU上
  • 执行内核函数
  • 等待计算
  • 将结果返还给CPU

GPU串行计算向量加法

cpp 复制代码
float *x = new float[N];
float *y = new float[N];
int size = N*sizeof(float);
float *d_x, *d_y; // device copies of x y
cudaMalloc((void **)&d_x, size);//GPU上开辟内存
cudaMalloc((void **)&d_y, size);//GPU上开辟内存
cudaMemcpy(d_x, x, size, cudaMemcpyHostToDevice);//CPU到GPU转移数据
cudaMemcpy(d_y, y, size, cudaMemcpyHostToDevice);//CPU到GPU转移数据
// Run kernel on GPU
add<<<1,1>>>(N, d_x, d_y);//调用内核代码,<<<1,1>>>表示使用单线程计算
// Copy result back to host
cudaMemcpy(y, d_y, size, cudaMemcpyDeviceToHost);//将结果返还给CPU
// Free memory
cudaFree(d_x); cudaFree(d_y);
delete [] x; delete [] y;


// GPU function to add two vectors
__global__ //添加关键字表示以下函数为内核函数
void add(int n, float *x, float *y) {
for (int i = 0; i < n; i++)
y[i] = x[i] + y[i];
}

如果想要利用并行性计算提升计算速度,则要使用多个线程同时计算。需要改写kernel函数

cpp 复制代码
// GPU function to add two vectors
__global__
void add(int n, float *x, float *y) {
int index = threadIdx.x;//CUDA线程的索引
y[index] = x[index] + y[index];
}

add<<<1,256>>>(N, d_x, d_y);//使用一个线程块中的256个线程进行计算
相关推荐
AI360labs_atyun20 分钟前
腾讯推出电子牛马Marvis,好用吗?
人工智能·科技·ai
Dfreedom.20 分钟前
Windows、虚拟机、开发板组网通信原理及调试通联步骤
人工智能·windows·部署·边缘计算·开发板·模型加速
3DVisionary24 分钟前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
Are_You_Okkk_24 分钟前
基于MonkeyCode解析AI研发新模式,根治开发低效痛点
大数据·人工智能·开源·ai编程
好评笔记33 分钟前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_4684668534 分钟前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
weixin_468466851 小时前
工业相机成像原理新手入门指南
人工智能·自动化·机器视觉·工业相机·光学·光学系统·成像原理
回眸&啤酒鸭1 小时前
【回眸】CSDN新增功能测评——AI数字营销之内容创作
人工智能
小糖学代码1 小时前
LLM系列:环境搭建:5.Python-dotenv 环境变量管理
人工智能·python·深度学习·神经网络
云安全助手1 小时前
2026年企业级Claude中转服务深度评测:安全、稳定与速度的终极答案
人工智能·安全·claude·ai大模型