Return to Video

cs344_unit5_17_l_转置代码测量内存使用量

  • 0:00 - 0:04
    所以,如果我们回顾一下针对所有这些内核的分析,我们就会看到
  • 0:04 - 0:08
    我们的并行每个元素代码的版本将达到 每秒12.5 千兆字节。
  • 0:08 - 0:13
    我们的并行每行代码的版本将获取约每秒1.8 千兆字节,
  • 0:13 - 0:19
    而我们的串行代码版本获得令人失望的每秒0.018 千兆字节。
  • 0:19 - 0:24
    这大约是信鸽的速度。或许,这是思考这个问题更好的方式,
  • 0:24 - 0:31
    不在于绝对数字,而是作为我们使用的特定 GPU 能够实现多少百分比。
  • 0:31 - 0:34
    所以,我们正在努力要实现的百分比是否可行,
  • 0:34 - 0:39
    它有点像我们在最大限度执行内核时31 %理论峰值带宽,
  • 0:39 - 0:47
    在我们的每行内核时4.5%的理论峰值带宽,以及我们的串行内核时0.1%d的理论峰值带宽。
  • 0:47 - 0:50
    所以,回到问题。为什么这个数字这么低?
  • 0:50 - 0:57
    嗯,我们可以做一个聪明的猜测,每当你看到真正的低 DRAM 利用率,
  • 0:57 - 1:00
    非常低的百分比带宽,你第一次的猜测始终会纠结在一起。
  • 1:00 - 1:05
    理解合并的一种方法是 GPU 始终访问全局内存,
  • 1:05 - 1:11
    在 DRAM存取很大块数据, 一次 32 个或 128 个字节。
  • 1:11 - 1:14
    这意味着我们需要最少
  • 1:14 - 1:21
    总内存交换当在变形存取中线程
  • 1:21 - 1:24
    所以,这是好聚结的示例。
  • 1:24 - 1:27
    每个线程是读或写一个相邻的内存位置。
  • 1:27 - 1:33
    清楚,如果一种变形中的线程是阅读和写作完全随机的地点和内存,
  • 1:33 - 1:36
    然后你要让穷人合并右吗?
  • 1:36 - 1:41
    所以,如果这些访问散布的内存,
  • 1:41 - 1:48
    然后我们要读取块的总数可能是内存的一样大的经编中的线程数。
  • 1:48 - 1:52
    所以,随机访问模式显然导致坏合并。
  • 1:52 - 1:57
    所以,更为常见的访问模式是什么叫做 strided,而这是线程访问的位置
  • 1:57 - 2:03
    是次一些跨越其线程 ID 的函数的位置内存。
  • 2:03 - 2:13
    所以,例如,线程 0 可能能够访问位置 0,线程 1 的位置 2,线程 2 位置 4、 线程 3 位置 6,等等。
  • 2:13 - 2:17
    在这种情况下,这将是 2 的步幅,因为线程访问,之间有两个元素
  • 2:17 - 2:25
    strided 访问的时间和范围从,好吧,就像在这种情况下凡与步幅的 2 个元素,
  • 2:25 - 2:28
    我真的只增加了一倍的内存事务数。
  • 2:28 - 2:34
    所以我也减半的我真的,合并一路到质量的排序真的很坏吧吗?
  • 2:34 - 2:38
    所以,你可以想象,如果元素之间的跨距是足够大,
  • 2:38 - 2:44
    然后在经线中的每个线程访问完全不同的 32 或 128 字节块的内存,
  • 2:44 - 2:48
    然后保证您能够获得的不良行为。
  • 2:48 - 2:52
    保证将最大化的你所要做的内存事务数。
  • 2:52 - 2:56
    所以,让我们看看我们的内核的代码。这里是哪里我们读从输入矩阵,
  • 2:56 - 2:58
    和这实际上的确很不错。
  • 2:58 - 3:05
    每个线程正在读取内存,相等于一些大的偏移量 ; 中的值J 倍 N 加上。
  • 3:05 - 3:09
    如果你看看我,我真的是线程索引再加上一些偏移量。
  • 3:09 - 3:13
    所以,相邻的线程,你知道,与入季节 X 相邻线程的线程
  • 3:13 - 3:17
    正在阅读相邻值的输入矩阵。这正是我们想要什么,
  • 3:17 - 3:21
    所以这是好的聚结。另一方面,当我们写的输出矩阵
  • 3:21 - 3:29
    相邻线程线程与相邻值的我,骑到 N,权利在内存中隔开的地方吗?
  • 3:29 - 3:36
    N 就像 1024年。所以,相邻线程正在运行是 1024年元素彼此的内存位置。
  • 3:36 - 3:41
    这是显然不好,这是坏聚结。坏、 坏、 坏、 坏。
  • 3:41 - 3:43
    事实上,这是我们问题的根源。
タイトル:
cs344_unit5_17_l_转置代码测量内存使用量
概説:

more » « less
Video Language:
English
Team:
Udacity
プロジェクト:
CS344 - Intro to Parallel Programming
Duration:
03:44

Chinese, Simplified subtitles

改訂 Compare revisions