有人用过2块显卡做cudacuda与opencl渲染速度么

现在的时间是
所有显示的时间是 UTC+08:00
OOo,TeX,KO,ABI,GIMP,Picasa,ProE,QCAD,Inkscape,Kicad,Eagle
帖子: 3525
注册时间:
来自: 广西(桂)南宁(邕)
送出感谢:
接收感谢:
现在有“包括Cuda全内核”版的Blender 2.65下载了,windows版本。
Blender 2.65.10 - Fastest build: All CUDA kernels + OSL
Blender 2.61使用Nvidia显卡GPU的CUDA应用Cycles问题解决及渲染测试比较(附件:链接库)
我的电脑安装有 XP和Ubuntu双系统,两个系统中都有“绿色免安装解压缩即可用”的Blender 2.61,
近日尝试使用Cycles来渲染3D画面,用CPU则没事,一切正常;
调用GPU来渲染,在3D viewi视图中按F12黑屏,以Rendered预览也为黑屏。
在Windows XP(32位)运行的 Blender ,选择启用GPU时出现如下提示:
Error: CUDA device supported only with shader model 1.3 or up, found 1.1
在Ubuntu Linux 11.10(64位)运行的 Blender ,选择启用GPU时出现如下提示:
Error | CUDA nvcc compiler not found. Install CUDA toolkit in default location.
网上google搜索了一阵,发现外国友人已经找到解决方法,一试果然简便有效,总结如下:
(1)首先确认自己的Nvidia显卡不是太老太旧的,我的显卡是两三年前买的Geforce 210,还行;
(2)其次确认自己的Nvidia显卡驱动不是太老太旧的,因为旧版的驱动没有CUDA,新版才有。
自己到Nvidia官方网站下载相应芯片组最新的显卡驱动吧:
(3)关键:下载本教程提供的附件——cuda的lib库,x86(32位)或x64(64位),
cuba lib x86
(225.91 KiB) 下载 747 次
cuba lib x64
(169.3 KiB) 下载 263 次
解压缩后得到一个lib目录,里面有6个文件,分别是:
kernel_sm_10.cubin
kernel_sm_11.cubin
kernel_sm_12.cubin
kernel_sm_13.cubin
kernel_sm_20.cubin
kernel_sm_21.cubin
其中13、20、21这三个文件在Blender默认的2.61版已经有了,而且版本更新不用替换,
只需把2.61版里缺少的10、11、12这三个文件复制过去即可,复制到的相应目录是:
在Windows XP(32位): blender-2.61-release-windows32\2.61\scripts\addons\cycles\lib
Ubuntu Linux 11.10(64位):
blender-2.61-linux-glibc27-x86_64/2.61/scripts/addons/cycles/lib
提示:这几个文件对2.62版的blender没有用(详见第10楼的跟帖)。
(4)OK啦!没事了!
这样不需要再按提示“安装 CUDA toolkit ”,也可以使用Nvidia显卡GPU的CUDA应用Cycles渲染了。
渲染步骤如下:
删除多余的物体:
(1)启动Blender => 默认已经有 Cube 立方体 => X 删除  => 点击确认;
(2)鼠标右键点击 Lamp 灯 => X 删除  => 点击确认;
添加猴脸和地板:
(3)游标在原点 => Shift A 添加 => Mesh 网格物体 => Plane 平面 => S 5 缩放5倍大;
(4)游标在原点 => Shift A 添加 => Mesh 网格物体 => Monkey 猴脸 => G Z 1 向上移动1个单位 => 点击左边工具栏Shading明暗法下的Smooth平滑(可以看到,猴脸变得光滑了);
修改渲染引擎和预览方式:
(5)点击上方默认是Blender Render的下拉菜单按钮,改选为Cycles Render(可以看到,整个场景变得白了一些);
(6)点击下方默认是Solid实体的下拉菜单按钮,改选为Rendered已渲染(可以看到,整个场景变得很暗);
添加一个平面光源:
(7)Shift A 添加 => Mesh 网格物体 => Plane 平面 => G Z 4 向上移动4个单位 => G X 3 水平向右移动3个单位 => R Y 45 沿着Y轴旋转45度;
(8)点击右边特性编辑器的Material材质(原子能)标签页 => 点击“+ New”按钮 => 注意:如果没有执行第(6)步,显示的情况会不一样;
(9)点击默认是Diffuse BSDF的下拉菜单按钮,改选为Emission(可以看到,平面光源亮了起来,照在猴脸上,单仍很暗);
(10)点击默认是白色的色彩条,选择一个你喜欢的颜色,我这里选择的是暗红色:R 0.800 G 0.500 B 0.500 A 1.00
(11)点击默认是1.000的灯光强度,修改为20(可以看到,猴脸被照亮了很多,3D视图的预览画面呈磨砂状逐渐清晰);
修改渲染设置:
(12)点击右边特性编辑器的Render渲染(照相机)标签页 => Render渲染栏目 => 点击Feature Set: 功能设置默认是Supported支持的下拉菜单,改选为Experimental实验性(可以看到,3D视图的预览画面又一次刷新,呈磨砂状逐渐清晰);
(13)点击下方Device设备默认是CPU中央处理器的下拉菜单,改选为GPU图形处理器(这时,下方多出了一行GPU Type类型,默认已经是CUDA)(3D视图的预览画面又一次刷新,速度比使用CPU快了一些);提示:2.62版的blender默认没有GPU或CPU的选项,需要按快捷键Ctrl Alt U,弹出用户自定义界面,然后在system标签页里左下角的“Compute Device”,默认是none,即用的是cpu,改选为CUDA(或OpenCL),这样就有CPU和GPU Compute选项了。
修改精细度设置:
(14)点击下方的Dimensions尺寸栏目 => Resolution分辨率的默认设置为 X :1920
Y :1080 50%(缩放),暂时不改变;
(15)点击展开下方的Integrator集成栏目 => 其中的Samples采样率的默认设置为 Render渲染 : 10
Preview预览 : 10,暂时不改变。
测试渲染:
(16)把鼠标放回3D viewi视图里 => F12 渲染静态图片(可以看到,渲染的过程中,左上角有进度提示,渲染结束后,左上角有所耗费的时间显示。)
(17)渲染完成后 => F3 保存图片 => F11 或者 Esc 可以退出目前所处的UV图像编辑器,回到3D View视图编辑器
下面是我的电脑的硬件配置、渲染条件设置、操作系统、渲染耗时统计:
家用电脑的硬件配置
CPU—— AMD Athlon(tm) 64 X2 Dual Core Processor 3800+
主板——捷波悍马H1
内存——黑金刚 DDR II 667 2G
显卡——华硕 Geforce 210 显存 128 DDR III
硬盘——西数250G SATA II
渲染条件设置、操作系统
及 耗时统计
Resolution分辨率的默认设置为 X :1920
Y :1080 50%
Samples采样率的默认设置为 Render渲染 : 10
Preview预览 : 10
Ubuntu Linux 64位: —— CPU 耗时 08.89 秒 —— GPU 耗时 07.20 秒 —— 速度提升 19%
Windows XP 32位:—— CPU 耗时 14.36 秒 —— GPU 耗时 07.04 秒 —— 速度提升 51%
Resolution分辨率的默认设置为 X :1920
Y :1080 100%
Samples采样率的默认设置为 Render渲染 : 100
Preview预览 : 10
Ubuntu Linux 64位: —— CPU 耗时 6 分 46.67 秒 —— GPU 耗时 5 分 38.63 秒 —— 速度提升 16.7%
Windows XP 32位:—— CPU 耗时 9 分 04.36 秒 —— GPU 耗时 4 分 58.82 秒 —— 速度提升 45%
      
