假设我有一个要在 GPU 上实现的算法。该算法由一个主循环组成,循环的所有迭代都可以并行运行。此外,循环的每次迭代都有一个内部循环,其迭代可以并行运行。假设我需要N主循环的M迭代和内循环的迭代(每次主循环迭代),并且我的 GPU 有L内核。
如果N+N*M <= L,我可以并行运行所有内容。但如果不是这种情况,我需要决定按顺序运行什么。我应该如何做出这个决定?例如,如果N=10, M=5, L = 20, 我应该什么时候选择这些选项(或任何其他选项)?:
- 并行运行所有主迭代,并按顺序运行所有内部循环。
- 依次运行所有主迭代,并并行运行所有内部循环。
- 并行运行所有主要迭代,其中两个并行运行,其余的按顺序运行。
- 并行运行三个主迭代,并行运行它们的每个内部循环,依次运行其余的主迭代及其内部循环。