谭升
非主流人工智能科学家 我和外面那些妖艳的货不一样

Category: 编程

【CUDA 基础】4.3 内存访问模式 1

【CUDA 基础】4.3 内存访问模式

多数GPU程序容易受到内存带宽的限制,所以最大程度的利用全局内存带宽,提高全局加载效率(后面会详细说明),是调控内核函数性能的基本条件。如果不能正确调控全局内存使用,那么优化方案可能收效甚微。

【CUDA 基础】4.2 内存管理 0

【CUDA 基础】4.2 内存管理

CUDA编程的目的是给我们的程序加速,尤其是机器学习,人工智能类的计算,CPU不能高效完成,说白了,我们在控制硬件,控制硬件的语言属于底层语言,比如C语言,最头疼的就是管理内存,python,php这些语言有自己的内存管理机制,

【CUDA 基础】4.1 内存模型概述 0

【CUDA 基础】4.1 内存模型概述

解释一下,时间局部性,就是一个内存位置的数据某时刻被引用,那么在此时刻附近也很有可能被引用,随时间流逝,该数据被引用的可能性逐渐降低。
空间局部性,如果某一内存位置的数据被使用,那么附近的数据也有可能被使用。

0

【CUDA 基础】4.0 全局内存

上一章我们整个一章都在研究CUDA的执行模型,必须承认执行模型中,核的配置,决定了程序执行效率,但是程序的执行效率不只由线程束,线程块等执行结构决定,内存也严重的影响了性能。
举个例子,一个老例子,但是这个例子真的非常贴切

【CUDA 基础】3.6 动态并行 0

【CUDA 基础】3.6 动态并行

动态并行的好处之一就是能让复杂的内核变得有层次,坏处就是写出来的程序更复杂,因为并行行为本来就不好控制,去年我在没有系统的学习CUDA的时候写过一个400行左右的内核,用来训练人脸检测程序,确实比cpu块,但是从gpu的温度来判断,并没有很高的利用率(当时还不会使用性能检测工具这些,当时TensorFlow跑的时候GPU温度有80多,但是我写的就只有60多,所以我断定,gpu性能完全没发挥,但是那个程序还是运行了好久,可见磨刀不误砍柴工这句话是多么正确)

【CUDA 基础】3.5 展开循环 0

【CUDA 基础】3.5 展开循环

今天我们来做循环展开,GPU喜欢确定的东西,像前面讲解执行模型和线程束的时候,明确的指出,GPU没有分支预测能力,所有每一个分支他都是执行的,所以在内核里尽量别写分支,分支包括啥,包括if当然还有for之类的循环语句。

【CUDA 基础】3.4 避免分支分化 2

【CUDA 基础】3.4 避免分支分化

在串行编程中,我们最最最常见的一个问题就是一组特别多数字通过计算变成一个数字,比如加法,也就是求这一组数据的和,或者乘法,这种计算当有如下特点的时候,我们可以用并行归约的方法处理他们

【CUDA 基础】3.3 并行性表现 0

【CUDA 基础】3.3 并行性表现

继续更新CUDA,前面为了加速概率论的学习停了一段CUDA,从今天开始继续CUDA和数学分析的更新,每一篇都写一点废话就相当于自己的日记了,之前很佩服那些写日记的人,因为根本不知道日记可以写些什么,但是现在看看,如果写一些文字记录自己,首先可以反思当下,其次是过一段时间以后可以看看自己到底有没有进步,这些都是有用的,所以大家可以略过我的废话,直接看正文。

【CUDA 基础】3.2 理解线程束执行的本质(Part II) 2

【CUDA 基础】3.2 理解线程束执行的本质(Part II)

我们前面提到过,每个SM上执行的基本单位是线程束,也就是说,单指令通过指令调度器广播给某线程束的全部线程,这些线程同一时刻执行同一命令,当然也有分支情况,上一篇我们已经介绍了分支,这是执行的那部分,当然后有很多线程束没执行,那么这些没执行的线程束情况又如何呢?

【CUDA 基础】3.2 理解线程束执行的本质(Part I) 0

【CUDA 基础】3.2 理解线程束执行的本质(Part I)

我们前面已经大概的介绍了CUDA执行模型的大概过程,包括线程网格,线程束,线程间的关系,以及硬件的大概结构,例如SM的大概结构,而对于硬件来说,CUDA执行的实质是线程束的执行,因为硬件根本不知道每个块谁是谁,也不知道先后顺序,硬件(SM)只知道按照机器码跑,而给他什么,先后顺序,这个就是硬件功能设计的直接体现了。

试录了几节线性代数视频课程,欢迎大家支持,
点击试看
点击购买更多内容

由于博客移至wordpress,部分公式和代码显示不正常,博主正在努力修改,如发现公式显示错误,请及时在文章下留言,感谢您的帮助,尽请原谅!