首页 > 解决方案 > 如何同时启动 2 个 CUDA 内核?

问题描述

我试图创建 4 个流来同时启动 4 个内核,但它似乎使用 nsight 串行运行。

我的硬件:RTX2060

我的测试代码如下:

#include "cuda_runtime.h"
#include <stdio.h>

#define N 1000000

__global__ void kernel_1() 
{
    double sum = 0.0;
    for (int i = 0; i < N; i++) {
        sum = sum + tan(0.1) * tan(0.1);
    }
}

int main()
{
    const int n_streams = 4; 
    cudaStream_t *streams = (cudaStream_t *)malloc(n_streams * sizeof(cudaStream_t));
    for (int i = 0; i < n_streams; i++) {
        cudaStreamCreateWithFlags(&streams[i], cudaStreamNonBlocking);
    }
    dim3 block(1);
    dim3 grid(1);

    for (int i = 0; i < n_streams; i++) {
        kernel_1 << <grid, block, 0, streams[i] >> >();
        kernel_1 << <grid, block, 0, streams[i] >> >();
        kernel_1 << <grid, block, 0, streams[i] >> >();
        kernel_1 << <grid, block, 0, streams[i] >> >();
    }

    printf("done\n");
    return 0;
}

时间线显示如下: 内核运行时间线截图

标签: concurrencycudaprofilingnsight

解决方案


推荐阅读