【问题标题】:Difference between MPI timer and CUDA timerMPI定时器和CUDA定时器的区别
【发布时间】:2013-03-22 02:59:25
【问题描述】:

我有一个 MPI 程序,它将调用一个 CUDA 函数。我用 MPI 定时器和 CUDA 定时器来测量 CUDA 函数的运行时间。但是,使用 MPI 定时器的测量值比使用 CUDA 定时器的测量时间多 2 秒。我想知道为什么会这样。

MPI 程序的结构如下:

 int main(){
MPI initiation

Start timing with MPI_Wtime 

Call CUDA function

End timing with MPI_Wtime 

MPI finalization

}

CUDA函数的结构如下:

void CUDA_fun(){

Start CUDA timer event 

Call global function

End CUDA timer event

}

Linux x86_64

GPU C2075

CUDA 4.2

MPICH2 1.4.1p1

【问题讨论】:

  • 2 秒是很长的时间。该计划需要多长时间?是否有理由认为这种差异是由于主机和 GPU 之间的数据传输/同步造成的?
  • 你能分享一个工作示例代码吗?
  • @igon 该程序需要 10 秒。所有数据传输/同步都在 CUDA 函数内,因此是测量的。
  • @pyCthon 让我明天试着做一个简化版的程序。
  • 当您说 CUDA 计时器时,您的意思是使用 cuda Events 吗?另外,如果您在Start timing with MPI_Wtime 步骤之前放置cudaFree(0);,情况会改变吗?

标签: timer cuda mpi


【解决方案1】:

正如 pQB 所述,MPI 定时器和 CUDA 定时器之间的测量差异是由启动 CUDA 事件的开销引起的。我已经进行了有/没有 CUDA 事件的实验。结果与陈述相符。

更新:正如 talonmies 所说,额外的时间是 CUDA 上下文初始化所需的时间。在 linux 中,通过使用 nvidia-smi -pm 1 启用持久化模式,可以减少额外的时间。

【讨论】:

  • 我想你会发现 CUDA 事件几乎没有开销。额外时间是 CUDA 上下文初始化所需的时间。这可能需要几秒钟,具体取决于平台以及所涉及的代码类型和数量。
  • 查看this question了解更多信息和这种效果的例子
  • 除了@talonmies 的评论,我猜你还包括MPI 时序中的内存分配
  • @talonmies 当我注释掉 CUDA 定时器时,MPI 定时器测量的程序执行时间减少了 2 秒。
  • @pQB 包括内存分配在内的一切都在 MPI 计时范围内。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 2012-02-04
相关资源
最近更新 更多