【问题标题】:compute multiple images in parallel using numpy使用 numpy 并行计算多个图像
【发布时间】:2020-05-15 13:14:11
【问题描述】:

我正在生成超级随机二进制图像,并且在一个 CPU 核心 atm 上执行此操作。由于我想生成数百万张图像,因此我需要在我的 CUDA GPU 上执行此操作。我认为 numba 是正确使用的工具,但它的哪些功能?我想在不同的 GPGPU 核心上计算每个图像,所以我在 CPU 上的主要进程应该只复制图像信息(基本上只有 id)并在 GPGPU 核心上并行生成尽可能多的图像。

我考虑过使用jit,但我不确定它是否适合我的需要,这就是为什么我想听听一些关于该主题的专家的意见。

代码比较简单,我要并行执行

import numpy as np

def gen_img(id):
    np.random.seed(id)
    a = np.random.randint(2, size=(1080, 1080))
    return a

numba.jit 是否适合我的需求?

【问题讨论】:

标签: python parallel-processing gpu numba


【解决方案1】:

Qnumba.jit 是否适合我的需求?”

没有。鉴于您的目标是生成 1080 x 1080 位图的“just”-[CONCURRENT] 工作流程的高性能生产 (随机 - 这是它自己的主题),无论是 python,还是 numba.jit-accelerated 代码都不会在接近足够正确的低级 CUDA 优化代码的任何地方执行。

PRNG 产生的随机性的质量,基于集中调度的种子-id 是这里的核心问题,而不是 GPU 托管的生产代码 + 一些文件 I/O .

在种子-id 和 PRNG-produced 之间实现高质量分布映射的问题远远超出了 Stack Overflow Q/A 站点,属于密码学领域,而不是 PRNG 实现。如果有兴趣使用可组合为 CUDA 内核的智能、高质量 PRNG-s(即不依赖于 GPU 硬件的限制,因为它不是很深(非常,并且通常没有已发布的生产属性PRNG 数字的分布,与其他 PRNG-s 相比,包括那些具有已发布源代码的随机位向量,有很多帖子可以从这里开始。

使用正确工具的灵感:

例如,可以直接从 shell 获取此类位图,具有适合硬件约束的任意程度的作业并行性,而无需调用 GIL 锁跳舞 Python 解释器:

$ seq 4096 | parallel --jobs 32 \
                      --bar      \
                      '(base64 -w0 /dev/urandom | head -c 145800 > random_data_1k80_1k80_1bit.{})'

使用正确的工具,将特定于文件格式的标头添加到原始数据或通过管道/套接字将原始数据发送到其他进程是简单而明显的。这不是很好吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2021-07-04
    • 1970-01-01
    • 2020-11-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多