gpt4 book ai didi

gpgpu - CPU和GPU之间的指令传输

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

我正在寻找与使用 GPGPU 计算时 CPU 如何将程序代码移动到 GPU 相关的信息。互联网上有很多关于数据传输的手册,但没有关于指令/程序加载的手册。

问题是:程序由 CPU 处理,它在每个计算单元上使用足够的标志“配置”GPU 以执行给定的操作。之后,数据被传输和处理。第一次手术是怎么做的?如何向 GPU 发出指令?指令是否以某种方式分组以利用总线带宽?我可能忽略了一些基本的东西,所以欢迎提供任何额外的信息。

最佳答案

关于它的信息确实不多,但你高估了效果。

整个内核代码只加载到 GPU 上一次(最坏的情况是每次内核调用一次,但看起来它实际上是每次应用程序运行一次,见下文),然后在 GPU 上完全执行,没有任何来自 CPU 的干预。因此,整个内核代码在内核调用之前被复制到某个地方的一个 block 中。为了估计代码大小,.cubin我们自制 MD 包的所有 GPU 代码(52 个内核,其中一些超过 150 行代码)的大小仅为 91 KiB,因此可以肯定地假设在几乎所有情况下代码传输时间都可以忽略不计。

这是我在官方文档中找到的信息:

CUDA Driver API ,代码在您调用 cuModuleLoad 时加载到设备上功能

The CUDA driver API does not attempt to lazily allocate the resources needed by a module; if the memory for functions and data (constant and global) needed by the module cannot be allocated, cuModuleLoad() fails



从理论上讲,如果您有几个模块使用过多的常量(或静态分配的全局)内存来同时加载,您可能必须卸载模块然后再次加载它,但这并不常见,您通常调用 cuModuleLoad每次应用程序启动一次,在上下文创建之后。

CUDA Runtime API没有提供任何控制模块加载/卸载的措施,但看起来所有必要的代码在初始化期间都加载到了设备上。

OpenCL Specs不如 CUDA 驱动程序 API 那样具体,但代码很可能(涉及疯狂猜测)复制到 clBuildProgram 上的设备阶段。

关于gpgpu - CPU和GPU之间的指令传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308562/

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