C OPETGL:我可以计算GPU中的正态吗?(cuda)



我正在尝试访问内核内部和下一个索引。

ex:int idx = blockIdx.x * blockdim.x threadiDx.x;

然后pos [idx] .x,pos [idx] .y,pos [idx] .z将给出一个点的当前坐标。但是无法访问其他两个。我正在尝试使用CUDA在GPU级别计算变化的三角形的正态。

在GPU上可以轻松地计算出正态取决于网格拓扑。

使用 Triangle-List Topology 计算网格的正态非常容易:使用每个三角形的一个GPU线程。这会导致高度定期的读写和写作,并将用于CUDA中块和线程的任何有效配置。不幸的是,三角列表拓扑不是很有用(对于初学者而言,除非采用了一些其他处理,否则它将是扁平的)。

使用> Triangle-Strip Topology (通常使用)来计算网格的正态非常困难。问题在于,顶点是在多个三角形中使用的,因此您必须通过组合多个三角差异来积累每个顶点正常的[加权]平均值。使用每个三角形的一个GPU线程意味着多个Vert-Norm将受到"同时"的多个GPU线程的影响。另外,使用每个顶点的一个GPU线程表示需要一个引用该顶点的三角形列表,然后需要读取三角形(对附加verts),以便可以计算Vert-norm...这很困难,但不是不可能的。

最后,如果您的模型使用索引顶点,这将施加其他[半随机]查找,这可能会导致问题。可以通过空间分区解决此问题。

您仍然可以执行IDX 1,IDX 2,GPU可以访问所有共享存储器

为了达到最佳效率,您必须对如何将作业分为块/线程等要谨慎,以便附近点的内存在同一核心上。

最新更新