博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CUDA -- 内存分配
阅读量:4936 次
发布时间:2019-06-11

本文共 1627 字,大约阅读时间需要 5 分钟。

 

  CUDA可以认为是一个由软件和硬件构成的并行计算系统,其依赖于GPU的并行计算单元,CUDA有类C的API,方便程序编写。其依赖于CPU和GPU的异构体系,通过在CPU上串行执行环境初始化、内存分配、数据传输,然后在GPU上执行并行计算。

内存分配

  1、一维

int *dev_ans = 0;cudaMalloc((void**)&dev_ans, d.y * sizeof(int));

  参数1:显存中开辟的空间的指针(术语:GPU设备端数据指针)

  参数2:空间大小,字节为单位

  2、二维

int *dev_mat = 0;int pitch;cudaMallocPitch((void**)&dev_mat, (size_t *)&pitch, d.x * sizeof(int), d.y);

  参数1:GPU设备端数据指针

  参数2:一行数据的真实空间大小(字节)【此参数是获取返回值】,GPU中从256字节对齐的地址(address=0,256,512……)连续访问最有效率,故每行实际分配的大小要大于需要分配的大小

  参数3:每行需要分配的空间大小

  参数4:矩阵行数

 

内存拷贝

  1、一维

cudaMemcpy(ans, dev_ans, d.y * sizeof(int), cudaMemcpyDeviceToHost);

  参数1:目标数据地址

  参数2:源数据地址

  参数3:数据大小

  参数4:拷贝类型(主机至主机,主机至设备,设备至主机,设备至设备)

  2、二维

cudaMemcpy2D(dev_mat, pitch, mat, d.x*sizeof(int), d.x*sizeof(int), d.y, cudaMemcpyHostToDevice);

  参数1:目标数据地址

  参数2:pitch,分配空间的行宽(字节单位)

  参数3:源数据地址

  参数4:pitch,分配空间的行宽(字节单位)

  参数5:需要拷贝数据的真实行宽(字节单位)

  参数6:数据的行数(非字节单位哦!)

  参数7:数据拷贝类型

  注:pitch是线性存储空间的行宽不是数据的行宽,在设备端 pitch大于等于数据行宽,在主机端pitch==数据行宽。

 

内存访问

  主机中的内存访问就是c++的访存没什么好说的,现在看看显存中的访问方式(也就是在kernel中的访存)。

__global__ void addKernel(int *mat, int *ans, size_t pitch){    int bid = blockIdx.x;    int tid = threadIdx.x;    __shared__ int data[8];    int *row = (int*)((char*)mat + bid*pitch);    data[tid] = row[tid];    __syncthreads();    for (int i = 4; i > 0; i /= 2) {        if (tid < i)            data[tid] = data[tid] + data[tid + i];        __syncthreads();    }    if (tid == 0)        ans[bid] = data[0];}

  一维:

    ans[index]直接访问

  二维:

    先计算访问的行的初始地址 int *row = (int*)((char*)mat + bid*pitch)

    然后访问此行的对应元素 row[index]

 

内存释放

cudaFree(dev_mat)

 

  

 

转载于:https://www.cnblogs.com/chen9510/p/11506146.html

你可能感兴趣的文章
Android实现异步处理 -- HTTP请求
查看>>
数据清空js清空div里的数据问题
查看>>
Fortran中的指针使用
查看>>
移动终端app测试点总结
查看>>
14-6-27&28自学内容小结
查看>>
JSP
查看>>
---
查看>>
(第一组_GNS3)自反ACl
查看>>
hdu--1258--Sum It Up(Map水过)
查看>>
Spring @DeclareParents 的扩展应用实例
查看>>
VS2012更新Update1后帮助查看器无法打开
查看>>
【Weiss】【第03章】练习3.9:大整数运算包
查看>>
Android 文件的读取和写入
查看>>
高校表白APP-冲刺第四天
查看>>
outlook 设置163邮箱
查看>>
mysql优化——show processlist命令详解
查看>>
Solr服务器搭建
查看>>
画世界怎么用光影_世界绘画经典教程:水彩光影魔法教程
查看>>
win+rsync+php,跨平台的fswatch+rsync同步备份
查看>>
vue2 cdn 加载html,vue项目中使用CDN加载
查看>>