我有一个 CUDA 内核,在我的旧 Tesla 卡中使用了 20 多秒。如果内核运行超过 20 秒,我想以编程方式终止 CUDA 内核。我的意图是,如果内核运行时间超过 20 秒,那么应该杀死该内核并运行另一个精度较低的内核。
我的操作系统是 Windows 7 64 位。CUDA 版本是 5.0。GPU是特斯拉C1060
请帮助我在不退出应用程序的情况下杀死 CUDA 内核。
您可以通过在 CC 2.0 或更高版本的设备上使用断言(失败)从内核中停止现有内核的运行。但是,我认为这不会达到既定目的,至少不方便。
您还可以使用cudaDeviceReset()从主机端停止设备的操作。我还没有完全考虑到这一点,但应该可以在主机端监控某种计时器,并在超时时间结束时重置设备,如果结果的某些指示不存在。这种类型的重置有点像撬棍,因此您需要完全重新启动该设备上的操作(包括 cudaMallocs 等)才能重新启动所需的操作。
请注意,cudaDeviceReset()
仅靠其本身不足以将 GPU 恢复到正确的功能行为。为了实现这一点,“拥有”过程也必须终止。见这里。