gpt4 book ai didi

opencl - 有没有办法在 Vulkan 计算着色器中使用 clz() ?

转载 作者:行者123 更新时间:2023-12-03 03:43:26 24 4
gpt4 key购买 nike

我有兴趣在一组 Vulkan 计算着色器中实现特定算法。该算法在某一时刻使用了 clz() 函数。我预计我的 NVIDIA GPU 可能为该功能提供硬件支持; CUDA 显然使用了 clz 指令,并且 clz() 也在 OpenCL 1.2 中。所以我不想写自己的clz()。有什么方法可以让我像 CUDA 或 OpenCL 那样调用该函数吗?

我想我可以尝试将 OpenCL 内核编译为 SPIR-V 并在 Vulkan 中使用它,但我不认为 Vulkan 会对此感到非常高兴......?

我的另一个想法是,也许我可以将一个非常简单的包含 clz() 调用的 OpenCL 内核转换为 SPIR-V 程序集,对我的 GLSL 着色器执行相同的操作,然后手动破解 clz() 调用,正如它出现在内核汇编代码中一样,进入着色器的汇编代码。但我对 SPIR-V 的细节一无所知,也不知道 Vulkan 可能对计算着色器可以使用哪些类型的 SPIR-V 指令施加任何限制,所以我几乎不知道这是否真的可行。

最佳答案

与 Vulkan 结合的 SPIR-V 可以访问 GLSL extended instruction set ,其中包括函数 FindUMSB,该函数查找最高有效位。您可以通过执行 31 - FindUMSB 使用它来模拟 clz。如果硬件具有显式 clz 指令,则编译器可以分解减法并将表达式替换为内部 clz

关于opencl - 有没有办法在 Vulkan 计算着色器中使用 clz() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39046194/

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