【问题标题】:How to prevent Numba from parallelizing a particular loop when parallel=True is used?使用 parallel=True 时如何防止 Numba 并行化特定循环?
【发布时间】:2020-07-13 01:25:08
【问题描述】:

我有一个这样的测试代码:

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

如果我通过添加 @njit(parallel=True) 装饰器来使用 Numba 进行编译,它会停止工作,因为 Numba 会并行化这个导致问题的循环:

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

在我的真实代码中,此函数中还有另一个使用 prange 的循环,因此我希望在整个函数上使用 parallel=True。但我不想在这个循环中使用它。

如何预防?

【问题讨论】:

    标签: python python-3.x parallel-processing numba


    【解决方案1】:

    我最终将这部分代码从具有parallel=True 的@njit'ed 函数中拆分出来,在这个被分解的函数上,我使用了@njit,但留下了parallel=False

    这是为我做的。

    【讨论】:

    • 是的,我有同样的问题,但不知道如何告诉 Numba 如何不使特定循环并行。我想把它移到一个单独的函数中总是可以的,好主意。
    猜你喜欢
    • 2018-04-06
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2014-04-24
    相关资源
    最近更新 更多