0
我有一个几年前编写的项目,它可以在单个CPU内核上计算N行相似的任务。执行高分支发散任务的最佳策略
这N个任务是完全独立的,所以它们可以并行计算。
但是,这些任务的问题在于每个任务内部的控制流程与其他任务之间存在很大差异,因此在CUDA中实施的SIMT方法将更有可能阻碍帮助。
我想出了一个想法,在每个线程中启动N个线程来打破线程的warp依赖关系。
任何人都可以提出一个更好的方法来优化这种情况下的计算,或指出我的解决方案可能的陷阱。
我相信不可能在没有更多细节的情况下回答这个问题。正如你可能知道的那样,当一个warp中的所有线程都不遵循通过一个分支的相同路径时,分支只是有问题的。所以,我会说:试着组织你的任务,使统计上所有具有相同控制流程的人都遵循相同的路径,如果可能的话。 – JackOLantern
我认为如果至少一个线程遵循与其他线程不同的路径,则分支是有问题的,因为它们都必须等待这个特定的线程才能继续执行下一个常用命令。在最糟糕的情况下,单个warp中的32个线程将相互等待并连续执行,这意味着32x会减慢速度。我错了吗? – NAlexN
你说得对。请注意,我上面的评论与您的评论并不矛盾。我只是说:组织你的任务,以最大化一个变形沿着通过分支的相同路径的可能性。没有任何进一步的信息,我不能说更好的。我可以建议的另一件事是,如果可能的话,通过避免控制流来彻底改写您的问题(可能忽略您的旧版软件)。最后,尝试改进您的问题,使其更具体,提及您重新面临的具体问题,发布一个示例或更好的小瓶颈复制器。 – JackOLantern