显卡芯片是如何进行通用计算的-译者: shepherd 原作者:Igor …
gpu吧
全部回复
仅看楼主
level 9
Fatebattler 楼主
显卡芯片是不是只能为游戏玩家呈现逼真的画面呢?随着新架构的问世,显卡GPU芯片也可以像CPU那样进行通用计算。本文从原理和实际简单介绍了GPU如何实现通用计算。
2013年07月27日 13点07分 1
level 9
Fatebattler 楼主

GPU(Graphic Processing Unit,图形处理器)用作高性能计算是一件很酷的事儿。硬件上着力于为图形计算优化的GPU在另一个用途上显得颇有潜力:把它们用于特定类型的高性能计算。这篇文章我会谈谈GPU是怎么实现高性能计算的,并简要介绍当下GPU在通用计算领域的发展状况。
把图形变为程序
让GPU实现通用计算首先要引入可编程的渲染方法。DirectX和OpenGL(它们都是应用程序的图形编程接口,译者注)在十来年前就开始支持可编程渲染,这让游戏开发人员自行设计更多图形特效成为可能。除了调节现成的特效,图形设计师们能够编写可以直接在GPU上运行的小程序。就拿DirectX 8来说,设计师们可以为场景中的每件物体使用两种渲染程序:顶点渲染和像素渲染。
顶点渲染函数在3D物体的每个顶点上都得到了应用。该函数能够根据摄像机的视角返回顶点位置值。在顶点变换位置的过程中,顶点渲染会参与一系列特效构造过程,例如真实感很强的皮肤、衣物、面部表情等等。
像素渲染函数应用在了每一个表示特定物体的像素上,该函数会返回这个像素的颜色值。为了计算出颜色,像素渲染会用到多种可供选择的输入值:屏幕上的横纵坐标、场景中的三维坐标、纹理上的位置、物体表面的方向(即法线方向)等等。像素渲染同样能获取诸如纹理数据、凹凸贴图等其他输入信息。
下面这个简单场景给出了茶壶六种不同的像素渲染情形。
A始终返回相同的颜色值。
B根据屏幕上Y轴坐标改变茶壶的颜色。
C根据三维坐标确定茶壶颜色。
D根据茶壶表面的法线方向与光线方向(漫射光线)间夹角的余弦值局部调整颜色。
E使用了稍微复杂一些的光照模型并添加了一个纹理,
F则在此基础上增加了一个凹凸贴图。
如果你对光照模型是如何工作的感兴趣,可以读读Gama Sutra的文章《用HLSL实现光照模型》(Implementing Lighting Models With HLSL)。`
2013年07月27日 13点07分 2
level 9
Fatebattler 楼主

GPGPU
的诞生
当GPU在特定的高性能计算上(如求解偏微分方程)表现出优异性能时,GPU制造商们转而开始挖掘GPU在通用计算上的潜力。GPU通用计算(General Purpose computation on a GPU,即GPGPU)的设想在高性能计算领域成为了一个热门话题。
GPGPU计算是基于
计算内核(
compute kernels
)的。计算内核是像素渲染的产物:
l 和像素渲染一样,计算内核将应用于输入空间的每一个点。
l 像素渲染总是在二维空间进行操作,而计算内核可以在任意维度的空间内工作。
l 像素渲染返回一个单一颜色值,计算内核能
输出任意类型数值。
l 像素渲染操作的是32位浮点数,而计算内核除此之外还能支持64位浮点数以及整数运算。
l 像素渲染只能访问纹理数据,而计算内核能访问
显存的任意位置。
l 另外,多个运行在相同GPU核心的计算内核能够通过一个显式的单核心缓存管理机制共享数据。
2013年07月27日 13点07分 4
level 9
Fatebattler 楼主

GPGPU
编程
如今,编写高效的GPGPU程序需要编程人员对硬件有深层次的理解。下面是三个时下流行的编程规范:
l DirectCompute – 微软用于定义计算内核的API,在DirectX 10中被引入。
l CUDA – Nvidia基于C语言的计算内核开发语言
l OpenCL – 最早由苹果提出现今由Khronos Group开发的API
从概念上来说,这几个规范都十分接近。下表列出了这三个规范在术语使用上的不同:
DirectCompute
CUDA
OpenCL
Thread
Thread
work item
thread group
thread block
work group
group-shared memory)
shared memory
local memory
warp?
Warp
Wavefront
Barrier
Barrier
Barrier
编写高性能的GPGPU代码当然不愿意看到机器死机(尽管提到任何类型的高性能计算都会听到这样的劝告)。下面是编写计算内核需要小心的几点:
l 程序会有
很多线程(几千个)
l 尽管如此,不要使用
过多线程,否则处理器核心会用尽所有寄存器资源进而到显存中去模拟额外的寄存器。
l 线程在同一处理器核心上进行显存存取时,一定要保证硬件能够把不同线程的显存存取合并到一起执行。仅仅这一项优化就能获得十分可观的性能提升。
l ……诸如此类
详细探讨所有这些性能的话题已经超出了本文范围,不过希望本文能给你一点GPGPU编程的基本概念,并且希望读者能从中了解GPGPU编程能解决什么实际问题。
2013年07月27日 13点07分 6
level 9
Fatebattler 楼主
http://article.yeeyan.org/view/152753/113400
偶然看到的感觉不错就转过来了
2013年07月27日 13点07分 7
level 9
Fatebattler 楼主
5楼的表格
2013年07月27日 13点07分 8
@crayon嘻哈小新 ,@pengzhenxx ,这里的GPU核心数目应该指的是?
2013年07月27日 13点07分
关键是,这个gpu指的是哪家的gpu呢?
2013年07月28日 12点07分
回复 crayon嘻哈小新 :个人感觉像是在说英伟达家的。。。不过还是感觉这篇文章有些别扭所以来找你和懒洋洋求教了。。。
2013年07月28日 12点07分
level 9
Fatebattler 楼主
不过感觉很多东西和之前看到的有些冲突,求拆解。。。
2013年07月27日 13点07分 9
level 1
这是天朝的考试题吗
1T == 1万亿
1G == 10亿
[阴险]
2013年07月31日 18点07分 10
1