Return to Video

cs344_unit5_12_l_转置代码示例第2部分

  • 0:00 - 0:02
    让我们来记录我们所做的。
  • 0:02 - 0:05
    版本1是单个线程的串行,
  • 0:05 - 0:08
    它需要花466毫秒。
  • 0:08 - 0:11
    466毫秒相当慢,
  • 0:11 - 0:13
    但有时还好。
  • 0:13 - 0:15
    对于只会执行一次的代码,
  • 0:15 - 0:19
    性能完全不重要的代码,或只在很小的数据集上运行的代码,
  • 0:19 - 0:24
    如我们起初的8 x 8矩阵,优化这个不值得。
  • 0:24 - 0:27
    所以虽然这个简单的串行内核似乎很幼稚,
  • 0:27 - 0:30
    但有时它的确是正确该用的。
  • 0:30 - 0:32
    在你优化时,要牢记这点。
  • 0:32 - 0:35
    想想你需要优化什么,它是否重要。
  • 0:35 - 0:42
    现在我们假设实际上性能在这部分很关键,所以我们要优化它。
  • 0:42 - 0:44
    让我们回到代码,看看我们能做什么。
  • 0:44 - 0:49
    一个简单的步骤是为输入的每一行启动一个线程,好吗?
  • 0:49 - 0:51
    这是这样做的代码。
  • 0:51 - 0:55
    在这代码中,我们将为输出矩阵的每一行启动一个线程。
  • 0:55 - 1:00
    所以 i 的值会由线程ID代替,
  • 1:00 - 1:02
    每个线程将执行
  • 1:02 - 1:06
    我们之前看到的代码的外部循环,
  • 1:06 - 1:11
    我们基本不用的内部循环在很多不同线程上运行。
  • 1:11 - 1:14
    这两个代码几乎相同,
  • 1:14 - 1:19
    唯一的不同是我们启动代码,而不是循环遍历i值。
  • 1:19 - 1:21
    我们来对这个计时。
  • 1:21 - 1:24
    这是调用我们新函数的代码。
  • 1:24 - 1:27
    我们将启动transposeparallelper_row函数作为一个内核。
  • 1:27 - 1:30
    我们将启动含n个线程的单个线程块。
  • 1:30 - 1:34
    记住,n是我们矩阵的大小,当前是1024。
  • 1:34 - 1:38
    我们将放入输入矩阵,得出输出矩阵,复制它,
  • 1:38 - 1:41
    然后我们打印输出时间并确认。
  • 1:41 - 1:43
    我们来编译并运行该代码。
  • 1:43 - 1:45
    好的。
  • 1:45 - 1:48
    transpose_serial又运行了484毫秒,和我们之前看到的差不多。
  • 1:48 - 1:52
    transposeparallelper_row运行了4.7毫秒。
  • 1:52 - 1:55
    很明显我们获得了很大提升,
  • 1:55 - 1:59
    通过把它并行化到单个线程块的所有线程。
  • 1:59 - 2:01
    让我们记下:
  • 2:01 - 2:05
    4.7毫秒,大致提升100倍。
Title:
cs344_unit5_12_l_转置代码示例第2部分
Description:

more » « less
Video Language:
English
Team:
Udacity
Project:
CS344 - Intro to Parallel Programming
Duration:
02:05
Wencheng Hu approved Chinese, Simplified subtitles for 07-15 Transpose Code Example Part3
Lian7 added a translation

Chinese, Simplified subtitles

Revisions