【发布时间】:2011-10-14 21:54:25
【问题描述】:
作为我在研究生院研究工作的一部分,我正在 Windows 中开发一个 gpu 跟踪仿真工具。我正在研究具体的 cuda 运行时跟踪仿真。
我通过 MS Detours 使用简单的 DLL 注入来启用对 cuda 运行时 API 的拦截。我将 API 调用及其参数存储在跟踪文件中。我在尝试从我的跟踪文件中模拟 API 时遇到了一些问题(我使用“播放”一词来表示此操作)
典型的跟踪文件从调用 __cudaRegisterFatBinary 和 __cudaRegisterFunction 开始。随后调用 cudaMalloc。
我做了什么?
1) 我遇到了著名的 GPUOcelot,我发现了 Nvidia 现在正在使用的 cubin 结构。我正在使用它在拦截模式下保存 cudaRegisterFatBinary 的地址参数,并通过重新填充内存中的结构来使用播放中的指针 _cudaRegisterFatBinary。
2)在 _cudaRegisterFunction 中我不确定参数 hostFunction、Device Function 和 Device Name 指的是什么。我的意思是我不明白如何在从我的跟踪文件回放时填充它。我只是从原始执行中保存指针并使用它来模拟调用。但是由于没有返回值,所以无法知道函数是否正常运行。
3)cudaMalloc 跟随这两个入口点函数返回 cuda 错误代码 11。根据 Nvidia 文档,这是 cuda 无效值。我不知道为什么会这样。我假设前两个函数调用有问题。我也有一种感觉,cuda 运行时创建的隐式主上下文有问题。有人可以给我一些关于 cuda 运行时执行的见解并指出我可能缺少什么吗?
我知道它有大量信息,但没有任何有用的代码。我不知道要在此处发布代码的哪一部分。当人们开始对我的问题感兴趣并询问我有关我的项目的具体问题时,我会这样做。一开始我只是希望我遗漏了一些你们可以发现的大而高的东西。
非常感谢您的时间和兴趣!
【问题讨论】:
标签: cuda