我有N个独立的OpenCL内核,它们以顺序方式同步运行。第二个内核使用来自第一个内核的结果,第三个内核使用来自第二个内核的结果,等等。
我用两种不同的方式测量了内核的总“执行”时间:
1)我将每个内核与单个事件相关联,并通过从每个事件的结束时间中减去开始时间来分别测量每个内核的时间。通过添加所有内核的所有事件的时间来计算总时间。在这种情况下,在执行每个内核后调用事件等待方法。
2)与1)中一样,我将每个内核与一个事件(N个内核和N个事件)相关联。然后,我在执行所有内核后调用事件等待方法(即,所有事件等待调用后跟一系列内核调用)。总执行时间是通过从最后一个事件的结束时间减去第一个事件的开始时间获得的。
1)和2)的总时间之间的差异非常显着:约占总执行时间的20%。这20%的损失在哪里?它是否与(en)排队多个内核相关联?
我如何减少“开销”?它是否会通过重构内核将所有内核塞入单个大内核来减少编写更大内核的开销?
谢谢!