概要 cudaError_t cudaMallocPitch( void** devPtr,size_t* pitch,size_t widthInBytes,size_t height )

说明 向设备分配至少widthInBytes*height字节的线性存储器,并以*devPtr的形式返回指向所分配存储器的指针。该函数可以填充所分配的存储器,以确保在地址从一行更新到另一行时,给定行的对应指针依然满足对齐要求。cudaMallocPitch()以*pitch的形式返回间距,即所分配存储器的宽度,以字节为单位。间距用作存储器分配的一个独立参数,用于在2D数组内计算地址。如果给定一个T类型数组元素的行和列,可按如下方法计算地址:

T* pElement = (T*)((char*)BaseAddress + Row * pitch) + Column;

对于2D数组的分配,建议程序员考虑使用cudaMallocPitch()来执行间距分配。由于硬件中存在间距对齐限制,如果应用程序将在设备存储器的不同区域之间执行2D存储器复制(无论是线性存储器还是CUDA数组),这种方法将非常有用。

例子:为EmuDebug  原来《CUDA编程指南》上给出的pitch的类型为int,在实际运行时与cudaMallocPitch()类型不匹配。

 /************************************************************************/
/* This is a example of the CUDA program.
/************************************************************************/ #include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>
#include <cutil.h> /************************************************************************/
/* myKernel */
/************************************************************************/
__global__ void myKernel(float* devPtr,int height,int width,int pitch)
{
for(int r=;r {
float* row=(float*)((char*)devPtr+r*pitch);
for (int c=;c {
float element=row[c];
printf("%f/n",element);//模拟运行
}
}
} /************************************************************************/
/* Main CUDA */
/************************************************************************/
int main(int argc, char* argv[])
{
size_t width=;
size_t height=; float* decPtr;
//pitch的值应该为size_t在整形的时,与函数参数不匹配
size_t pitch;
cudaMallocPitch((void**)&decPtr,&pitch,width*sizeof(float),height);
myKernel<<<,>>>(decPtr,,,pitch);
cudaFree(decPtr); printf("%d/n",pitch); //CUT_EXIT(argc, argv); return ;
}

最新文章

  1. Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
  2. 开发必备的Windows小技巧
  3. 【转】EntityFramework(EF)贪婪加载和延迟加载的选择和使用
  4. 数据库中char, varchar, nvarchar的差异
  5. javascript中数组concat()join()split()
  6. NeuSoft(1)构建嵌入式交叉编译环境
  7. Sublime Text2 安装Package Control
  8. [BZOJ 1266][AHOI2006]上学路线(最短路+最小割)
  9. SQL(Oracle)
  10. 社区APP “钱途”漫漫
  11. MapReducer Counter计数器的使用,Combiner ,Partitioner,Sort,Grop的使用,
  12. ASP.NET中页面加载时文本框(texbox控件)内有文字获得焦点时文字消失
  13. vijosP1026毒药?解药?
  14. 2013=7=12 ACM培训第一天
  15. SQL Identity自增列清零方法
  16. 字符编码知识简介和iconv函数的简单使用
  17. C++笔记019:C++中的const修饰的是一个真正的常量
  18. [翻译]Java排错指南 - 5 确定崩溃何地发生
  19. linux磁盘管理 文件挂载
  20. folly无锁队列,尝试添加新的函数

热门文章

  1. vue proxyTable 接口跨域请求调试(五)
  2. 垃圾收集GC
  3. PHP会话管理
  4. Murano Weekly Meeting 2016.08.09
  5. CentOS 6.5 &amp; 7 的网络YUM源配置
  6. C语言实现通用链表初步(四)----双向链表
  7. Spring Boot使用mongo的GridFS模块
  8. pycharm乱码
  9. mybatis VS hibernate
  10. canvas绘制圆环