CUDA是什么,哪些显卡支持CUDA?

CUDA是什么,哪些显卡支持CUDA?,第1张

简单来说是一种全新的图形运算模型,它定义了新的图形运算方法,开发语言,游戏的图像呈现方式。可以说支持这个技术的显卡肯定技术上是比较新的,因此可以用来区分新老的显卡。以下的资料是CUDA的一个简洁和支持CUDA的显卡。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提供对驱动程序的直接访问,以及汇编语言级的访问

希望采纳

秒表计时器的代码

#include

#include

#include

#include

struct

tm

//定义时间结构体,包括时分秒和10毫秒

{

int

hours,minutes,seconds

int

hscd

}time,tmp,total

//time用以计时显示,tmp用以存储上一阶段时间,total记总时间

int

cnt

file*

fout

//每次调用update函数,相当于时间过了10ms

void

update(struct

tm

*t)

{

(*t).hscd++

//10ms单位时间加1

cnt++

if

((*t).hscd==100)

//计时满1s,进位

{

(*t).hscd=0

(*t).seconds++

}

if

((*t).seconds==60)

//计时满一分,进位

{

(*t).seconds=0

(*t).minutes++

}

if

((*t).minutes==60)

//计时满一小时,进位

{

(*t).minutes=0

(*t).hours++

}

if((*t).hours==24)

(*t).hours=0

//delay()

sleep(10)

//sleep是windows提供的函数,作用是暂停程序,单位毫秒,所以此处暂停10ms

}

void

display(struct

tm

*t)

{

//此处输出计时结果,\r为回车不换行,既一直在同一行更新时间

printf("%d:",(*t).hours)

printf("%d:",(*t).minutes)

printf("%d:",(*t).seconds)

printf("%d\r",(*t).hscd)

//printf("now,

press

‘e’

key

to

stop

the

clock…")

}

void

time_init()

//初始化时间

{

time.hours=time.minutes=time.seconds=time.hscd=0

}

void

get_total()

//计算总时间

{

total.hscd

=

cnt

%

100

cnt

/=

100

total.seconds

=

cnt

%

60

cnt

/=

60

total.minutes

=

cnt

%

60

cnt

/=

60

total.hours

=

cnt

}

int

main()

{

char

m

time_init()

cnt

=

0

fout

=

fopen("timeout.txt","w")

printf("按回车键开始计时!\n")

while(1)

{

m

=

getch()

if(m

!=

‘\r’)

//读入一个输入,如果是回车,那么跳出次循环

printf("输入错误,仅能输入回车键!\n")

else

break

}

printf("已经开始计时,但是你可以按回车键以分段计时!\n")

while(1)

{

if(kbhit())

//此处检查是否有键盘输入

{

m=getch()

if(m

==

‘\r’)

//如果等于回车,那么计时结束,跳出循环

break

else

if(m

==

‘)

//如果等于空格,显示此次计时,初始化计时器

{

tmp

=

time

//记录上一段计时器结果

fprintf(fout,"%d:%d:%d:%d\n",tmp.hours,tmp.minutes,tmp.seconds,tmp.hscd)

//写入文件

time_init()

printf("\n")

}

else

{

printf("输入错误,仅支持输入回车键或者空格键!\n")

}

}

update(&time)

//更新计时器

display(&time)

//显示计时器时间

}

tmp

=

time

//输出最后一次即使结果,写入文件

fprintf(fout,"%d:%d:%d:%d\n",tmp.hours,tmp.minutes,tmp.seconds,tmp.hscd)

get_total()

//计算总的时间,显示,并写入文件

printf("\n总时间:%d:%d:%d:%d\n",total.hours,total.minutes,total.seconds,total.hscd)

fprintf(fout,"统计时间:%d:%d:%d:%d\n",total.hours,total.minutes,total.seconds,total.hscd)

fclose(fout)

printf("已经保存到当前目录下的timeout.txt文件中按任意键结束!")

getch()

}


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

原文地址:https://54852.com/yw/11567970.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存