計算シェーダーが SPIR-V (特に Vulkan) を介して変換される API を使用して GPU の計算コードを作成する場合、浮動小数点除算の ULP エラーが最大 3 になることが保証されます。その他の基本的な算術演算 (加算、乗算) は、正しく丸めます。
これらの状況で正しく丸められた除算を効率的に実装するにはどうすればよいですか? FMA が利用可能で、正しく丸められていると仮定しましょう。
デノーマルで何が起こるかは、基盤となるハードウェアによって異なります。Vulkan API を使用すると、デバイスがデノーマルを保持できるかどうか、およびデノーマルをゼロにフラッシュできるかどうかを照会できます (したがって、デノーマルを完全にサポートしていない GPU は「canPreserve: false, canFlush: true」になります)。さらに、GPU がデノーマルをゼロにフラッシュせずに生成および処理できると仮定しましょう (そうでなければ、サブノーマルである正しく丸められた結果を生成しようとしても無駄に思えます)。