帖子: 590
注册时间:
来自: 天朝
送出感谢:
接收感谢:
唉,我的N卡都快四年前的货了,不支持CUDA
怎么XP下面速度提升那么明显
我是一只菜鸟。。。
帖子: 3525
注册时间:
来自: 广西(桂)南宁(邕)
送出感谢:
接收感谢:
myewmyew 写了:唉,我的N卡都快四年前的货了,不支持CUDA
怎么XP下面速度提升那么明显
我的N卡也是3年前的货呀,有GPU,升级驱动程序就支持CUDA了。
XP速度提升明显,说明了3个问题:
(1)64位的CPU在64位的系统上运行64位的软件,确实效率提高很多;
(2)如果撇开64位的因素,我没有在32位Linux上测试,但也可看到XP系统占用CPU资源太多太厉害了,CPU能用在软件上的资源很少,所以XP仅用CPU渲染时,特别的慢;
(3)安装了支持GPU的CUDA算法的显卡驱动后,XP 32位反而比Linux 64位快了,这也许是因为我在Ubuntu Linux下使用的是默认的驱动,没有手工下载安装Nvidia官方最新版的Linux显卡驱动,也许是这个问题,默认的Linux显卡驱动不够好。
      
注册时间:
送出感谢:
接收感谢:
无论是ubuntu 64位还是win7 64位,用gpu渲染都会出现“Error: CUDA device supported only with shader model 1.3 or up, found 1.1”
都放了你提供的64位的lib
cpu渲染就正常
帖子: 3525
注册时间:
来自: 广西(桂)南宁(邕)
送出感谢:
接收感谢:
cenjianneng 写了:无论是ubuntu 64位还是win7 64位,用gpu渲染都会出现“Error: CUDA device supported only with shader model 1.3 or up, found 1.1”
都放了你提供的64位的lib
cpu渲染就正常
下载使用最新版的blender 2.62吧,不需要复制那些lib文件也可以正常使用Cycles渲染了。
而且,也没有了GPU或CPU的选项了,
而且选择Supported支持来渲染,或者选择Experimental实验性渲染,所需的时间都一样。
也许是新版2.62的Blender选择使用Cycles渲染时默认就使用GPU了。
      
帖子: 3525
注册时间:
来自: 广西(桂)南宁(邕)
送出感谢:
接收感谢:
cenjianneng 写了:无论是ubuntu 64位还是win7 64位,用gpu渲染都会出现“Error: CUDA device supported only with shader model 1.3 or up, found 1.1”
都放了你提供的64位的lib
cpu渲染就正常
有可能是三个问题引起:
一是显卡驱动没安装好;二是显卡本身不支持;三也许是64位的系统却下载错用了32位的Blender ?
      
注册时间:
送出感谢:
接收感谢:
A心配N卡?
难怪要出问题了
Blender 2.6支持A卡硬渲染
注册时间:
送出感谢:
接收感谢:
yq-ysy 写了:
下载使用最新版的blender 2.62吧,不需要复制那些lib文件也可以正常使用Cycles渲染了。
而且,也没有了GPU或CPU的选项了,
而且选择Supported支持来渲染,或者选择Experimental实验性渲染,所需的时间都一样。
也许是新版2.62的Blender选择使用Cycles渲染时默认就使用GPU了。
yq-ysy 写了:
有可能是三个问题引起:
一是显卡驱动没安装好;二是显卡本身不支持;三也许是64位的系统却下载错用了32位的Blender ?
用2.61 64位版,加lib库后,选gpu或者cpu都是可以的。
用2.62 64位版,加lib库(不加都试过),2.62不是没有gpu/cpu选项,是按ctrl+alt+u,弹出用户界面,然后在system选项页那里的左下角有个“Compute Device”,默认是none,即用的是cpu,后面有CUDA和OpenCL选项的!!
选了了之后就有gpu/cpu选项了,反正我是gpu/cpu和Supported/Experimental都互相搭配过,用gpu是黑屏的。
显卡9800GT,驱动是285.62 for win7 x64,玩战地3的时候特意去更新驱动的
23:42,总共编辑 1 次。
注册时间:
送出感谢:
接收感谢:
ubuntu里就没试过2.61,用的是2.62 64版
我还特别去nvidia官网下载CUDA toolkit 4.1 for ubuntu11.04,加lib后,2.62还是不能用gpu
帖子: 3525
注册时间:
来自: 广西(桂)南宁(邕)
送出感谢:
接收感谢:
cenjianneng 写了:用2.61 64位版,加lib库后,选gpu或者cpu都是可以的。
用2.62 64位版,加lib库(不加都试过),2.62不是没有gpu/cpu选项,是按ctrl+alt+u,弹出用户界面,然后在system选项页那里的左下角有个“Compute Device”,默认是none,即用的是cpu,后面有CUDA和OpenCL选项的!!
选了了之后就有gpu/cpu选项了,反正我是gpu/cpu和Supported/Experimental都互相搭配过,用gpu是黑屏的。
显卡9800GT,驱动是285.62 for win7 x64,玩战地3的时候特意去更新驱动的
原来如此,需要在那个地方改为CUDA或OpenCL才能选取GPU,谢谢提醒。
另外,我也发现,我的2.62版Blender也没法使用GPU渲染了,
没有复制lib文件之前,出现的错误提示是:Error: CUDA device supported only with shader model 1.3 or up, found 1.1
在复制lib文件之后,出现的错误提示是:CUDA error: Invalid value in cuMemcpyHtoD(mem, host, size)
上网google搜了一下,找到一篇国外的帖子,也问到为什么2.61版能用Cycles到了2.62版就不行:
这问题得到专家解答:结果太不幸了,你我都得换新显卡才行!
Blender官方的wiki说了: We support graphics cards starting from GTX 2xx (shader model 1.3), however it is recommended to use a GTX 4xx or GTX 5xx card (shader model 2.x),
至少要GTX 2xx 以上的Nvidia显卡,才能支持CUDA 1.3版的显影模式;
推荐要GTX 4xx 或者 GTX 5xx以上的Nvidia显卡,才能支持CUDA 2.x版的显影模式;
比这些更早期的旧显卡,即使支持,也会比CPU渲染还慢。
很不幸,我的GeForce 210已经算太老了,在2.61版能用也许是因为2.61版的Blender刚刚加入Cycles,还在实验使用着CUDA 1.1版的显影模式,所以加入了kernel_sm_11.cubin这个文件后就能用了;到了2.62版就只用CUDA 1.3版及以上的CUDA 2.x版显影模式了,所以到了现在2.62版连我的显卡也没用了。——你的显卡9800GT比我更早,更不用说了……节哀……顺便去买新显卡吧!
另附:《Nvidia官网各型号显卡支持的CUDA 显影模式版本对照表》
只能先看这表,再看价格,掂量着口袋里的银子,再决定买什么型号的显卡。
      
