从 VS2008 运行和仅运行 .exe 时,GPU 代码给出不同的时间

Posted

技术标签:

【中文标题】从 VS2008 运行和仅运行 .exe 时,GPU 代码给出不同的时间【英文标题】:GPU code gives different time when run from VS2008 and when running only .exe 【发布时间】:2011-12-12 15:58:27 【问题描述】:

我的代码中有 cuda 事件来记录执行时间。当我从 VS 2008 中单击“开始调试”时,计时器的值为 1.5 秒。但是,当我从 .exe 文件运行程序时,它的时间为 0.4 秒。为什么会有这种差异?

【问题讨论】:

您是否在同一块 GPU 板上运行您的 CUDA 代码,这也处理您的显示? 好的 - 如果那个 GPU 也在处理你的显示,那么显然在运行你的 CUDA 代码和屏幕更新之间会有一些争论。 @PaulR GPU 处理显示是什么意思 您的 GPU 在您的视频板上。您的 PC 和视频板之间只有一条总线。屏幕更新通过此总线进行。 GPU 内核和数据通过同一条总线传输。 GPU 本身用于屏幕绘制和运行 CUDA 代码。 @PaulR 当你欺骗调试器在处理显示的同一个 GPU 上设置断点时,这真的很有趣...... 【参考方案1】:

除了(只有几种可能性)之外,附加到调试器的运行不会引入性能差异,这并没有内在的原因:

您是否设置了任何条件断点?根据具体情况,这些可能会对执行时间产生巨大影响。

您是否明确向DebugTrace 侦听器写入大量数据? (编辑:这与 C# 相关,可能与 C++ 无关。)

EXE 是在 Release 模式下编译的吗?默认情况下,Release 配置会启用在 Debug 模式下构建时不存在的优化。

你的计时代码真的只计时相关部分吗?如果您在程序执行开始时启动计时器,而不是围绕您真正感兴趣的 GPU 调用启动计时器,您可能会意外地计时一些与运行调试器相关的启动任务,而这些任务在一个独立的应用程序。

【讨论】:

以上是关于从 VS2008 运行和仅运行 .exe 时,GPU 代码给出不同的时间的主要内容,如果未能解决你的问题,请参考以下文章

VSTestHost.exe 已停止工作 - 无法运行单元测试

从 VS6 移植到 VS2008 时在不寻常的架构中使用单元测试?

VS2008 C#用manifest提升程序权限后,调试时还是不行,求解

关于VS2008的WebDev.WebServer.EXE的问题?

如何在 Windows 中从我的 VS2008/C++ 应用程序中执行一个程序来替换调用者并在 xp/vista/7 上运行?

怎么把 .cs的文件编译成exe程序