0

该项目涉及使用 3D 网格(模板模拟)模拟的流体模拟。

在每一步中,我都从一个表面读取值,计算并保存到第二个表面。问题是,在每一步中,指向表面的指针都需要交换(在第一次迭代中,我想从第一个表面读取,写入到第二个,在第二次迭代中,我想从第二个表面读取,写入到第一个等等)。是否有可能以动态方式进行?现在我正在使用一些 if 子句。

例如,如果是 2D 模拟,我可以使用具有两层的 2DlayeredSurface,然后我可以指出要使用的表面,但不幸的是 3DlayeredSurface 不存在。

是否可以创建一个类型的数组,然后通过索引指向它?

4

1 回答 1

1

您不能按照您描述的方式进行操作,但是对于您所谈论的少量指令,预测效果很好。绑定两个表面,然后编写 if 语句以确定要读取/写入的表面。编译器将发出谓词指令,并且只有一个处于活动状态。

类似的策略用于在此文件中引用 >2^27 个纹理元素(通过预测读取最多 4 个纹理):https ://github.com/ArchaeaSoftware/cudahandbook/blob/master/texturing/tex1dfetch_big.cu

于 2013-01-31T01:55:56.450 回答