注册时间:
送出感谢:
接收感谢:
yq-ysy 写了:cenjianneng 写了:用2.61 64位版,加lib库后,选gpu或者cpu都是可以的。
用2.62 64位版,加lib库(不加都试过),2.62不是没有gpu/cpu选项,是按ctrl+alt+u,弹出用户界面,然后在system选项页那里的左下角有个“Compute Device”,默认是none,即用的是cpu,后面有CUDA和OpenCL选项的!!
选了了之后就有gpu/cpu选项了,反正我是gpu/cpu和Supported/Experimental都互相搭配过,用gpu是黑屏的。
显卡9800GT,驱动是285.62 for win7 x64,玩战地3的时候特意去更新驱动的
原来如此,需要在那个地方改为CUDA或OpenCL才能选取GPU,谢谢提醒。
另外,我也发现,我的2.62版Blender也没法使用GPU渲染了,
没有复制lib文件之前,出现的错误提示是:Error: CUDA device supported only with shader model 1.3 or up, found 1.1
在复制lib文件之后,出现的错误提示是:CUDA error: Invalid value in cuMemcpyHtoD(mem, host, size)
上网google搜了一下,找到一篇国外的帖子,也问到为什么2.61版能用Cycles到了2.62版就不行:
这问题得到专家解答:结果太不幸了,你我都得换新显卡才行!
Blender官方的wiki说了: We support graphics cards starting from GTX 2xx (shader model 1.3), however it is recommended to use a GTX 4xx or GTX 5xx card (shader model 2.x),
至少要GTX 2xx 以上的Nvidia显卡,才能支持CUDA 1.3版的显影模式;
推荐要GTX 4xx 或者 GTX 5xx以上的Nvidia显卡,才能支持CUDA 2.x版的显影模式;
比这些更早期的旧显卡,即使支持,也会比CPU渲染还慢。
很不幸,我的GeForce 210已经算太老了,在2.61版能用也许是因为2.61版的Blender刚刚加入Cycles,还在实验使用着CUDA 1.1版的显影模式,所以加入了kernel_sm_11.cubin这个文件后就能用了;到了2.62版就只用CUDA 1.3版及以上的CUDA 2.x版显影模式了,所以到了现在2.62版连我的显卡也没用了。——你的显卡9800GT比我更早,更不用说了……节哀……顺便去买新显卡吧!
另附:《Nvidia官网各型号显卡支持的CUDA 显影模式版本对照表》
只能先看这表,再看价格,掂量着口袋里的银子,再决定买什么型号的显卡。
不再对旧版cuda支持有点可惜了,再来就是2.62和2.61的Cycles效能相差大吗?
如果不大,没理由不再支持旧版cuda的
帖子: 3525
注册时间:
来自: 广西(桂)南宁(邕)
送出感谢:
接收感谢:
cenjianneng 写了:不再对旧版cuda支持有点可惜了,再来就是2.62和2.61的Cycles效能相差大吗?
如果不大,没理由不再支持旧版cuda的
从“学习Cycles”的角度上来说,不支持1.1版的CUDA确实有点可惜,因为很多学生还买不起近千元的新显卡。
但是从“实际应用”的角度上来说,真的是留着1.1版一点用处都没有,因为现在要渲染动画,都是高清的,版本越先进速度就越快,如果每渲染一帧能加速10秒,渲染一部完整的90分钟动画电影13万5千帧,就是节省了135万秒!(375个小时,即15天!)虽然我也没钱买新网卡测试,但觉得,渲染一帧高清,2.0版的CUDA应该比1.1版快不止10秒。
      
