双精度浮点计算在GPU高性能计算中的重要性我就不说了。这个不是可以有,是必须有。
CUDA在GPU计算可以说是风头尽显,全世界有200多所大学在教CUDA。遗憾的是CUDA是NVIDIA的显示卡的专利,别人不可以。随着微软DX11的推出,去年AMD推出了支持DX11 ComputeShader5 的ATI5000系列显卡。随后NVIDIA也推出了支持DX11的480/470系列显卡。微软据说也计划将GPU计算命名为Direct Compute。尝试ATI GPU计算的念头冒了出来,说干就干,于是就开始了下面的尝试之旅。DX11需要Win7,首先弄了个AMD955的机子,显示卡用的ATI5750,Win7 装好,一切正常。接下来安装了DX11 SDK,使用Compute Shader 5做了一些实验,貌似一切正常。后来发现不能进行双精度浮点运算,一查资料,ATI5750不支持双精度浮点运算。没办法,又弄来一块 ATI的5850,重复上述实验,问题又出现了。先是有双精度计算的表达式的HLSL语句里面如果有除法,编译的时候就被明确告知双精度不能进行除法计算,我晕,没有除法那还叫双精度计算了?更离奇的还在后面,
double x= Buffer0[DTid.x].x;
double y= Buffer0[DTid.x].y;
BufferOut[DTid.x].lon = x*0.01745329251994;
BufferOut[DTid.x].lat = y*0.01745329251994;
x、y无论是什么值,BufferOut里面输出结果一律是0,如果
float x;
float y;
就能得到正确的结果,这不就是说根本就不支持双精度浮点运算么?看起来这是DX11 ComputeShader5的问题,HLSL语言的问题,这帐不应该记在AMD头上吧?或者说ComputeShader5不完善,有待进一步发展吧。等微软继续完善Direct Compute还是随大流上CUDA? 如果是你,你怎么选?大家多发点意见。同时征询有关DirectX、GPU计算以及相关硬件、软件方面信息,来者有分。另:http://topic.csdn.net/u/20100407/03/1c246b75-45d7-4ddc-9243-c67f58768571.html 这个麻烦哪位帮我顶上来,我连续回了3次不让回了,没几个人回的200分的贴呢,有分奖励。 呵呵 :)

解决方案 »

  1.   

    除法是非常费资源的,一个除法可能顶n个乘法,这个可能就是不能把,显卡要的是速度。dx11太新了,问题多吧。
      

  2.   

    或许是因为刚刚推出来,不成熟。ComputerShader也是刚刚出来。
      

  3.   

    哪位有关于Direct Compute双精度浮点运算的相关信息啊。 这贴就这么水了。
      

  4.   

    我觉得有可能是ATI显卡的问题。
    我看网上说HD5000系列不是针对DX11设计的显卡,Geforce400系列才是。
    DX11是微软发明的,AMD和NVIDIA是根据微软设计的API来设计硬件,所以问题不会出在微软的DX11身上吧。
      

  5.   

    HD5000比Geforce400早上市半年之久,原因就是AMD没有针对DX11设计硬件电路,而是在上一代DX10显卡的架构上添加了对DX11指令集的支持而已,纯粹是软件支持,而非硬件支持。