gpt4 book ai didi

floating-point - 如何使用 Vulkan 在现代 GLSL 中获得 16 位 float ?

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

似乎在某个时间点 Nvidia 有一个扩展,允许 OpenGL 1.1 的半浮点值,但显然从那时起*世界half has been reclaimed在某些时候通过现代 GLSL 规范。

今天我可以用16bit floating point values in CUDA没问题,NVIDIA 支持 16 位浮点数的硬件应该没有问题,而且他们似乎在 HLSL 中支持它们,甚至似乎 contradictory support them in HLSL cross compilation到 SPIR-V 而 GLSL 不适用于 Nvidia。似乎 SPIR-V 具有支持 16 位浮点所需的所有原语,而不管 primary extensions (KHR) 所以似乎没有理由禁止我使用它们。

我不确定为什么尽管有 Nvidia 卡,但我无法利用 16 位浮点运算,而且显然是 forced to use AMD或者如果我想利用它,则完全切换 API。当然必须有某种方法来实际使用真正的 16 位浮点值吗?

我不是在询问主机到设备分配的缓冲区(IE 顶点缓冲区)。是的,您可以将它们分配为具有 KHR 扩展名的 16 位浮点数,并且没有太大问题,但在实际着色器中,使用 16 位浮点数而不是强制为 32 位浮点数的 16 位浮点数是我所担心的。

最佳答案

您可能正在使用 glslang 编译器将您的 GLSL 编译为 SPIR-V。使用该编译器,针对 GLSL 的特定于平台的扩展并不是真正的“特定于平台”。编译器和接收 SPIR-V 代码的 Vulkan 通常很重要。

因为 GL_AMD_gpu_shader_half_float 功能直接映射到 SPIR-V 功能而不是 AMD 扩展,所以 glslang 将输出使用 Float16 的 SPIR-V 代码。能力。只要接收 Vulkan 实现提供 Float16能力,你没事。

当然,您不是很好,因为 Vulkan 实现不提供此功能。没有 Vulkan 功能或扩展,甚至 VK_AMD_gpu_shader_half_float,都提供这种 SPIR-V 功能。如果 Vulkan 不提供此功能,则您无法将使用上限的 SPIR-V 着色器传递给它。

也就是说,您可以编译使用它的着色器,但不能将这些着色器传递给 Vulkan at present .

关于floating-point - 如何使用 Vulkan 在现代 GLSL 中获得 16 位 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49887574/

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