我目前正在使用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功能)
答案 0 :(得分:2)
如果您的目标是提供快速启动,请确保您的可执行文件包含将在其上运行的GPU架构的目标代码。
您可以使用多个体系结构的目标代码编译“胖二进制文件”,其中在运行时选择合适的代码版本。您甚至可以(并且应该!)包含PTX代码,以防任何目标代码版本都不合适(例如,支持将来的设备)。
只需为nvcc提供多个-gencode
选项,每个物理架构一个(“sm_20”),您希望包含对象代码,以及至少一个具有虚拟架构(“compute_20”)的选项,生成PTX代码。