python - 如何使用 Numba 并行化数组上的 for 循环

标签 python numpy parallel-processing numba numerical-methods

我正在尝试编写一个 Numba 函数,该函数使用 @numba.njit(parallel=True) 循环遍历列表(而不是范围)。 。例如,

import numpy as np
import numba

arr = np.ones(10)
idx = np.array([4, 2, 5])

@numba.njit(parallel=True)
def foo(arr, idx):
    for i in idx:
        arr[i] = 0
    return arr

foo(arr, idx)

我收到的警告是NumbaPerformanceWarning: The keyword argument 'parallel=True' was specified but no transformation for parallel execution was possible.我知道可以使用 numba.prange() 显式并行化类似的循环。 ,但我需要循环来遍历索引数组。这可能吗?如何实现?

最佳答案

for i in idx: ... 在语义上相当于:

for j in range(len(idx)):
    i = idx[j]
    [...]

第二个版本的性能可能略有不同。在第二个版本的基础上,您可以将 range 替换为 prange 并获得并行版本。

但是,请注意,如果 idx 的两个值相同,这将导致竞争条件。竞争条件会导致未定义的行为(基本上,任何事情都可能发生)。

关于python - 如何使用 Numba 并行化数组上的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76196730/

相关文章:

python - 基于示例的修补-如何计算轮廓和等值线的法线

haskell - Haskell 中多核编程的现状如何?

使用自定义 __setattr__ 和 __slots__ 进行 Python 属性查找

python - 有没有比列出目录中的所有文件更快的查找文件的方法?

python - Matplotlib:绘制数据然后进行时间序列预测

python - 如何使用 csv dictreader、matplotlib 和 numpy 创建概率密度函数图?

Python:重写具有元组的文本文件

python - 如何存储非均匀 numpy 数组列表?

node.js - 是否可以在 Node.js 中 fork 一个 javascript 函数?

.net - 是否可以将简单的并行计算推送到 .Net 中的 GPU?