gpt4 book ai didi

cuda - WebGL 或 CUDA 代码实际上是如何翻译成 GPU 指令的?

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

当您在 WebGL 或 CUDA 中编写着色器等时,这些代码实际上是如何翻译成 GPU 指令的?

我想了解如何编写超底层代码,将图形渲染优化到极致,以便在硬件/软件边界上准确了解 GPU 指令的执行方式。

据我了解,对于 CUDA例如,您购买他们的显卡 (GPU),它以某种方式实现以优化图形操作。但是,如果没有 C,您如何在此基础上(一般意义上)编程?

这个问题的原因是因为在previous question , 我觉得你不能直接使用汇编来对 GPU 进行编程,所以我有点困惑。

如果您查看类似 CUDA by example 的文档,这只是 C 代码(尽管它们确实有 cudaMalloccudaFree 之类的东西,我不知道它们在幕后做了什么)。但是在幕后,C 必须被编译为汇编代码或至少是机器代码或其他东西,对吧?如果是这样,那是如何访问 GPU 的?

基本上,我没有看到在低于 C 或 GLSL 的级别上,GPU 本身是如何被指示执行操作的。你能解释一下吗?是否有一些程序集片段可以演示它是如何工作的,或者类似的东西?或者除了 x86 上的 16 个“CPU 寄存器”之外是否还有另一组某种“GPU 寄存器”?

最佳答案

GPU 驱动程序将其编译为 GPU 可以理解的内容,这完全不同于 x86 机器代码。例如,下面是一段 AMD R600 汇编代码:

00 ALU: ADDR(32) CNT(4) KCACHE0(CB0:0-15)
0 x: MUL R0.x, KC0[0].x, KC0[1].x
y: MUL R0.y, KC0[0].y, KC0[1].y
1 z: MUL R0.z, KC0[0].z, KC0[1].z
w: MUL R0.w, KC0[0].w, KC0[1].w
01 EXP_DONE: PIX0, R0
END_OF_PROGRAM

其机器代码版本将由 GPU 执行。驱动程序协调将代码传输到 GPU 并指示它运行。这都是特定于设备的,对于 nvidia,没有记录(至少没有正式记录)。

该片段中的 R0 是一个寄存器,但在 GPU 上,寄存器的工作方式通常有点不同。它们“按线程”存在,并且在某种程度上是共享资源(从某种意义上说,在一个线程中使用许多寄存器意味着更少的线程将同时处于事件状态)。为了让多个线程同时处于事件状态(这是 GPU 容忍内存延迟的方式,而 CPU 使用乱序执行和大缓存),GPU 通常有数万个寄存器。

关于cuda - WebGL 或 CUDA 代码实际上是如何翻译成 GPU 指令的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27733704/

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