Snowdream

I'm awake but my world is half asleep
posts - 403, comments - 310, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

DEBUG 记录 - SPEC2006 470.lbm

Posted on 2008-03-24 21:16 ZelluX 阅读(523) 评论(1)  编辑  收藏 所属分类: Laboratory
一个用Lattice Boltzmann Method模拟三维空间中不可压缩流体的程序,示意图见底部。
转这个程序实在是太耗体力了 -_-b

Brook本身的不少缺陷、bug,加上不习惯科学计算程序的代码风格,导致大多数时间都在fix bug。

其中de掉以后最有快感的一个bug:(只能这么形容了 >,<)

每个cell都有一个flag值,尽管类型是double,但是程序中是用一个MAGIC_CAST宏把它当作整型处理的。
初始情况,每个cell的flag都为~f,也就是一个1~28位都是1,29~32位为0的double型浮点。根据IEEE标准,应该是个NaN。
CPU上没有问题,放到GPU上问题就出来了,GPU不支持这种转型操作,在对这个double型进行运算操作的时候,所有结果都会变成NaN。

解决方法:
在把数据传给GPU之前可以先把这些flag值转换为GPU可以操作的double型,最简单的方法就是都先转成int(会有truncating),然后取反,再传给GPU。


what_you_compute.png

评论

# re: DEBUG 记录 - SPEC2006 470.lbm[未登录]  回复  更多评论   

2008-08-21 15:59 by NO
你好!
我也在转这个程序。
请问这个LBM程序,你是用的1个源cell算周围18个目标cell的参数,还是18源个cell算1个目标cell上的18个参数?

只有注册用户登录后才能发表评论。


网站导航: