代码启动多次时,处理时间减少了

时间:2012-10-15 14:23:54

标签: c cuda nvidia

我目前正在使用C和CUDA编写应用程序。 我让算法在纯C中工作并将其转换为CUDA。

结果很好,我现在正在优化我的代码。

我使用简单的

分析内核恢复结果的时间
clock_t start, end;
double cpu_time_used;
start = clock();

. . . my memcopies and my kernel . . . 

end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;

令我惊讶的是,当我连续多次运行整个程序时,处理时间大大减少了。 当它运行一次我平均约0.9秒。连续十次运行我可以减少到0.1秒。

我真正关心的是Visual Profiler根据15次运行计算其统计数据,这使得我的第一次运行被真正快速的14次运行所淹没。

我的程序稍后会被运行一次,所以我想要优化的是第一次运行的时间。

我的问题是,有没有办法解决这个问题,或者知道它来自哪里?

谢谢!

编辑:

我在上网本上运行Windows 7,CUDA 4.2 Toolkit(2.1功能)

1 个答案:

答案 0 :(得分:2)

如果您的目标是提供快速启动,请确保您的可执行文件包含将在其上运行的GPU架构的目标代码。

您可以使用多个体系结构的目标代码编译“胖二进制文件”,其中在运行时选择合适的代码版本。您甚至可以(并且应该!)包含PTX代码,以防任何目标代码版本都不合适(例如,支持将来的设备)。

只需为nvcc提供多个-gencode选项,每个物理架构一个(“sm_20”),您希望包含对象代码,以及至少一个具有虚拟架构(“compute_20”)的选项,生成PTX代码。