这几天收拾准备准备GUP“库达”计算,开学搞搞计算机图形图像处理。暂且不说安装问题。关于CPU,gpu的介绍正在整理。。。。。

CUDA编程

1. 1核函数

定义:在GPU进行的函数通常称为核函数

一般通过__global__修饰(在核函数里,都用双下划线来修饰),调用通过<<>>,第一个参数代表block线程块数目,第二个参数代表线程块内含有的线程数目thread。

根据2可以看出它的操作单位是总的线程格的block。

调用时必须声明核函数的执行参数。

正式编程前必须使用cudaMalloc()函数先为wrap分配适当的内存空间。分配前要精打细算,因为总的内存空间一定,一个wrap分配不当的空间会导致其他线程内存不够用导致越界报错甚至死机。(蛮难,咦字面上)。

任何程序入门编程:

#include

#include

int main()

{

printf("Hello world\n");

}

乍一看,除了头文件多了一个以外,其他毫无区别。常说cuda编程用的是c语言,难道真的一成不变?

答:cuda编程面向GPU,但如果程序里并没有用到GPU处理,那就真的是一模一样。但如果上述程序你真的不想让显卡就这么闲着,你可以这样:

// 首先,修改文件后缀为.cu

#include

#include

//第一步:核函数申明

__global__void kernel(void)//注意:这里的返回值只能为void

{

}

int main(void)

{

//核函数的调用在主函数

kernel<<<1,1>>> ()

printf("Hello,world\n");

return 0;

}

1.2 dim3结构类型

dim3是基于unit3定义的矢量类型,表示3个数据成员unsigned int x;unsigned int y;unsigned int z;可用来表示一维、二维、三维线程块。

相关内置变量

2.1 gridDim,线程格的维度定义,即gridDim.x,gridDim.y,gridDim.z。

2.2 blockDim,线程块的维度,即同上。

2.3blockIdx,线程块ID的索引,及同上。

2.4threadIdx,线程ID的索引,即同上。

一维的block,包含的线程ID,threadId=threadIdx.x,但对于二维三维,存在以下计算公式:threadID=threadIdx+threadIdx.yblockDim.x;threadID=threadIdx.x+threadIdx.yblockDim.x+threadIdx.zblockDim.yblockDim.z。

计算线程索引偏移量为启动线程的总数。如stride=blockDim.x*gridDim.x;threadId+=stride

1.3函数修饰符

kernel核函数,在主机端调用kernel在设备端创建多个线程。

1.4常用的内存函数

cudaMalloc()

用处:用来分配全局存储器(提示:少用,容易沾满)

函数原型:cudaError_t cudaMalloc(void **devPtr,size_t size)

将cudaMalloc()分配的指针传递给设备和主机上。

cudaMemcpy()

用处:进行CPU与GPU的数据拷贝

cudaMemcpy(Md(gpu),M(原地址i)cudaMemcpyHostToDevice)

cudaFree()

函数原型:cudaError_t cuda Free

用处:释放内存与c函数free()一样。

GPU内存类型

全局内存

global memory,通常意义上的设备内存。

共享内存

shared memory,GPU的每个线程块位于一个相同的核处理器SM,之间共享内存。

形式:__shared__float a[i]

常量内存

constant memory,常量内存代替全局内存能有效的减少内存带宽。

要求:当我们要将数据拷贝到常量内存时,要使用cudaMemcpyToSymbol(),使用cudaMemcpy仍会拷贝到全局。

纹理内存

Texture memory从硬件角度来说,纹理内存实际上是存储在全局内存上;唯一的区别是,当某一个变量绑定纹理内存后,在程序运行过程中会将部分信息存储在纹理缓存中,以减少线程块对全局内存的读取,进而提高程序的运行速度。

使用:有两种方法:纹理参考与纹理对象。

一维纹理内存

用texture+类型声明。

cudaBindTexture()绑定到纹理内存中。

tex1Dfetch()读取纹理内存的数据。

二维纹理内存

texture texIn。

cudaBindTexture2D()绑定到纹理内存中。

通过tex2D()来读取纹理内存中的数据。

先写这里,补作业了!

标签:__,函数,编程,threadIdx,纹理,线程,CUDA,内存

来源: https://blog.csdn.net/qq_44605933/article/details/104729157

