0

我只是写了一个在 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 秒。

完整代码可以从 Colab 获得

4

2 回答 2

1

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

于 2021-03-13T15:46:33.063 回答
0

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

于 2021-03-13T14:19:16.300 回答