我有一个稀疏三角形求解器,可与 4 个 Tesla V100 GPU 配合使用。我完成了实施,所有事情在准确性方面都运行良好。但是,我使用 CPU 计时器来计算经过的时间。我知道 CPU 计时器不是计算经过时间的完美选择,因为我可以使用 CUDA 事件。
但问题是,我不知道如何为多 GPU 实现 CUDA 事件。正如我从 NVIDIA 教程中看到的,它们使用事件进行 GPU 间同步,即等待其他 GPU 完成依赖关系。无论如何,我将事件定义为;
cudaEvent_t start_events[num_gpus]
cudaEvent_t end_events[num_gpus]
我还可以通过迭代设置当前 GPU 来循环初始化这些事件。
我的内核执行就像;
for(int i = 0; i < num_gpus; i++)
{
CUDA_FUNC_CALL(cudaSetDevice(i));
kernel<<<>>>()
}
for(int i = 0; i < num_devices; i++)
{
CUDA_FUNC_CALL(cudaSetDevice(i));
CUDA_FUNC_CALL(cudaDeviceSynchronize());
}
我的问题是,我应该如何使用这些事件分别记录每个 GPU 的经过时间?