什么是CUDA

什么是CUDA,第1张

CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台。

随着显卡的发展,GPU越来越强大携州轿,而且GPU为显示图像做了优化。在计算上已经超越了通用的CPU。如此强大的芯片如果只是作为显卡就太浪费了,因此NVidia推出CUDA,让显卡可以用于图像计算以外的目的。

目前只有G80平台的NVidia显卡才能使用CUDA,工具集的核心是一个C语言编译器。G80中拥有128个单独的ALU,因此非常适合并行计算,而且数值计算的速度远远优于CPU。

CUDA的SDK中的编译器和开发平台支持Windows、Linux系统,可以与Visual Studio2005集成在一起。

目前这项技术处在起步阶段,仅支持32位系统,编译器不支持双精度数据等问题要在晚些时候解决。Geforce8CUDA(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进军高性能计算领域,推出了Tesla&CUDA高性能计算系列解决方案,CUDA技术,一种基于NVIDIA图形处理器(GPU)上全新的并行计算体系架构,让科学家、工程师和其他专业技术人员能够解决以前无法解决的问题,作为一个专用高性能GPU计算解决方案,NVIDIA把超级计算能够带给任何工作站或服务器,以及标准、基于CPU的服务器集群

CUDA是用于GPU计算的开发环境,它是一个全新的软硬件架构,可以将GPU视为一个并行数据计算的设备,对所进行的计算进行分配和管理。在CUDA的架构中,这些计算不再像过去所谓的GPGPU架构那样必须将计算映射到图形API(OpenGL和Direct 3D)中,因此对于开发者来说,CUDA的开发门槛大大降低了。CUDA的GPU编程语言基于标准的C语言,因此任何有C语言基础的用户都很容易地开发CUDA的应用程序。

由于GPU的特点是处理密集型数据和并行数据计算,因此CUDA非常适合需要大规模并行计算的领域。目前CUDA除了可以用C语言开发,也已经提供FORTRAN的应用接口,未来可以预计CUDA会支持C++、Java、Python等各类语言。可广泛的应用在图形动画、科学计算、地质、生物、物理模拟等领域。

2008年NVIDIA推出CUDA SDK2.0版本,大幅提升了CUDA的使用范围。使得CUDA技术愈发成熟

CUFFT库说明有,很清楚的,下面代码赋值给data就坦嫌可以了

#define NX 256

#define BATCH 10

cufftHandle plan

cufftComplex *data

cudaMalloc((void**)&data, sizeof(cufftComplex)*NX*BATCH)

if (cudaGetLastError() != cudaSuccess){

fprintf(stderr, "Cuda error: Failed to allocate\n")

return

}

if (cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH) != CUFFT_SUCCESS){

fprintf(stderr, "早哪CUFFT error: Plan creation failed")

return

}

...

/* Note:

* Identical pointers to input and output arrays implies in-place

transformation

*/

if (cufftExecC2C(plan, data, data, CUFFT_FORWARD) != CUFFT_SUCCESS){

fprintf(stderr, "CUFFT error: ExecC2C Forward failed")

return

}

if (cufftExecC2C(plan, data, data, CUFFT_INVERSE) != CUFFT_SUCCESS){

fprintf(stderr, "CUFFT error: ExecC2C Inverse failed"让睁手)

return

}

cuda是基于标准c语言的,你先把c语言的基础学好,然后动手自己写一顷知些c语言的程序,等对c语言有一定的功底之后,再看cuda,cuda与c语言的不同之处我觉得州塌在于那册乎圆个内核函数,以及如何划分线程块和栅格的纬度和大小,以及如何实现对于线程的索引的搜索,让每一个线程处理对应的一个变量或者几个变量。

然后是cuda的一些基础的语法,这些你可以看一些简单的cuda的例子,例如矩阵相加的例子,通过这些程序的例子可以很好的理解这些语法。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12413523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存