注册时间:
送出感谢:
接收感谢:
不知道是不是因为自己网速慢 ,楼主的附件始终没速度, 请楼主把x86的库文件发我邮箱好吗
帖子: 3525
注册时间:
来自: 广西(桂)南宁(邕)
送出感谢:
接收感谢:
quyitquyit 写了:不知道是不是因为自己网速慢 ,楼主的附件始终没速度, 请楼主把x86的库文件发我邮箱好吗
已经发送到你的信箱。不过这些lib库在2.63a版上还是用不了,只能在2.61版渲染了。
      
帖子: 1436
注册时间:
送出感谢:
接收感谢:
你好。我是blender 2.6.3,nvidia gt240M,安装了 cuda toolkit 4.0
跑的时候发现
CUDA device supported only with compute capability 1.3 or up, found 1.2.
有用Telegram的吗?
欢迎加入公共群组:
显示: 全部帖子1天7天2周1个月3个月6个月1年
排序: 作者发表时间标题
排序方向: 升序降序下次自动登录
现在的位置:
& 综合 & 正文
想想学习CUDA的时间也应该有十来天了,也该是做一个小总结了,说说我理解的CUDA,它到底是什么东西?
其实说到CUDA,还真的没几个人知道,说实话,我也听说不久,主要因为它2007年才刚发布,也是这几年才刚兴起,国内那就更慢了。
CUDA它中文的名字是统一计算设备架构,CUDA是一种将GPU作为数据并行计算设备,听到并行这个名称,我相信很多热爱计算机的朋友就特别兴奋,因为这意味着速度会很快,确实,CUDA就是为了提高计算速度的一个计算机架构。
要理解CUDA,就先理解一个基本概念:GPU是图形处理单元 (Graphic Processing Unit) 的简称,最初主要用于图形渲染。 由于GPU 拥有比CPU 更强的计算能力,很早就有人想到将GPU 应用到通用计算上,这就是GPGPU,所谓GPGPU 是指直接使用了图形学的API,将任务映射成纹理的渲染过程,使用汇编或者高级着色器语言Cg,HLSL 等编写程序,然后通过图形学API 执行(Direct3D和OpenGL),这样的开发不仅难度较大,而且难以优化,对开发人员的要求非常高,因此,传统的GPGPU 计算并没有广泛应用。
2007 年6 月,NVIDIA 公司推出了CUDA (Compute Unified Device Architecture) , CUDA 不需要借助图形学API,而是采用了类C 语言(CUDA C)进行开发。
由于CUDA使用的是类C语言(CUDA C)语言开发,因此对于对C语言有所理解的程序员都可以开发,因此它得到很大的广泛应用。
其实CUDA有很多用途,因为它有并行计算的能力,因此只要有并行计算的地方就可以用它,就像在OpenGL或者是D3D中都可以用CUDA来进行计算的加速,众所周知,在图形学中很多操作都是用矩阵来进行运算,所以在OpenGL中就可以加入CUDA的架构,其实CUDA两个是独立的架构,用CUDA只是用来并行运算,当把数据处理完了之后就要返回到OpenGL中进行渲染,当然CUDA的用途不仅如此,它还有更高级的用途。
今天我就来讲讲有关于CUDA的编程模型:
1.主机和设备
CUDA 编程模型将CPU作为主机(Host),GPU作为协处理器或者设备(Device),在一个系统中可以存在一个主机和若干个设备。
在这个模型中,CPU与CPU协同工作,各司其职。CPU负责进行逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务。CPU、GPU各自拥有相互独立的存储器地址空间:主机端的内存和设备端的显存。
一旦确定了程序的并行部分,就可以考虑把这部分计算工作交给GPU。
能够使用GPU计算的程序必须具有以下特点:需要处理的数据量比较大,数据以数组或矩阵形式有序存储,并且对这些数据要进行的处理方式基本相同,各个数据之间的依赖性或者说耦合很小,需要复杂数据结构的计算如树,图等,则不适用于使用GPU进行计算。找到程序中满足这些要求的部分后,就能将该部分程序移植GPU上。运行在GPU上的程序被称为内核(Kernel)。内核并不是完整的程序,只是整个程序中的一个可以使用数据并行处理的步骤。一个完整的程序由若干个内核函数以及CPU上的串行处理共同组成。一个完整的程序的计算流程如下所示:
2. 线程结构
内核以线程网格(Grid)的形式组织,每个线程网格由若干个线程块(block)组成,而每个线程块又由若干个线程(thread)组成。实质上,内核(kernel)是以block为单位执行的,CUDA引入grid只是用来表示一系列可以被并行执行的block的集合,各block的集合。各block是并行执行的,block间无法通信,也没有执行顺序。
目前一个内核(kernel)函数中只有一个grid,而未来的支持DX11的硬件采用MIMD(多指令多数据)结构,允许一个kernel中存在多个不同的grid。(目前是使用SIMT(单指令多线程)。
为简便起见,threadIdx是一个有3个组件的向量,所以线程可以使用一维,二维,三维索引标识,形成一维,二维,三维的线程块。这提供了一种自然的方式来调用作用在域内元素上的计算,如向量,矩阵,体元(volume)(译者注:目前还没见过使用三维的,原因可能在于网格不支持三维)。
线程索引和线程ID直接相关:对于一维的块,它们相同;对于二维长度为(Dx,Dy)的块,线程索引为(x,y)的线程ID是(x+yDx);对于三维长度为(Dx,Dy,Dz)的块,索引为(x,y,z)的线程ID为(x+yDx+zDxDy)
实例代码:
// Kernel definition
__global__ void MatAdd(float A[N][N], float B[N][N], float C[N][N]){
int i = threadIdx.x;
int j = threadIdx.y;
C[i][j] = A[i][j] + B[i][j];
//host code
int main() {
// Kernel invocation with one block of N * N * 1 threads
int numBlocks = 1;
dim3 threadsPerBlock(N, N);
MatAdd&&&numBlocks, threadsPerBlock&&&(A, B, C);
今天我讲讲CUDA所用到的编译器nvcc:
?nvcc编译器根据配置编译CUDA C代码,可以生成三种不同的输出:PTX、CUDA二进制序列和标准C。
?nvcc可编译同时包含主机代码(在主机上执行的代码)和设备代码(在设备上执行的代码)的源文件。nvcc的基本流程包括分离主机和设备代码并将设备代码编译成汇编形式(PTX)或/和二进制形式(cubin对象)。生成的主机代码要么被输出为C代码供其它工具编译,要么在编译的最后阶段被nvcc调用主机编译器输出为目标代码。
?应用在运行时装载的任何PTX代码被设备驱动进一步编译成二进制代码。这称为即时编译。
?PTX类似于汇编语言,是为动态编译器JIT(即时编译)设计的输入指令序列。这样虽然不同的显卡使用的机器语言不同,JIT却可以运行同样的PTX。这样做使PTX成为一个稳定的接口,带来了很多好处:后向兼容性,更长的寿命,更好的可扩展性和更高的性能,但在一定程度上也限制了工程上的自由发挥。这种技术保证了兼容性,但也使新一代的产品必须拥有上代产品的所有能力,这样才能让今天的PTX代码在未来的系统仍然可以运行。 虽然PTX和JIT编译器提供了很高的性能,但也不是在所有场合都适用。某些独立的开发商倾向于牺牲性能,以获得更好的可确定性和可验证性。JIT编译器的输出会因为目标硬件和一些其他因素发生变化。
?编译的大概流程如下图:
一.纹理存储器介绍
纹理器(texture memory)是一种只读存储器,由GPU用于纹理渲染的的图形专用单元发展而来,因此也提供了一些特殊功能。纹理存储器中的数据位于显存,但可以通过纹理缓存加速读取。在纹理存储器中可以绑定的数据比在常量存储器可以声明的64K大很多,并且支持一维、二维或者三维纹理。在通用计算中,纹理存储器十分适合用于实现图像处理或查找表,并且对数据量较大时的随机数据访问或者非对齐访问也有良好的加速效果
纹理缓存有两个作用。首先,纹理缓存中的数据可以被重复利用,当一次访问需要的数据已经存在于纹理缓存中时,就可以避免对显存进行读取。数据重用过滤了一部分对显存的访问,节约了带宽,也不必按照显存对齐的要求读取。第二,纹理缓存可以缓存拾取坐标附近几个像元的数据,可以实现滤波模式,也能提高具有一定局部性的访问的效率。
纹理存储器是只读的,不需要关心缓存数据一致性问题。这意味着如果更改了绑定到纹理存储器的数据,纹理缓存中的数据可能并没有被更新,此时通过纹理拾取得到的数据可能是错误的。因此,在每次修改了绑定到纹理的数据以后,都需要对纹理进行重新绑定。由于不能从设备端修改CUDA数组,因此只有在对绑定到纹理的线性内存进行修改时才需要注意这一点。
二.纹理存储器的使用步骤:
声明CUDA数组,分配空间
声明CUDA数组之前,必须先以结构体channelDesc描述CUDA数组中的数据类型。
struct cudaChannelFormatDesc {
int x, y, z,
enum cudaChannelFormatK};
cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc(32, 0, 0, 0, cudaChannelFormatKindFloat);
cudaArray* cu_
cutilSafeCall( cudaMallocArray( &cu_array, &channelDesc, width, height ));
//为cu_array开辟空间
cutilSafeCall( cudaMemcpyToArray( cu_array, 0, 0, h_data, size, cudaMemcpyHostToDevice));
//复制到设备端的数组
声明纹理参照系
// declare texture reference for 2D float texture
声明纹理参照系
texture&float, 2, cudaReadModeElementType& tex;
设置运行时纹理参照系属性
tex.addressMode[0] = cudaAddressModeWrap;
//采用循环模式
tex.addressMode[1] = cudaAddressModeWrap;
//说明寻址模式
tex.filterMode = cudaFilterModeLinear;
//设置纹理的滤泼模式
tex.normalized = true;
// access with normalized texture coordinates设置是否对纹理坐标进行归一化
// Bind the array to the texture
//纹理绑定
cutilSafeCall( cudaBindTextureToArray( tex, cu_array, channelDesc));
g_odata[y*width + x] = tex2D(tex, tu, tv);
//纹理拾取
【上篇】【下篇】

我要回帖

更多关于 amd显卡怎么设置 的文章

 

随机推荐