- 论坛徽章:
- 0
|
本帖最后由 沿河歌唱 于 2012-02-18 20:23 编辑
我们公司目前的主要开发的方向就是地质勘探的三维可视化,
另外还要用到射线追踪模拟地震波在不均匀介质中的折射反射,找到地震波的真实反射位置.
这样我们就能构造出地下的地层分布,并根据这些信息,找到有利于油气生成和存储的位置。
对于三维可视化,我们公司打算用OpenCL来做体绘制,如果要让一块三维区域的地质构造直观的显示出来
我们不但要显示这个三维区域的介质速度分布,还要显示很多地层,比如说白垩纪的地层,
所以就必须使得这个三维区域里面介质速度的分布是以一定的透明度来显示,
我们透过这个三维区域,还能看到内部的地层曲面如何分布断裂.
公司原先传统的三维显示(仅仅绘制二维表面或者切片,没有涉及体绘制)的做法是在CPU上做射线追踪计算,
目前CPU射线追踪的效果是差强人意的,勉强能达到实时的三维显示.
如果要达到目前三维体绘制,描绘透明的物体,CPU计算是根本不能实现实时绘制的。
因为他们的运算的区别要差一个数量级(二维与三维的区别)。
比如说之前仅仅绘制三维物体的表面,需要半秒钟,
如果要把三维物体的内部绘制出来,那就需要几分钟。
这样的显示速度是无法忍受的。
我们目前正在把三维体透视算法移植到GPU上,
GPU对于这种高度并行化的算法是非常适用的.对于具体的GPU计算的框架的选择,
目前主要有nVidia主导的Cuda(粗大)和Apple主导并建立的行业标准OpenCL,
虽然现在GPU高性能通用计算方面,nVidia的显卡稍占上风,
但是我们选择了OpenCL而不是Cuda,因为OpenCL更加开放和透明,更有扩展性。
而Cuda仅仅是nVidia平台上的接口,对于AMD显卡就不适用,
而且Cuda也不适用于非GPU多核计算领域
反过来, OpenCL不但支持nVidia,AMD等公司的显卡,
更是支持非独立显卡上的GPU的多核计算,比如说APU和甚至是同一平台上的其它CPU核心。
使用OpenCL作为GPU计算的框架,使程序的可扩展性和通用性大大提高。
目前一些比较先进的技术如Clang/LLVM对OpenCL的支持也是我们使用OpenCL的一个考虑因素。
因为我们公司的程序是跨平台的,目前主要的平台是在Windows和Linux,
但是潜在的目标平台也有Solaris等中型机小型机,他们也许没有显卡,
但是有更多的CPU核心,比如说几十个核。
而Clang/LLVM能够把OpenCL代码编译成为无显卡设备上的并行代码,
我们编写一次OpenCL代码,就能在不同构架的机器上执行。
这样我们的程序就更有通用性。
好了,写的差不多了。
|
|