微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

并行计算的性能低于 Python 中的无并行计算

如何解决并行计算的性能低于 Python 中的无并行计算

我只是写了一个例子来处理 Numba 上的列表和并行,如下面的 Parallel 和 No Parallel:

平行

@njit(parallel=True)
def evaluate():
  n = 1000000
  a = [0]*n
  sum = 0
  for i in prange(n):
    a[i] = i*i
  for i in prange(n):
    sum += a[i]
  return sum

没有平行

def evaluate2():
  n = 1000000
  a = [0]*n
  sum = 0
  for i in range(n):
    a[i] = i*i
  for i in range(n):
    sum += a[i]
  return sum

并比较评价时间

t.tic()
print(evaluate())
t.toc()

结果:333332833333500000 已用时间为 0.233338 秒。

t.tic()
print(evaluate2())
t.toc()

结果:333332833333500000 已用时间为 0.195136 秒。

Full code can get from Colab

解决方法

答案是操作次数还很少。当我将 n 更改为 100,000,000 时,性能发生了显着变化。

,

我还没有在 Numba 中尝试过。然而,当 CPU 用作非并行处理器而 GPU 用于并行处理时,这恰好发生在 Matlab 或其他编程语言中。处理小数据时,CPU处理速度超过GPU,并行计算无用。并行处理只有在处理数据大小超过一定值时才有效。有一些基准可以向您显示并行处理何时有效。我读过一些论文,他们在代码中放置了开关,以便在处理过程中在 CPU 和 GPU 之间进行选择。用一个大数组尝试相同的代码并比较结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。