Как запретить Numba распараллеливать конкретный l oop, когда используется parallel = True? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть такой тестовый код:

import numpy as np
from numba import njit, prange
import random


def func():
    a = np.empty(0)
    for i in range(10):
        b = np.arange(np.random.randint(10))
        a = np.concatenate((a, b))
        print(len(b), ' / ', len(a))


func()

Он работает, как ожидалось:

3  /  3
6  /  9
5  /  14
8  /  22
9  /  31
6  /  37
9  /  46
5  /  51
3  /  54
9  /  63

Если я скомпилирую с Numba, добавив декоратор @njit(parallel=True), он перестанет работать, потому что Numba распараллеливает этот l oop, что вызывает проблемы:

2  /  0
1  /  0
2  /  0
7  /  0
0  /  0
3  /  0
2  /  0
5  /  0
7  /  0
2  /  0

В моем реальном коде в этой функции есть еще l oop, который использует prange, поэтому я хочу, чтобы parallel = True для всей функции. Но я не хочу этого для этого l oop.

Как этого избежать?

1 Ответ

0 голосов
/ 18 июля 2020

Я закончил тем, что отделил эту часть кода от функции @njit 'ed, которая имела parallel=True, и в этой функции, которая была исключена, я использовал @njit, но оставил parallel=False

Это помогло мне.

...