c语言 cuda核函数,CUDA编程相关推荐

  1. c语言 cuda核函数,CUDA核函数与线程配置

    CUDA核函数 在GPU上调用的函数成为CUDA核函数(Kernel function),核函数会被GPU上的多个线程执行.每个线程都会执行核函数里的代码,当然由于线程编号的不同,执行的代码路径可能会 ...

  2. 英伟达CUDA太难!OpenAI出手要取代它,新语言性能相当但编程更简单

    晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 用CUDA为GPU编程实在太难了. 为了让没有CUDA编程经验的人写出和专家效率相当的GPU代码,现在OpenAI推出了一种新的语言和编译器 ...

  3. 【记录一个问题】cuda核函数可能存在栈溢出,导致main()函数退出后程序卡死30秒CUDA...

    调试一个CUDA核函数过程中发现一个奇怪的问题: 调用某个核函数,程序耗时33秒,并且主要时间是main()函数结束后的33秒: 而注释掉此核函数,程序执行不到1秒. 由此可见,可能是某种栈溢出,导致 ...

  4. 详解CUDA核函数及运行时参数

    详解CUDA核函数及运行时参数 核函数是GPU每个thread上运行的程序.必须通过__gloabl__函数类型限定符定义.形式如下: __global__ void kernel(param lis ...

  5. 【记录一个问题】linux+opencv+cuvid解码1080P视频,当使用CUDA核函数的时候,必然崩溃...

    崩溃的信息如下: 1 OpenCV(4.1.0-dev) Error: Gpu API call (invalid configuration argument) in videoDecPostPro ...

  6. CUDA:核函数未执行,错误检查

    最近在使用CUDA时,遇到某次代码在执行时,直接跳过CUDA核函数. 又由于CUDA程序本身不是非常便于调试,所以在此时如果能知道程序为什么会报错,对进一步代码改正会有非常大的帮助. 解决方案 在核函 ...

  7. 显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理

    显卡.显卡驱动.CUDA.CUDA Toolkit.cuDNN 梳理 转自:https://www.cnblogs.com/marsggbo/p/11838823.html#nvccnvidia-sm ...

  8. 人工智能开发语言 python,python人工智能编程教程

    python适合做人工智能的编程语言吗? 当然,Python是人工智能的首选语言.具体原因如下:Python在设计上坚持了清晰的风格,让Python成为了一门简单.易读.易维护的语言,让大量用户所欢迎 ...

  9. 一篇文章清晰了解NVIDAI显卡驱动(包括:CUDA、CUDA Driver、CUDA Toolkit、CUDNN、NCVV)

    背景 开发过程中需要用到GPU时,通常在安装配置GPU的环境过程中遇到问题:比如:安装TensorFlow2.1过程中,想要使用到电脑的显卡来进行开发,但是发现默认需要CUDATOOLKIT=10.1 ...

最新文章

  1. 英语应用文写作之感谢信
  2. JavaScript实现数除以二divideByTwo算法(附完整源码)
  3. python 监控内存_使用python写一个监控不同机器的使用内存情况并使用flask出图
  4. WebService开发常用功能详解
  5. android开源数据库,Android Hawk数据库 github开源项目
  6. Django访问量和页面点击数统计
  7. ubuntu安装时出现11:资源暂时不可用
  8. Oracle 11g下载及安装
  9. 【基于遥感解译与GIS技术】土地利用图、植被类型图、植被覆盖度图、土壤侵蚀制图
  10. 基于winrm实现远程操作win
  11. Yate for mac(标记和管理音频文件工具)
  12. SQL Server 数据库之数据完整性
  13. 一个程序员的真实故事上
  14. IC卡16个扇区简介
  15. Vue知识点总结(16)——具名插槽(超级详细)
  16. Termios 函数说明
  17. 发表论文被拒?只因你没注意这几点
  18. 接口测试自动化的思考与总结
  19. H1B工作签证紧俏 “中签率”低对中国留学生影响大-中新网
  20. linux对4T硬盘进行分区

热门文章

  1. cam 350 /DFMSTREAM v12.1使用
  2. JAVA网络编程个人笔记 第4章 inet地址
  3. 用turtle画路飞
  4. Backup Exec安装
  5. Android实战 - 音心播放器 (通知实现音乐的播放/暂停/下一曲控制)
  6. 嵌入式软件开发培训笔记——Java第二天(运算符、程序结构、数组与继承)
  7. 计算机网络安全论文选题提纲,计算机网络安全毕业论文提纲
  8. elastic-Job配置参数详解
  9. C语言判断素数的两种方法
  10. 基于asp.net企业差旅管理系统-计算机毕业设计