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个线程进行计算
相关推荐
静听松涛1331 分钟前
中文PC端多人协作泳道图制作平台
大数据·论文阅读·人工智能·搜索引擎·架构·流程图·软件工程
学历真的很重要22 分钟前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain
IT=>小脑虎22 分钟前
Python零基础衔接进阶知识点【详解版】
开发语言·人工智能·python
黄焖鸡能干四碗33 分钟前
智能制造工业大数据应用及探索方案(PPT文件)
大数据·运维·人工智能·制造·需求分析
世岩清上39 分钟前
乡村振兴主题展厅本土化材料运用与地域文化施工表达
大数据·人工智能·乡村振兴·展厅
工藤学编程1 小时前
零基础学AI大模型之LangChain智能体执行引擎AgentExecutor
人工智能·langchain
图生生1 小时前
基于AI的商品场景图批量生成方案,助力电商大促效率翻倍
人工智能·ai
说私域1 小时前
短视频私域流量池的变现路径创新:基于AI智能名片链动2+1模式S2B2C商城小程序的实践研究
大数据·人工智能·小程序
yugi9878381 小时前
用于图像分类的EMAP:概念、实现与工具支持
人工智能·计算机视觉·分类
aigcapi1 小时前
AI搜索排名提升:GEO优化如何成为企业增长新引擎
人工智能