от
Это дополнение к моему предыдущему вопросу: Я пытаюсь использовать Numba и ДАСК, чтобы ускорить медленный вычисления, аналогичные вычисления оценки плотности ядра огромная коллекция очков. Мой план состоял в том, чтобы написать невыгодно логики в функции
jit
ed, а затем разделить работу среди ядер процессора, используя
dask
. Я хотел использовать функцию
nogil
функции
numba.jit
так что я мог бы использовать
dask
резьбонарезной сервере, поэтому, чтобы избежать ненужных копий памяти входных данных (которые очень большие). Получается, что часть проблемы связана с распаковка аргументов в функции
jit
ed. Однако, даже при том, что я вижу практически никаких ускорения следующего кода:
import os
import time
import numpy as np
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed
from numba import njit, jit

CPU_COUNT = os.cpu_count()
print("CPU_COUNT", CPU_COUNT)

def PE(pool, func, args):
    with pool(max_workers=CPU_COUNT) as exc:
        fut = {exc.submit(func, *arg): i for i, arg in enumerate(args)}
        for f in as_completed(fut):
            f.result()

def render(params, mag):
    """Render gaussian peaks in small windows"""

    radius = 3

    for i in range(len(params)):
        y0 = params[i, 0] * mag
        x0 = params[i, 1] * mag
        sy = params[i, 2] * mag
        sx = params[i, 3] * mag

        # calculate the render window size
        wy = int(sy * radius * 2.0)
        wx = int(sx * radius * 2.0)

        # calculate the area in the image
        ystart = int(np.rint(y0)) 

На Мои 8 ядер Макбук я получаю скорость около 2х

Single time:
1.6 s ± 153 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Linear time:
CPU times: user 11.8 s, sys: 43.1 ms, total: 11.9 s
Wall time: 11.9 s

Threads time:
CPU times: user 45.4 s, sys: 125 ms, total: 45.5 s
Wall time: 6.29 s
На мои 24 поле ядра Windows я получаю скорость до 1Х:
Single time:
1.91 s ± 105 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Linear time:
Wall time: 1min 30s

Threads time:
Wall time: 1min 4s

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...