首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设备中矩阵的依赖性

设备中矩阵的依赖性
EN

Stack Overflow用户
提问于 2013-05-17 15:12:05
回答 2查看 94关注 0票数 0

我必须计算矩阵的元素(参见下图中的6*8示例)。矩阵元素具有依赖性,因此必须首先计算t1的值,然后计算依赖于t1t2的值,而不是依赖于t2值的t3的值,依此类推。

如何计算CUDA中的矩阵元素?我应该只使用一个内核调用并在____syncthreads()的帮助下计算所有值,还是应该在单独的内核中计算次对角线中的矩阵元素?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-17 17:38:56

正如您所描述的,合理的方法是为计算的每个阶段启动一个单独的内核。在一个非平凡大小的问题中,“计算前沿”的大小将迅速增长,因此当解决方案在整个域中传播时,可以获得一定程度的计算效率。

“最好的”方法可能不是横跨整个领域,而是迭代地求解整个领域,直到解决方案收敛。Jeong and Whittaker发表了一篇非常好的论文,介绍了一种迭代标签校正方法,用于求解平稳的Eikonal方程(这是一种经典的迎风扫射计算,类似于您的矩阵图片)。在他们的方法中,计算网格被分解成块,包含未收敛的值的每个块都被重新计算,直到它收敛。当特征跨过子块边界时,依赖于改变的值的任何值都被重新标记为未收敛,并且该过程继续,直到整个域收敛。

你可以在Youtube上看到这个算法在CUDA GPU here上运行的视频

票数 1
EN

Stack Overflow用户

发布于 2013-05-17 19:47:18

您可以使用相同的内核计算t1值,然后根据t1计算t2值,依此类推。可以递归地调用这个内核,根据传递给它的一些参数对不同的值进行操作。

如果t1中的元素不相互依赖,那么就不需要在内核中使用__syncthreads(),因为在每次内核调用之后都会有一个隐式的屏障。

但是,如果它们是依赖的,则必须在内核调用中使用__syncthreads()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16603444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档