错误处理、cuda模型、GPU架构杂谈

错误处理、cuda模型、GPU架构杂谈
错误处理
所有编程都需要对错误进行处理,早起的编码错误,编译器会帮搞定,内存错误也能观察出来,但是有些逻辑错误很难发现,甚至到了上线运行时才会被发现,而且有些厉害的bug复现会很难,不总出现,但是很致命,而且CUDA基本都是异步执行的,当错误出现的时候,不一定是哪一条指令触发的,这一点非常头疼;这时候就需要对错误进行防御性处理了,例如代码库头文件里面的这个宏:
#define CHECK(call)\
{\
  const cudaError_t error=call;\
  if(error!=cudaSuccess)\
  {\
      printf("ERROR: %s:%d,",__FILE__,__LINE__);\
      printf("code:%d,reason:%s\n",error,cudaGetErrorString(error));\
      exit(1);\
  }\
}
就是获得每个函数执行后的返回结果,然后对不成功的信息加以处理,CUDA C 的API每个调用都会返回一个错误代码,这个代码就可以好好利用了,当然在release版本中可以去除这部分,但是开发的时候一定要有的。
CUDA执行模型概述
开始接近CUDA最核心的部分,就是有关硬件,和程序的执行模型,用CUDA的目的其实说白了就是为计算速度快,所以压榨性能,提高效率其实就是CUDA学习的最终目的,没人学CUDA为了去显示Hello world。
    启动核函数,计时,统计时间,然后学习了线程,内存模型,线程内存部分会在后面用几章的篇幅进行大书特书,而本章,介绍最底层最优理论指导意义的知识。
    什么时候沿着硬件设计的思路设计程序,就会得到百战百胜;什么时候背离了硬件设计的思路去设计程序,就会得不到好结果。
CUDA执行模型概述
CUDA执行模型揭示了GPU并行架构的抽象视图,再设计硬件的时候,其功能和特性都已经被设计好了,然后去开发硬件,如果这个过程模型特性或功能与硬件设计有冲突,双方就会进行商讨妥协,知道最后产品定型量产,功能和特性算是全部定型,而这些功能和特性就是变成模型的设计基础,而编程模型又直接反应了硬件设计,从而反映了设备的硬件特性。
    比如,最直观的一个就是内存,线程的层次结构帮助控制大规模并行,这个特性就是硬件设计最初设计好,然后集成电路工程师拿去设计,定型后程序员开发驱动,然后在上层可以直接使用这种执行模型来控制硬件。
所以了解CUDA的执行模型,可以帮助优化指令吞吐量,和内存使用来获得极限速度。
GPU架构概述
GPU架构是围绕一个流式多处理器(SM)的扩展阵列搭建的。通过复制这种结构来实现GPU的硬件并行,如图1所示。
图1 GPU流式多处理器(SM),复制这种结构实现GPU的硬件并行
图1包括关键组件:
1)CUDA核心
2)共享内存/一级缓存
3)寄存器文件
4)加载/存储单元
5)特殊功能单元
6)线程束调度器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/789065.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【日记】已经在开始幻想明年的年度计划了(498 字)

正文看来每次都是准备迎检的时候忙很多,但检查来的时候反倒还好一点。今天比昨天好上一些,没有那么忙了。感觉不去跳舞的 8 月,运动量下降了好多,膝盖经常响。只要半月板没事就好…… 前几天高配速的酸痛好像彻底消失了。今晚想去看看舞蹈室开门没有,如果没有的话就去买巧…

GPU的Fermi 架构与Kepler架构杂谈

Fermi 架构 Fermi架构是第一个完整的GPU架构,如图10-15所示。图10-15 Fermi架构是第一个完整的GPU架构 Fermi架构逻辑图,如图10-15所示,具体数据如下: 1)512个加速核心,CUDA核 2)每个CUDA核心都有一个全流水线的整数算数逻辑单元ALU,和一个浮点数运算单元FPU 3)CUDA核被…

CUDA编程结构、存储管理、线程管理杂谈

