【问题标题】:Cuda global memory load and storeCuda 全局内存加载和存储
【发布时间】:2019-10-09 19:03:34
【问题描述】:

所以我试图隐藏全局内存延迟。取以下代码:

for(int i = 0; i < N; i++){
     x = global_memory[i];

     ... do some computation on x ...

     global_memory[i] = x;
}

我想知道从全局内存中加载和存储是否阻塞,即在加载或存储完成之前它不会运行下一行。比如下面的代码:

x_next = global_memory[0];
for(int i = 0; i < N; i++){
     x = x_next;
     x_next = global_memory[i+1];

     ... do some computation on x ...

     global_memory[i] = x;
}

在这段代码中,x_next 直到下一次迭代才使用,那么加载 x_next 是否与计算重叠?换句话说,会发生以下哪些数字?

【问题讨论】:

    标签: cuda gpu


    【解决方案1】:

    我想知道从全局内存中加载和存储是否阻塞,即在加载或存储完成之前它不会运行下一行。

    它没有阻塞。加载操作不会停止线程。

    请注意,编译器通常会寻找unroll loops(并重新排序活动)以启用您建议“手动”执行的操作。

    但在任何情况下,您的第二个实现应该允许发出 gm[1] 的负载并在 gm[0] 上进行计算的同时继续进行。

    全局内存存储也是“一劳永逸”——非阻塞。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 2012-06-05
      • 2012-01-08
      相关资源
      最近更新 更多