CUDA(Compute Unified Device Architecture,计算统一设备架构)是由NVIDIA所推出的一种整合技术,是该公司对于GPGPU的正式名称。透过这个技术,用家可利用 NVIDIA的GeForce 8以后的GPU和较新的Quadro GPU进行计算。亦是首次可以利用GPU作为C-编译器的开发环境。NVIDIA行销的时候,往往将编译器与架构混合推广,做成混乱。实际上,CUDA架构可以相容OpenCL或者自家的C-编译器。无论是CUDA C-语言或是OpenCL,指令最终都会被驱动程式转换成PTX代码,交由显示核心计算。
CUDA是由NVIDIA(英伟达)推出的通用并行计算架构。该架构充分将GPU强大的并行计算能力调动起来,使GPU能够在解决复杂计算问题上发挥其先天的优势。开发人员现在仅使用C语言(C语言是应用最广泛的一种高级编程语言),就能在基于CUDA架构的GPU(图形处理器)上编写程序,所编写出的程序可以在支持CUDA的处理器上以超高性能运行。CUDA将来还会支持其它语言,包括FORTRAN, Python以及C++。
CUDA技术开启了GPU实现通用运算的大门,是GPU从专用平台走向通用平台的一个里程碑,自然也是下一场计算革命的真正起点。
与英特尔的X86架构不同,CUDA基于GPU,但不拘于GPU,而是取长补短,将CPU串行计算和GPU的并行计算融合,开启“CPU+GPU协同计算”的全新时代,即“异构计算”。
“异构计算”真正实现了系统整体计算能力的最大化利用:GPU和CPU协同工作,GPU处理大量的图形和并行处理,CPU处理操作系统和指令的逻辑控制。
簡而言之,CUDA的出現,使GPU不仅成为游戏玩家的最爱,也受到科研机构的青睐。從而使GPU更具有與CPU并驾齐驱,或說更高一層的能力。CUDA也使得个人超级计算机的普及成为可能,成为一场真正的革命。
[ 本帖最后由 wind_lin 于 2009-12-25 18:07 编辑 ]
由于目前存在着多种GPU版本的NVIDIA显卡,不同版本的GPU之间都有不同的差异,因此驱动部分基本上可以理解为是CUDA-enable的GPU的设备抽象层,提供硬件设备的抽象访问接口。CUDA提供运行期环境也是通过这一层来实现各种功能的。目前基于CUDA开发的应用必须有NVIDIA CUDA-enable的硬件支持,NVIDIA公司GPU运算事业部总经理Andy Keane在一次活动中表示:一个充满生命力的技术平台应该是开放的,CUDA未来也会向这个方向发展。由于CUDA的体系结构中有硬件抽象层的存在,因此今后也有可能发展成为一个通用的GPGPU标准接口,兼容不同厂商的GPU产品
CUDA™ 工具包是一种针对支持CUDA功能的GPU(图形处理器)的C语言开发环境。CUDA开发环境包括:
· nvcc C语言编译器
· 适用于GPU(图形处理器)的CUDA FFT和BLAS库
· 分析器
· 适用于GPU(图形处理器)的gdb调试器(在2008年3月推出alpha版)
· CUDA运行时(CUDA runtime)驱动程序(目前在标准的NVIDIA GPU驱动中也提供)
· CUDA编程手册
CUDA开发者软件开发包(SDK)提供了一些范例(附有源代码),以帮助使用者开始CUDA编程。这些范例包括:
· 并行双调排序
· 矩阵乘法
· 矩阵转置
· 利用计时器进行性能评价
· 并行大数组的前缀和(扫描)
· 图像卷积
· 使用Haar小波的一维DWT
· OpenGL和Direct3D图形互操作示例
· CUDA BLAS和FFT库的使用示例
· CPU-GPU C—和C++—代码集成
· 二项式期权定价模型
· Black-Scholes期权定价模型
· Monte-Carlo期权定价模型
· 并行Mersenne Twister(随机数生成)
· 并行直方图
· 图像去噪
· Sobel边缘检测滤波器
· MathWorks MATLAB® 插件 (点击这里下载)
新的基于1.1版CUDA的SDK 范例现在也已经发布了。要查看完整的列表、下载代码,请点击此处。
技术功能
· 在GPU(图形处理器)上提供标准C编程语言
· 为在支持CUDA的NVIDIA GPU(图形处理器)上进行并行计算而提供了统一的软硬件解决方案
· CUDA兼容的GPU(图形处理器)包括很多:从低功耗的笔记本上用的GPU到高性能的,多GPU的系统。
· 支持CUDA的GPU(图形处理器)支持并行数据缓存和线程执行管理器
· 标准FFT(快速傅立叶变换)和BLAS(基本线性代数子程序)数值程序库
· 针对计算的专用CUDA驱动
· 经过优化的,从中央处理器(CPU)到支持CUDA的GPU(图形处理器)的直接上传、下载通道
· CUDA驱动可与OpenGL和DirectX图形驱动程序实现互操作
· 支持Linux 32位/64位以及Windows XP 32位/64位 操作系统
· 为了研究以及开发语言的目的,CUDA提供对驱动程序的直接访问,以及汇编语言级的访问
CUDA(Compute Unified Device Architecture)
CUDA的出现,使一直孤军奋战的CPU终于有了工作伙伴,提高运行速度不再是无限压榨CPU的最高速度,在几百个辛勤的“小弟”的帮助下,CPU从抹桌洗碗的孤单打工族,摇身一变成了部门总管,哪里有工作,指挥小弟们一拥而上。有了CUDA,几乎已到极限的运行速度再提高几百倍不是梦,计算机业似乎踏入了一个全新的领域。
但对于这种速度的提升,前途却不是那么坦荡,开发人员现在可以用C语言编写程序,利用GPU来协助CPU处理数据,听起来似乎万事俱备,但其复杂度却不是C语言编写程序可比的,CUDA编程语言几百页的说明要烂熟于心,这已经不是易事,缺乏专业的开发工具,使编程的第一步难上加难,不管是WINDOWS还是LINUX,在安装了对应的驱动,SDK,工具包之后,还要配合别的软件以及修改N多注册表项,一个字节的修改错误导致的出错提示,让初学者们已经搜尽百度。高手们不断的写出模式包,安装教程,说明,却又被软件版本不断淘洗,某个模式包对应某个版本,某种修改对应某个版本的工具包……
用CUDA编写程序时,又被各种数字的乘法搞晕,栅格中的几行几列,乘以几加几,全部要用编程员的大脑计算,检验起来更是头大如斗,从LOCAL到SHARED,各种不同的缓存速度又不同,可以处理的数据也不同……
开发环境的简化,需要大量程序员的努力,但这种大量努力的前提,是GPU技术的需求性的提高。利用GPU提高运算速度是可行的,但必须是大量单调却统一的计算工作,再分配给所有GPU并发执行,所以提速几百倍只限于一部分工作,而且需要很好的统筹安排,这也要耗费CPU的传统能力和程序员的脑细胞。
CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台。
随着显卡的发展,GPU越来越强大,而且GPU为显示图像做了优化。在计算上已经超越了通用的CPU。如此强大的芯片如果只是作为显卡就太浪费了,因此N卡厂商推出CUDA,让显卡可以用于图像计算以外的目的。
目前只有G80平台的N卡才能使用CUDA,工具集的核心是一个C语言编译器。G80中拥有128个单独的ALU,因此非常适合并行计算,而且数值计算的速度远远优于CPU。
CUDA的SDK中的编译器和开发平台支持Windows、Linux系统,可以与Visual Studio2003集成在一起。
目前这项技术处在起步阶段,仅支持32位系统,编译器不支持双精度数据等问题要在晚些时候解决。当然还有就是Geforce8系列显卡高昂的价格问题了。
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
从CUDA体系结构的组成来说,包含了三个部分:开发库、运行期环境和驱动(表2)。
开发库是基于CUDA技术所提供的应用开发库。目前CUDA的1.1版提供了两个标准的数学运算库——CUFFT(离散快速傅立叶变换)和CUBLAS(离散基本线性计算)的实现。这两个数学运算库所解决的是典型的大规模的并行计算问题,也是在密集数据计算中非常常见的计算类型。开发人员在开发库的基础上可以快速、方便的建立起自己的计算应用。此外,开发人员也可以在CUDA的技术基础上实现出更多的开发库。
运行期环境提供了应用开发接口和运行期组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调度等函数。基于CUDA开发的程序代码在实际执行中分为两种,一种是运行在CPU上的宿主代码(Host Code),一种是运行在GPU上的设备代码(Device Code)。不同类型的代码由于其运行的物理位置不同,能够访问到的资源不同,因此对应的运行期组件也分为公共组件、宿主组件和设备组件三个部分,基本上囊括了所有在GPGPU开发中所需要的功能和能够使用到的资源接口,开发人员可以通过运行期环境的编程接口实现各种类型的计算。
由于目前存在着多种GPU版本的NVIDIA显卡,不同版本的GPU之间都有不同的差异,因此驱动部分基本上可以理解为是CUDA-enable的GPU的设备抽象层,提供硬件设备的抽象访问接口。CUDA提供运行期环境也是通过这一层来实现各种功能的。目前基于CUDA开发的应用必须有NVIDIA CUDA-enable的硬件支持,NVIDIA公司GPU运算事业部总经理Andy Keane在一次活动中表示:一个充满生命力的技术平台应该是开放的,CUDA未来也会向这个方向发展。由于CUDA的体系结构中有硬件抽象层的存在,因此今后也有可能发展成为一个通用的GPGPU标准接口,兼容不同厂商的GPU产品
CUDA(Compute Unified Device Architecture)
CUDA的出现,使一直孤军奋战的CPU终于有了工作伙伴,提高运行速度不再是无限压榨CPU的最高速度,在几百个辛勤的“小弟”的帮助下,CPU从抹桌洗碗的孤单打工族,摇身一变成了部门总管,哪里有工作,指挥小弟们一拥而上。有了CUDA,几乎已到极限的运行速度再提高几百倍不是梦,计算机业似乎踏入了一个全新的领域。
但对于这种速度的提升,前途却不是那么坦荡,开发人员现在可以用C语言编写程序,利用GPU来协助CPU处理数据,听起来似乎万事俱备,但其复杂度却不是 C语言编写程序可比的,CUDA编程语言几百页的说明要烂熟于心,这已经不是易事,缺乏专业的开发工具,使编程的第一步难上加难,不管是WINDOWS还是LINUX,在安装了对应的驱动,SDK,工具包之后,还要配合别的软件以及修改N多注册表项,一个字节的修改错误导致的出错提示,让初学者们已经搜尽百度。高手们不断的写出模式包,安装教程,说明,却又被软件版本不断淘洗,某个模式包对应某个版本,某种修改对应某个版本的工具包……
用CUDA编写程序时,又被各种数字的乘法搞晕,栅格中的几行几列,乘以几加几,全部要用编程员的大脑计算,检验起来更是头大如斗,从LOCAL到SHARED,各种不同的缓存速度又不同,可以处理的数据也不同……
开发环境的简化,需要大量程序员的努力,但这种大量努力的前提,是GPU技术的需求性的提高。利用GPU提高运算速度是可行的,但必须是大量单调却统一的计算工作,再分配给所有GPU并发执行,所以提速几百倍只限于一部分工作,而且需要很好的统筹安排,这也要耗费CPU的传统能力和程序员的脑细胞。
进来学习一下!
CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台。
随着显卡的发展,GPU越来越强大,而且GPU为显示图像做了优化。在计算上已经超越了通用的CPU。如此强大的芯片如果只是作为显卡就太浪费了,因此N卡厂商推出CUDA,让显卡可以用于图像计算以外的目的。
目前只有G80平台的N卡才能使用CUDA,工具集的核心是一个C语言编译器。G80中拥有128个单独的ALU,因此非常适合并行计算,而且数值计算的速度远远优于CPU。
CUDA的SDK中的编译器和开发平台支持Windows、Linux系统,可以与Visual Studio2003集成在一起。
目前这项技术处在起步阶段,仅支持32位系统,编译器不支持双精度数据等问题要在晚些时候解决。当然还有就是Geforce8系列显卡高昂的价格问题了。
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
从CUDA体系结构的组成来说,包含了三个部分:开发库、运行期环境和驱动(表2)。
开发库是基于CUDA技术所提供的应用开发库。目前CUDA的1.1版提供了两个标准的数学运算库——CUFFT(离散快速傅立叶变换)和 CUBLAS(离散基本线性计算)的实现。这两个数学运算库所解决的是典型的大规模的并行计算问题,也是在密集数据计算中非常常见的计算类型。开发人员在开发库的基础上可以快速、方便的建立起自己的计算应用。此外,开发人员也可以在CUDA的技术基础上实现出更多的开发库。
运行期环境提供了应用开发接口和运行期组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调度等函数。基于CUDA开发的程序代码在实际执行中分为两种,一种是运行在CPU上的宿主代码(Host Code),一种是运行在GPU上的设备代码(Device Code)。不同类型的代码由于其运行的物理位置不同,能够访问到的资源不同,因此对应的运行期组件也分为公共组件、宿主组件和设备组件三个部分,基本上囊括了所有在GPGPU开发中所需要的功能和能够使用到的资源接口,开发人员可以通过运行期环境的编程接口实现各种类型的计算。
由于目前存在着多种GPU版本的NVIDIA显卡,不同版本的GPU之间都有不同的差异,因此驱动部分基本上可以理解为是CUDA-enable的GPU 的设备抽象层,提供硬件设备的抽象访问接口。CUDA提供运行期环境也是通过这一层来实现各种功能的。目前基于CUDA开发的应用必须有NVIDIA CUDA-enable的硬件支持,NVIDIA公司GPU运算事业部总经理Andy Keane在一次活动中表示:一个充满生命力的技术平台应该是开放的,CUDA未来也会向这个方向发展。由于CUDA的体系结构中有硬件抽象层的存在,因此今后也有可能发展成为一个通用的GPGPU标准接口,兼容不同厂商的GPU产品
CUDA的出现,使一直孤军奋战的CPU终于有了工作伙伴,提高运行速度不再是无限压榨CPU的最高速度,在几百个辛勤的“小弟”的帮助下,CPU从抹桌洗碗的孤单打工族,摇身一变成了部门总管,哪里有工作,指挥小弟们一拥而上。有了CUDA,几乎已到极限的运行速度再提高几百倍不是梦,计算机业似乎踏入了一个全新的领域。
但对于这种速度的提升,前途却不是那么坦荡,开发人员现在可以用C语言编写程序,利用GPU来协助CPU处理数据,听起来似乎万事俱备,但其复杂度却不是 C语言编写程序可比的,CUDA编程语言几百页的说明要烂熟于心,这已经不是易事,缺乏专业的开发工具,使编程的第一步难上加难,不管是WINDOWS还是LINUX,在安装了对应的驱动,SDK,工具包之后,还要配合别的软件以及修改N多注册表项,一个字节的修改错误导致的出错提示,让初学者们已经搜尽百度。高手们不断的写出模式包,安装教程,说明,却又被软件版本不断淘洗,某个模式包对应某个版本,某种修改对应某个版本的工具包……
用CUDA编写程序时,又被各种数字的乘法搞晕,栅格中的几行几列,乘以几加几,全部要用编程员的大脑计算,检验起来更是头大如斗,从LOCAL到SHARED,各种不同的缓存速度又不同,可以处理的数据也不同……
开发环境的简化,需要大量程序员的努力,但这种大量努力的前提,是GPU技术的需求性的提高。利用GPU提高运算速度是可行的,但必须是大量单调却统一的计算工作,再分配给所有GPU并发执行,所以提速几百倍只限于一部分工作,而且需要很好的统筹安排,这也要耗费CPU的传统能力和程序员的脑细胞。
[ 本帖最后由 FairyTao 于 2009-12-25 20:24 编辑 ]
支持!
CUDA的出现,使一直孤军奋战的CPU终于有了工作伙伴,提高运行速度不再是无限压榨CPU的最高速度,在几百个辛勤的“小弟”的帮助下,CPU从抹桌洗碗的孤单打工族,摇身一变成了部门总管,哪里有工作,指挥小弟们一拥而上。有了CUDA,几乎已到极限的运行速度再提高几百倍不是梦,计算机业似乎踏入了一个全新的领域。
CUDA目前还属于前沿技术,相关的应用以及工具都还不算多,而且功能也有限。
下面先介绍一款工具:
在支持CUDA的GPU Caps Viewer 1.7.0发布以后,沉寂了半年之久,Geek3d终于放出了GPU Caps Viewer 1.8.0,这个新版本加入了OpenCL和OpenGL 3的支持,推荐大家下载。 与 GPU-Z不同,GPU Caps Viewer的检测很全面,特别是OpenGL的检测,附带检查CPU主频,内存容量等。如果你的显卡支持OpenGL 2.0,那么你可以使用软件自带的测试工具进行一下测试,最低需要NVIDIA Geforce 5或者ATI Radeon 9600以上显卡。
下面是GPU Caps Viewer 1.8.0详细更新内容:
1.新增对OpenCL GPU/CPU demo的支持
2.新增两个OpenGL 3 demo
3.新增OpenCL面板支持OpenCL设备、
4.Radeon显卡可显示核心和显存频率(待机/UVD/3D)
5.新增GPU计算确认框
6.首个面板重新排列,显示重要信息
7.修正一些问题
大家讨论得很热烈呀:right:
一般来说,可以简单的认为CUDA是一种以C语言为基础的平台,主要是利用显卡上GPU的强大的浮点运算能力来完成的任务。
因为CUDA是NVIDIA力推的一种显卡技术,所以目前只有G80平台的NVidia显卡才能使用CUDA。
我的理解是由于NVIDIA 在CUDA中使用到一个含有并行编程模型和并行指令架构,其到NVIDIA的GPU在并行计算引擎的能力得以提升,从而比传统CPU更加高效的解决许多复杂并行计算。原因可能是CUDA架构在两个方面有实质上的提升:一个是ISA指令集架构的提升;第二硬件计算引擎的提升。
说到应用场合,可以和大家分享我们公司的实例:
近期,我公司就利用CUDA技术平台上开发展一种三维动态产品显示动画。
我公司的产品是一种类似外壳是金属压铸件,但内部有许多液压通路、电气通路的“黑盒子”产品。
因此,在产品开发中,或向客户介绍产品性能时,需要模拟内外部的各种情况。
简单说,就是用户需要自由的放大、缩小来观察产品的外形和内部结构,这种动画要比传统的三维线条图更立体化,这样和客户在产品沟通时就更方便。
实际上,在我们公司选型显示技术平台时,主要是考虑到G80中拥有128个单独的ALU,非常适合并行计算而且数值计算的速度优于CPU。
在三维产品动态显示中,我们使用CUDA来让GPU承担整个三维数据的物理计算,而用户将能获得让人感到惊奇的视觉效果。另外,就是用户可自由的放大、缩小的观察产品,这些巨量数据分析以前需要大规模的计算系统才能完成的工作,而且还需要等上一段时间,达不到实时的作用。
目前来说,CUDA技术在并行巨量数据处理上,特别是显示的视觉效果突破使得我们在和客户沟通中方便很多吧。
[ 本帖最后由 亭华龙哥 于 2009-12-25 21:10 编辑 ]
CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台。
随着显卡的发展,GPU越来越强大,而且GPU为显示图像做了优化。在计算上已经超越了通用的CPU。如此强大的芯片如果只是作为显卡就太浪费了,因此N卡厂商推出CUDA,让显卡可以用于图像计算以外的目的。
目前只有G80平台的N卡才能使用CUDA,工具集的核心是一个C语言编译器。G80中拥有128个单独的ALU,因此非常适合并行计算,而且数值计算的速度远远优于CPU。
CUDA的SDK中的编译器和开发平台支持Windows、Linux系统,可以与Visual Studio2003集成在一起。
目前这项技术处在起步阶段,仅支持32位系统,编译器不支持双精度数据等问题要在晚些时候解决。当然还有就是Geforce8系列显卡高昂的价格问题了。
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
从CUDA体系结构的组成来说,包含了三个部分:开发库、运行期环境和驱动(表2)。
开发库是基于CUDA技术所提供的应用开发库。目前CUDA的1.1版提供了两个标准的数学运算库——CUFFT(离散快速傅立叶变换)和CUBLAS(离散基本线性计算)的实现。这两个数学运算库所解决的是典型的大规模的并行计算问题,也是在密集数据计算中非常常见的计算类型。开发人员在开发库的基础上可以快速、方便的建立起自己的计算应用。此外,开发人员也可以在CUDA的技术基础上实现出更多的开发库。
运行期环境提供了应用开发接口和运行期组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调度等函数。基于CUDA开发的程序代码在实际执行中分为两种,一种是运行在CPU上的宿主代码(Host Code),一种是运行在GPU上的设备代码(Device Code)。不同类型的代码由于其运行的物理位置不同,能够访问到的资源不同,因此对应的运行期组件也分为公共组件、宿主组件和设备组件三个部分,基本上囊括了所有在GPGPU开发中所需要的功能和能够使用到的资源接口,开发人员可以通过运行期环境的编程接口实现各种类型的计算。
由于目前存在着多种GPU版本的NVIDIA显卡,不同版本的GPU之间都有不同的差异,因此驱动部分基本上可以理解为是CUDA-enable的GPU的设备抽象层,提供硬件设备的抽象访问接口。CUDA提供运行期环境也是通过这一层来实现各种功能的。目前基于CUDA开发的应用必须有NVIDIA CUDA-enable的硬件支持,NVIDIA公司GPU运算事业部总经理Andy Keane在一次活动中表示:一个充满生命力的技术平台应该是开放的,CUDA未来也会向这个方向发展。由于CUDA的体系结构中有硬件抽象层的存在,因此今后也有可能发展成为一个通用的GPGPU标准接口,兼容不同厂商的GPU产品
CUDA™ 工具包是一种针对支持CUDA功能的GPU(图形处理器)的C语言开发环境。CUDA开发环境包括:
· nvcc C语言编译器
· 适用于GPU(图形处理器)的CUDA FFT和BLAS库
· 分析器
· 适用于GPU(图形处理器)的gdb调试器(在2008年3月推出alpha版)
· CUDA运行时(CUDA runtime)驱动程序(目前在标准的NVIDIA GPU驱动中也提供)
· CUDA编程手册
CUDA开发者软件开发包(SDK)提供了一些范例(附有源代码),以帮助使用者开始CUDA编程。这些范例包括:
· 并行双调排序
· 矩阵乘法
· 矩阵转置
· 利用计时器进行性能评价
· 并行大数组的前缀和(扫描)
· 图像卷积
· 使用Haar小波的一维DWT
· OpenGL和Direct3D图形互操作示例
· CUDA BLAS和FFT库的使用示例
· CPU-GPU C—和C++—代码集成
· 二项式期权定价模型
· Black-Scholes期权定价模型
· Monte-Carlo期权定价模型
· 并行Mersenne Twister(随机数生成)
· 并行直方图
· 图像去噪
· Sobel边缘检测滤波器
· MathWorks MATLAB® 插件 (点击这里下载)
新的基于1.1版CUDA的SDK 范例现在也已经发布了。要查看完整的列表、下载代码,请点击此处。
技术功能
· 在GPU(图形处理器)上提供标准C编程语言
· 为在支持CUDA的NVIDIA GPU(图形处理器)上进行并行计算而提供了统一的软硬件解决方案
· CUDA兼容的GPU(图形处理器)包括很多:从低功耗的笔记本上用的GPU到高性能的,多GPU的系统。
· 支持CUDA的GPU(图形处理器)支持并行数据缓存和线程执行管理器
· 标准FFT(快速傅立叶变换)和BLAS(基本线性代数子程序)数值程序库
· 针对计算的专用CUDA驱动
· 经过优化的,从中央处理器(CPU)到支持CUDA的GPU(图形处理器)的直接上传、下载通道
· CUDA驱动可与OpenGL和DirectX图形驱动程序实现互操作
· 支持Linux 32位/64位以及Windows XP 32位/64位 操作系统
· 为了研究以及开发语言的目的,CUDA提供对驱动程序的直接访问,以及汇编语言级的访问
[
不错!股鼓掌!!!
翻页了……
呵呵 NVIDIA是不是要进军cpu和intel争蛋糕了呢?
不过也是的··
“如此强大的芯片如果只是作为显卡就太浪费了”
但是个人觉得和intel比,还差得远哦
NVIDIA还是应该寻找合适的切入点
CUDA是由NVIDIA(英伟达)推出的通用并行计算架构。该架构充分将GPU强大的并行计算能力调动起来,使GPU能够在解决复杂计算问题上发挥其先天的优势。开发人员现在仅使用C语言(C语言是应用最广泛的一种高级编程语言),就能在基于CUDA架构的GPU(图形处理器)上编写程序,所编写出的程序可以在支持CUDA的处理器上以超高性能运行。CUDA将来还会支持其它语言,包括FORTRAN, Python以及C++。
CUDA技术开启了GPU实现通用运算的大门,是GPU从专用平台走向通用平台的一个里程碑,自然也是下一场计算革命的真正起点。
与英特尔的X86架构不同,CUDA基于GPU,但不拘于GPU,而是取长补短,将CPU串行计算和GPU的并行计算融合,开启“CPU+GPU协同计算”的全新时代,即“异构计算”。
“异构计算”真正实现了系统整体计算能力的最大化利用:GPU和CPU协同工作,GPU处理大量的图形和并行处理,CPU处理操作系统和指令的逻辑控制。
簡而言之,CUDA的出現,使GPU不仅成为游戏玩家的最爱,也受到科研机构的青睐。從而使GPU更具有與CPU并驾齐驱,或說更高一層的能力。CUDA也使得个人超级计算机的普及成为可能,成为一场真正的革命。
[
[
精彩啊!
CUDA的出现,使一直孤军奋战的CPU终于有了工作伙伴,提高运行速度不再是无限压榨CPU的最高速度,在几百个辛勤的“小弟”的帮助下,CPU从抹桌洗碗的孤单打工族,摇身一变成了部门总管,哪里有工作,指挥小弟们一拥而上。有了CUDA,几乎已到极限的运行速度再提高几百倍不是梦,计算机业似乎踏入了一个全新的领域。
但对于这种速度的提升,前途却不是那么坦荡,开发人员现在可以用C语言编写程序,利用GPU来协助CPU处理数据,听起来似乎万事俱备,但其复杂度却不是C语言编写程序可比的,CUDA编程语言几百页的说明要烂熟于心,这已经不是易事,缺乏专业的开发工具,使编程的第一步难上加难,不管是WINDOWS还是LINUX,在安装了对应的驱动,SDK,工具包之后,还要配合别的软件以及修改N多注册表项,一个字节的修改错误导致的出错提示,让初学者们已经搜尽百度。高手们不断的写出模式包,安装教程,说明,却又被软件版本不断淘洗,某个模式包对应某个版本,某种修改对应某个版本的工具包……
用CUDA编写程序时,又被各种数字的乘法搞晕,栅格中的几行几列,乘以几加几,全部要用编程员的大脑计算,检验起来更是头大如斗,从LOCAL到SHARED,各种不同的缓存速度又不同,可以处理的数据也不同……
开发环境的简化,需要大量程序员的努力,但这种大量努力的前提,是GPU技术的需求性的提高。利用GPU提高运算速度是可行的,但必须是大量单调却统一的计算工作,再分配给所有GPU并发执行,所以提速几百倍只限于一部分工作,而且需要很好的统筹安排,这也要耗费CPU的传统能力和程序员的脑细胞。
然而目前来讲,GPU并不是电脑的“制式武器”,只有NVIDIA的显卡支持此种技术,这使得有些初学者不得不用CPU来模拟GPU的功能,性能方面的数据完全无法参考。打开市场,让NVIDIA显卡成为电脑内必要的组成部分,成了一切进展的前提,由此推断,NVIDIA与两大CPU厂商合作,使其集成在主板上的可能性是很高的,也有可能与笔记本厂商合作,使大部分笔记本带有NVIDIA的显卡,使之有CUDA开发的可能。
总而言之,提高市场占有度,才能提高CUDA开发的可能性和必要性,需求量有了,才能推动开发环境的简化,编程员们才能更快的使用GPU进行大规模的软件开发。CUDA的GPU加速之路似易实难,好象战士的武器升级了,射程增加10倍,以为是激光武器,谁知道到手的是使用专用子弹,操作繁索,根据天气条件命中率不同的越远程狙击步枪。究竟有几个战士会选择这种射程的升级呢?
从CUDA体系结构的组成来说,包含了三个部分:开发库、运行期环境和驱动
开发库是基于CUDA技术所提供的应用开发库。目前CUDA的1.1版提供了两个标准的数学运算库——CUFFT(离散快速傅立叶变换)和CUBLAS(离散基本线性计算)的实现。这两个数学运算库所解决的是典型的大规模的并行计算问题,也是在密集数据计算中非常常见的计算类型。开发人员在开发库的基础上可以快速、方便的建立起自己的计算应用。此外,开发人员也可以在CUDA的技术基础上实现出更多的开发库。
运行期环境提供了应用开发接口和运行期组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调度等函数。基于CUDA开发的程序代码在实际执行中分为两种,一种是运行在CPU上的宿主代码(Host Code),一种是运行在GPU上的设备代码(Device Code)。不同类型的代码由于其运行的物理位置不同,能够访问到的资源不同,因此对应的运行期组件也分为公共组件、宿主组件和设备组件三个部分,基本上囊括了所有在GPGPU开发中所需要的功能和能够使用到的资源接口,开发人员可以通过运行期环境的编程接口实现各种类型的计算。
由于目前存在着多种GPU版本的NVIDIA显卡,不同版本的GPU之间都有不同的差异,因此驱动部分基本上可以理解为是CUDA-enable的GPU的设备抽象层,提供硬件设备的抽象访问接口。CUDA提供运行期环境也是通过这一层来实现各种功能的。目前基于CUDA开发的应用必须有NVIDIA CUDA-enable的硬件支持,NVIDIA公司GPU运算事业部总经理Andy Keane在一次活动中表示:一个充满生命力的技术平台应该是开放的,CUDA未来也会向这个方向发展。由于CUDA的体系结构中有硬件抽象层的存在,因此今后也有可能发展成为一个通用的GPGPU标准接口,兼容不同厂商的GPU产品
CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台。
计算已经不是CPU的专利,Cuda能够做得更好
CPU如果不在所长的计算上有所突破,恐怕会有被cuda取代的趋势
不断简化的运算,以后对IT人员不知是好是坏啊
CUDA目前还属于前沿技术,相关的应用以及工具都还不算多,而且功能也有限。
cuda本身是一个新型的基础架构,它主要利用多线程的并行能力提高运算效率的,因为目前intel的处理器最高支持并行128个线程,但对采用GPU而言,通过多线程并行太轻松了。其实目前的并行计算有好多厂家提出,只不过是由于cuda架构支持C语言,所以才被人们更容易掌握。目前采用GPU还有很长的路要走,包括数据的处理准确性和开发技术。去年参加Yocself论坛,有一个学者提出采用cuda架构,利用GPU运算时数据是不正确的,amd技术总监也没给出一个解释,只是说目前还有很大不足,相信会慢慢解决。cuda的出现,跟我们一个启示就是以后cpu多核不会一直走下去的,肯定会是多核加平台加速的路线。
什么是CUDA?
使 用了CUDA的GPU计算通过标准的C语言将下一代NV GPU的总多计算特性结合到一起。在这之前的GPU是基于“流式着色程序”的,CUDA则使用C语言,通过“线程”来创建应用程序,这类似于CPU上的多 线程程序。相比较于仅能有很少线程同时工作的多核CPU的而言,NV GPU的特性可以让CUDA同时执行数千个线程,这将令我们的应用能处理更多的信息流。
CUDA所提供的最重要的创新在于,它使得 工作在GPU上的线程可以协作解决问题。在线程间通讯实现以后,CUDA将允许应用程序更加高效的执行。由NV GPUs的支持,CUDA有一个直接在GPU上的并行计算缓存,它用于保存频繁使用的信息。在GPU上保存信息可以让计算线程即刻得到共享数据而不是去漫 长的等待off-chip的DRAM上的数据。它能让用户实时的计算出复杂问题的答案。CUDA是NVIDIA近来力推的东西,简单的说,CUDA可以认为是一种以C语言为基础的平台,主要是利用显卡强大的浮点运算能力来完成以往需要CPU才可以完成的任务。CPU的特点是什么都能干,但不够专,运算能力不高,而显卡则很专,专门运算图形方面的浮点运算,能力比CPU强10倍以上。但显卡的应用范围狭窄,所以NVIDIA为了让它的显卡在电脑中有更高的地位,就搞了这么个CUDA。
想用CUDA,必须是NVIDIA的显卡,而且要是GEFORCE 8以后的显卡。平常没什么用,只是在转换视频格式,以及看高清时有点作用。暂时CUDA的作用范围仍然比较狭窄,就看NVIDIA能把它如何发展了。
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
CUDA特别适用于中等粒度的并行计算,比较适合的领域包括:有限元,信号处理,神经网络以及人工智能。
开头所说的用于病毒扫描,我觉得更合适的说法是病毒特征码扫描,很适合CUDA的场景(这个其实和GFW差不多,GFW今后可能是CUDA单一的最大用户)
另外,人工智能更是CUDA的大好应用场景(NVidia应该利用CUDA编写国际象棋程序,一台至强,配4张NVidia的加速卡,性能应该可以深蓝叫板)
另外,数据库服务器和搜索引擎,我觉得可以用CUDA的概念进行一下改造,或许有更好的性能。
CUDA某种意义上类似超并行机(但是每个CPU的性能都比较弱)