有啥方法可以为 CuPy 计算设置线程数、块数和网格数?如何?

Posted

技术标签:

【中文标题】有啥方法可以为 CuPy 计算设置线程数、块数和网格数?如何?【英文标题】:Is there any way to set number of threads , number of blocks and grids for CuPy computation? How?有什么方法可以为 CuPy 计算设置线程数、块数和网格数?如何? 【发布时间】:2021-10-25 11:26:43 【问题描述】:

我正在使用带有以下代码的 Cupy,

import cupy as cp

vals, vecs = cp.linalg.eigh(Array)

对于上面的代码,我想在代码中设置线程数。怎么做。假设有 100 个线程执行代码。

【问题讨论】:

【参考方案1】:

对于高级的、类似 NumPy 的 API,目前没有公共接口来更改网格/块配置。此外,许多 linalg API(例如您的示例中的 eigh)将作业委托给 CUDA 数学库求解器,它们也不允许用户设置网格/块配置。我想知道是什么促使了这种需求。能详细点就好了。

【讨论】:

检查可扩展性。通过保持相同的问题大小和不同的线程数,我们想进行测试。 除非您编写自己的自定义内核,否则我认为像这样进行(弱或强)缩放分析是不可行的。大多数 CUDA 库都具有经过查找调整的、针对每个架构的启动配置。 是的,先生...我想知道如何为将使用 cp.linalg.eigh 的内核编写自定义内核 这也不可能。在内部,cp.linalg.eigh 从 cuSOLVER 调用 eigensolver API,但它是一个主机 API。没有办法编写调用主机函数的内核。

以上是关于有啥方法可以为 CuPy 计算设置线程数、块数和网格数?如何?的主要内容,如果未能解决你的问题,请参考以下文章

CUDA 估计每个块的线程数和 2D 网格数据的块数

GPU/CUDA:网格的最大块数和每个多处理器的最大驻留块数

如何查看cpu核心数和线程数?

CPU的核心数和线程数都啥意思

内核网格大小是不是决定块数,而块大小决定线程数?

通过更改线程数更改 CUDA 代码输出的说明