concurrency - 如何同时启动 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;
}
时间线显示如下: 内核运行时间线截图
解决方案
推荐阅读
- ios - Objective c 如何在ios13中将方向设置为横向
- python - 处理多索引标头数据帧 - Python
- django - 使用 Whitenoise 但仍无法提供静态文件
- javascript - 获取在此之外
- css - 如何使用flex让div中的段落并排弹出?
- asp.net-core - 在 Visual Studio ASP.NET Mac 中创建项目时尝试获取用户身份验证
- mips - 如何在数组 MIPS 中找到最小值和最大值
- ios - 在 swift 上替换 NSCoding 的另一种方法
- javascript - 如何在html页面中播放多个视频
- c - 如何通过递归获得C中给定数量元素的集合的子集?