cuda 跟踪仿真 - 需要一些专家见解
Posted
技术标签:
【中文标题】cuda 跟踪仿真 - 需要一些专家见解【英文标题】:cuda trace emulation -Need some expert insight 【发布时间】: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 运行时执行的见解并指出我可能缺少什么吗?
我知道它有大量信息,但没有任何有用的代码。我不知道要在此处发布代码的哪一部分。当人们开始对我的问题感兴趣并询问我有关我的项目的具体问题时,我会这样做。一开始我只是希望我遗漏了一些你们可以发现的大而高的东西。
非常感谢您的时间和兴趣!
【问题讨论】:
【参考方案1】:整体听起来很有趣。您的“错误:Cuda 无效值”可能与 _cudaRegisterFunction 的参数有关。参数“DeviceName”听起来像是标识要使用哪个 GPU(卡?)。检查 CUDA SDK,有许多枚举系统上的 GPU 的演示,也许这些值对 'DeviceName' 有效。至于“hostFunction”和“deviceFunction”,这些听起来像是函数 ID,或者可能是函数指针。此外,您可以调用“cudaGetLastError()”来测试函数调用是否成功(如果一切正常,它会返回“cudaSuccess”...查看 sdk 中的错误记录宏)。祝你好运!
【讨论】:
以上是关于cuda 跟踪仿真 - 需要一些专家见解的主要内容,如果未能解决你的问题,请参考以下文章
专家见解:使用Oracle Maxymiser的新界面组织个性化且卓有成效的营销活动