Параллельный цикл для цикла медленнее, чем обычный цикл?

Если я попытаюсь распараллелить цикл for с dask, он будет выполняться медленнее, чем обычная версия. По сути, я просто следую вводному примеру из учебника по dask, но по какой-то причине это не удается с моей стороны. Что я делаю неправильно?

In [1]: import numpy as np
   ...: from dask import delayed, compute
   ...: import dask.multiprocessing

In [2]: a10e4 = np.random.rand(10000, 11).astype(np.float16)
   ...: b10e4 = np.random.rand(10000, 11).astype(np.float16)

In [3]: def subtract(a, b):
   ...:     return a - b

In [4]: %%timeit
   ...: results = [subtract(a10e4, b10e4[index]) for index in range(len(b10e4))]
1 loop, best of 3: 10.6 s per loop

In [5]: %%timeit
   ...: values = [delayed(subtract)(a10e4, b10e4[index]) for index in range(len(b10e4)) ]
   ...: resultsDask = compute(*values, get=dask.multiprocessing.get)
1 loop, best of 3: 14.4 s per loop

1 ответ

Решение

Два вопроса:

  1. Dask вводит около миллисекунды накладных расходов на задачу. Вы хотите, чтобы ваши вычисления занимали значительно больше времени.
  2. При использовании многопроцессорного планировщика данные сериализуются между процессами, что может быть довольно дорогим. См. http://dask.pydata.org/en/latest/setup.html
Другие вопросы по тегам