CUDA如何知道何时进行同步?

时间:2019-02-20 00:32:34

标签: cuda

假设我有一组float gpu指针->数据集:[A,B,C,D]

我正在对其进行迭代,以便计算B,我需要A,对于C,我需要B等。

如果我愿意

A = computeA()

for prevData, data in dataset:
    data = computeData(prevData)

CUDA是否会自动将它们排队,以便一个接一个地完成?我需要做deviceSynchronize()吗?

1 个答案:

答案 0 :(得分:0)

简而言之:如果它们在同一个流中被调用(除非您明确定义了它们,否则它们将被调用),它们将一个接一个地执行。

对内核的调用是异步的,但这并不意味着它们会同时发生,仅意味着CPU在排队下一个操作之前不会等待内核完成。如果需要,可以添加deviceSynchronize(),因为除非调用之间有大量的CPU计算,否则它不会对执行产生影响,只会暂停CPU直到内核完成。