小编Dyo*_*gen的帖子

同步多个 Cuda 流

对于我目前正在开发的应用程序,我希望有一个长内核(即,相对于其他内核需要很长时间才能完成的内核)与多个同时运行的较短内核的序列同时执行。然而,更复杂的是,四个较短的内核在完成后都需要同步,以便执行另一个短内核,收集和处理其他短内核输出的数据。

以下是我想到的示意图,编号的绿色条代表不同的内核:

我想到的示意图。

为了实现这一点,我编写了如下所示的代码:

// definitions of kernels 1-6

class Calc
{
    Calc()
    {
        // ...
        cudaStream_t stream[5];
        for(int i=0; i<5; i++) cudaStreamCreate(&stream[i]);
        // ...
    }

    ~Calc()
    {
        // ...
        for(int i=0; i<5; i++) cudaStreamDestroy(stream[i]);
        // ...
    }

    void compute()
    {
        kernel1<<<32, 32, 0, stream[0]>>>(...);
        for(int i=0; i<20; i++) // this 20 is a constant throughout the program
        {
            kernel2<<<1, 32, 0, stream[1]>>>(...);
            kernel3<<<1, 32, 0, stream[2]>>>(...);
            kernel4<<<1, 32, 0, stream[3]>>>(...);
            kernel5<<<1, 32, 0, stream[4]>>>(...);
            // ?? synchronisation ??
            kernel6<<<1, 32, …
Run Code Online (Sandbox Code Playgroud)

c++ cuda

5
推荐指数
1
解决办法
1864
查看次数

标签 统计

c++ ×1

cuda ×1