CUDA编程结构、存储管理、线程管理杂谈 CUDA编程结构 一个异构环境,通常有多个CPU多个GPU,他们都通过PCIe总线相互通信,也是通过PCIe总线分隔开的。所以要区分一下两种设备的内存: 1)主机:CPU及其内存 2)设备:GPU及其内存 这两个内存从硬件到软件都是隔离的(CUDA6.0 以…

Vue3实现excel文件预览和打印

预览excel 关于实现excel文档在线预览的做法,一种方式是通过讲文档里的数据处理成html,一种是将文档处理成图片进行预览。 首先我们先讲一下实现html这种方式预览的。Excel预览用的是xlsx这个库。 xlsx xlsx是一个优秀的表格处理库,是一款适用于浏览器和nodejs的开源电子表格…

计算机电源管理

在计算机电源管理中,S1, S2, S3, S4 代表不同的电源状态或睡眠状态。 了解这些状态,对计算机设备理解功耗及工作状态有很大帮助。最近公司开会,系统同事有讲S3状态功耗很低,我猜和电脑的睡眠、息屏有关。。。emmm,不懂就要学 以下是这些状态的详细说明:S1 状态(低电量等…

使用SRS实现了音视频通话,以及共享桌面的功能

引言在三年前,写智能小车的时候,当时小车上有一个摄像头需要采集,实现推拉流的操作,技术选型当时第一版用的是nginx的rtmp的推拉流,服务器的配置环境是centos,2H4G3M的一个配置,nginx的rtmp的延迟是20秒,超慢,后来研究了SRS以及ZLMediaKit这两个开源的推拉流服务器,没…

算法-动态规划-完全背包

LeetCode算法刷题 动态规划之完全背包0. 动态规划五部曲:确定dp数组(dp table)以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历顺序 举例推导dp数组1. 完全背包问题 完全背包问题中,每个物品都有无数个,可以重复选择。二维dp数组int[][] dp = new int[n][totalWei…

Clion\+OpenCV(C\+\+版)开发环境配置教程Win/Mac

合集 - 环境配置(2)1.最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!!08-282.最简最速!C++版OpenCV安装配置教程Win/Mac!!!08-28收起 Clion+OpenCV(C++版)开发环境配置教程Win/Mac 平时在学习和比赛的时候都是使用的Python版本的OpenCV,最近遇到了一个项目使用的上…

开源活动预告|抖音集团专家聚焦电商、PB级实时场景带来数据技术分享

⌈ Apache Doris 城市行 Meetup ⌋ 第四站北京活动,正在火热报名。8 月 31 日 13:30,ApacheDoris x 字节跳动开源联合 Meetup 北京站即将开启。多位来自抖音集团的数据工程师,将聚焦电商场景、PB级实时场景,带来数据技术实战分享。现场参会名额有限,感兴趣的同学抓紧报名占…

TimeWheel算法介绍及在应用上的探索

作者:来自 vivo 互联网服务器团队- Li Fan本文从追溯时间轮算法的出现,介绍了时间轮算法未出现前,基于队列的定时任务实现,以及基于队列的定时任务实现所存在的缺陷。接着我们介绍了时间轮算法的算法思想及其数据结构,详细阐述了三种时间轮模型的数据结构和优劣性。 再次,…

再推2款底层源码调试工具ILSpy和dotPeek

ILSpy_binaries_8.2.0.7535-x64 https://github.com/icsharpcode/ILSpy/releases 和 JetBrains dotPeek 2024.2.2 https://www.jetbrains.com.cn/decompiler/ 都免费

模拟退火模型 —— 入门案例

简介 模拟退火算法(Simulated Annealing, SA) 是一种概率型全局优化算法,它受到物理退火过程的启发。在固体材料的退火过程中,材料被加热到一定温度后缓慢冷却,其内部结构逐渐趋于稳定,最终达到能量最低的平衡状态。模拟退火算法正是模仿这一过程,用于寻找数学问题中的全…