标签: cuda-events

cudaEventSynchronize 与 cudaDeviceSynchronize

我是 CUDA 的新手,对cudaEvent. 我现在有一个代码示例,如下所示:

float elapsedTime; 
cudaEvent_t start, stop;
CUDA_ERR_CHECK(cudaEventCreate(&start));
CUDA_ERR_CHECK(cudaEventCreate(&stop));

CUDA_ERR_CHECK(cudaEventRecord(start));

// Kernel functions go here ...

CUDA_ERR_CHECK(cudaEventRecord(stop));
CUDA_ERR_CHECK(cudaEventSynchronize(stop));
CUDA_ERR_CHECK(cudaEventElapsedTime(&elapsedTime, start, stop));

CUDA_ERR_CHECK(cudaDeviceSynchronize());
Run Code Online (Sandbox Code Playgroud)

我对这段代码有两个问题:

1.最后一个cudaDeviceSynchronize有必要吗?因为根据 的文档cudaEventSynchronize,其功能是等待直到最近一次调用之前的所有设备工作完成cudaEventRecord()。既然我们已经打电话了cudaEventSynchronize(stop),还需要再打电话吗cudaDeviceSynchronize

2.上面的代码与下面的实现相比有什么不同:

#include <chrono>

auto tic = std::chrono::system_clock::now();

// Kernel functions go here ...

CUDA_ERR_CHECK(cudaDeviceSynchronize());
auto toc = std::chrono::system_clock:now();

float elapsedTime = std::chrono::duration_cast < std::chrono::milliseconds > (toc - tic).count() * 1.0;
Run Code Online (Sandbox Code Playgroud)

cuda cuda-events

6
推荐指数
1
解决办法
6698
查看次数

cudaStreamWaitEvent似乎没有等待

我正在尝试编写一个小型演示程序,该程序具有两个正在运行的cuda流,并受事件控制,彼此等待。到目前为止,该程序如下所示:

// event.cu
#include <iostream>
#include <cstdio>
#include <cuda_runtime.h>
#include <cuda.h>

using namespace std;

__global__ void k_A1() { printf("\tHi! I am Kernel A1.\n"); }
__global__ void k_B1() { printf("\tHi! I am Kernel B1.\n"); }
__global__ void k_A2() { printf("\tHi! I am Kernel A2.\n"); }
__global__ void k_B2() { printf("\tHi! I am Kernel B2.\n"); }

int main()
{
  cudaStream_t streamA, streamB;
  cudaEvent_t halfA, halfB;
  cudaStreamCreate(&streamA);
  cudaStreamCreate(&streamB);
  cudaEventCreate(&halfA);
  cudaEventCreate(&halfB);

  cout << "Here is the plan:" << endl <<
    "Stream A: A1, launch …
Run Code Online (Sandbox Code Playgroud)

synchronization nvidia stream cuda-events

4
推荐指数
1
解决办法
1807
查看次数

cudaStreamWaitEvent会阻止主机吗?

我知道cudaEventSynchronize将阻止主机,直到事件被触发.但是,cudaStreamWaitEvent怎么样?cudaStreamWaitEvent是否仅阻止指定的流,而主机将继续,或者主机也将被阻止?

cuda cuda-events

3
推荐指数
1
解决办法
563
查看次数

CUDA中流的非阻塞同步?

是否可以在不阻塞主机的情况下同步两个CUDA流?我知道有cudaStreamWaitEvent,它是非阻塞的。但是使用cudaEventCreate 和创建和破坏事件呢cudaEventDestroy

文档cudaEventDestroy说:

如果调用cudaEventDestroy()时已记录事件但尚未完成事件,则该函数将立即返回,并且一旦设备完成事件,与事件关联的资源将自动释放。

我不明白的是,已记录事件和已完成事件之间有什么区别。同样,这似乎意味着如果尚未记录该事件,则呼叫正在阻塞。

任何人都可以对此有所了解吗?

c synchronization cuda gpu cuda-events

2
推荐指数
1
解决办法
755
查看次数

标签 统计

cuda-events ×4

cuda ×3

synchronization ×2

c ×1

gpu ×1

nvidia ×1

stream ×1