parallel-processing - 并行减少算法的时间复杂度
问题描述
目前我正在研究 GPU 架构及其概念。在并行缩减技术中,在下面的 NVIDIA 指南中,第 29 张幻灯片中显示的时间复杂度如何达到 O(N/P + log N)?我知道对于 N 个线程,它将是 O(log N)。如果我们有 P 个并行线程可用,那么时间复杂度应该是 O((N/P)*log P)。正确的?我在这里错在哪里?
解决方案
我想用一个例子来解释一下,考虑这个包含 N=8 个元素的数组
1 2 3 4 5 6 7 8
并行减少将在以下步骤中发生
1 2 3 4 5 6 7 8
3 7 11 15
10 26
36
如果计算归约操作的次数,我们在第一步、第二步和第三步分别有 4,2 和 1。所以我们的操作总数是 4+2+1=7=N-1 并且我们在 O(N) 中做了所有的减少,我们还有 log(8)=3(这是对基数为 2)步骤所以我们为执行这些步骤付出了代价,即 O(logN)。因此,如果我们使用单个线程以这种方式减少,我们将两个成本相加,因为它们彼此分开发生并且我们有 O(N+logN)。其中 O(N) 是执行所有操作的成本,O(logN) 是执行所有步骤的成本。现在没有办法并行化步骤的成本,因为它们必须按顺序发生。但是,我们可以使用多个线程来执行操作并将 O(N) 成本除以 O(N/P)。因此我们有
Total cost = O(N/P + logN)
推荐阅读
- docker - 如何将多个容器的卷挂载到新容器
- async-await - svelte:如何用 await 设置头部标题?
- android - 在样式 XML 文件中的 Flutter 项目中出现错误
- python - Python - 如何传递空白参数 - 有时我想要电子邮件的空白 cc
- azure-devops - Yaml-Pipeline 在每次提交时启动,即使它只应按计划触发
- javascript - 提交运行功能上的 Javascript 按钮
- angular - 规范文件中的 Angular 10 测试,看似随机的案例失败
- python - 为单个查询/连接设置 Hive 优先级
- css - Angular 字体真棒图标作为 css 中的内容呈现为框
- powershell - 使用 Powershell 使用用户 ID 和密码“Connect-PnPOnline”连接到 Sharepoint URL 而无需提示