gpt4 book ai didi

opencl - OpenCl 寄存器的神奇数字

转载 作者:行者123 更新时间:2023-12-02 07:13:50 35 4
gpt4 key购买 nike

我编写了两个不同的 openCl 内核,使用 nvidia profiler 获取了有关它们的一些信息,发现两者每个工作项都使用 63 个寄存器。

我尝试了一切我能想到的方法来降低这个数字(用 ushort 替换 int,尝试在 {} 内声明变量以向编译器显示何时可以摆脱它们),但似乎不可能改变这个 63!

然后我发现another question关于他编写的内核,该内核再次使用 63 个寄存器。

当然,这可能纯粹是巧合,但也许背后有原因......使用了特定功能,硬件限制?有谁知道吗?

最佳答案

最多 63 个寄存器。大多数最新硬件(如 GTX 480 到 GTX 770)的数量。仅使用 GTX 780 或 Tesla K20,每个线程就有 255 个寄存器。

因此,当您的内核使用 63 个寄存器时,很可能会使用超过 63 个寄存器,但它们将溢出到片外私有(private)内存(也称为 CUDA 本地内存)。例如,如果您的 nvidia 分析器报告本地内存为 128 字节,则意味着您需要删除 32 个(溢出)寄存器,然后才能获得低于 63 个硬件寄存器。

顺便说一句:“每个多处理器 8,192 个 32 位寄存器”意味着驻留在多处理器上的所有工作组有 8,192 个寄存器。但通常工作组的数量受到工作组大小和内核所需寄存器数量的限制。例如,如果您的内核使用 63 个寄存器,并且工作组大小为 16^2,您将得到:每个工作组 63*16^2 = 16128 个寄存器。假设每个多处理器有 64K 寄存器,那么每个多处理器上可以驻留 4 个工作组,这将产生 25% 的占用率。

关于opencl - OpenCl 寄存器的神奇数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13805830/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com