Chinese, Simplified subtitles

← cs344_unit5_37_s_循环和线程的发散

Get Embed Code
2 Languages

Showing Revision 1 created 05/16/2013 by adeptHanLi.

  1. 要回答这个问题,我们得了解一下这些循环
  2. 之后再来判断每个变形将要在循环之中执行多少次。
  3. 意思是至少一条在变形中的线程将要执行多少次。
  4. 来看一下此处的表达式,单一变形,取值范围将从0到31。
  5. 所以在此变形中至少会有1个线程执行此取模表达式中,值为31.
  6. 这意味着整个变形将遍历
  7. 执行此bar函数31次。
  8. 现在,某些次数中的某些线程将会失效。
  9. 所以在最开始,线程0不会执行bar函数。
  10. 函数将失效因为i值不会小于0.
  11. 下一次线程0和1将会失效,以此类推。
  12. 最终,此变形在此循环中的总时间
  13. 取决于任意某线程需要消耗的总时间。
  14. 每个变形将会在此循环中执行31次。
  15. 下面这个循环,却不同。
  16. 在此条件下的整数除意味着线程0到31的值都会为0。
  17. 下一个表达式的值将为0,因此它们完全不会执行此bar函数。
  18. 而线程32到63我们会执行此表达式取值为1,
  19. 它们将会执行此循环1s,以此类推。
  20. 所以此处有一个变形将会执行0次,下一个执行1次,
  21. 再下一个执行2次以此类推,所有执行次数加起来的和等于此单个变形。
  22. 总共为31次。
  23. 所以所有这些变形在本次循环中执行的平均次数为15.5次。
  24. 那么现在我们需要知道这道题的答案了。
  25. 显然,第二个循环执行的更快,两倍于第一个循环,
  26. 因为,通常来说,时间要求更高的bar函数求值次数
  27. 为在首个循环中bar函数所需次数的一半。