首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个操作在CPU上比GPU执行得更快?

为什么这个操作在CPU上比GPU执行得更快?
EN

Stack Overflow用户
提问于 2019-06-16 00:56:55
回答 1查看 450关注 0票数 3

当我阅读tensorflow官方指南时,有一个例子显示了操作的显式设备布局。在这个例子中,为什么CPU执行的时间少于GPU?更常见的是,哪种操作在GPU上执行得更快?

代码语言:javascript
复制
import time

def time_matmul(x):
  start = time.time()
  for loop in range(10):
    tf.matmul(x, x)

  result = time.time()-start

  print("10 loops: {:0.2f}ms".format(1000*result))

# Force execution on CPU
print("On CPU:")
with tf.device("CPU:0"):
  x = tf.random.uniform([1000, 1000])
  assert x.device.endswith("CPU:0")
  time_matmul(x)

# Force execution on GPU #0 if available
if tf.test.is_gpu_available():
  print("On GPU:")
  with tf.device("GPU:0"): # Or GPU:1 for the 2nd GPU, GPU:2 for the 3rd etc.
    x = tf.random.uniform([1000, 1000])
    assert x.device.endswith("GPU:0")
    time_matmul(x)


### Output
# On CPU:
# 10 loops: 107.55ms
# On GPU:
# 10 loops: 336.94ms
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-16 06:09:35

GPU具有较高的存储带宽和大量的并行计算单元。易于并行或数据繁重的操作将受益于GPU的执行.例如,矩阵乘法涉及大量可以并行执行的乘法和加法。

CPU具有较低的内存延迟(当您同时读取大量数据时,这就变得不那么重要了)和一组丰富的指令。当你不得不进行顺序计算(斐波纳基数可能是一个例子)时,它就会发光,必须经常随机读取内存,有复杂的控制流等等。

官方博客的不同之处在于PRNG算法通常是顺序的,不能有效地利用并行操作。但这只是一般情况。最新的CUDA版本已经拥有PRNG内核,并且在这类任务上性能优于CPU。

谈到上面的例子,在我的系统中,CPU上有65 my,GPU上有0.3ms。此外,如果我将采样大小设置为5000,5000将变为CPU:7500 if,而对于GPU,它将保持相同的GPU:0.3ms。另一方面,10是CPU:0.18 (最多0.4ms )和GPU:0.25ms。它清楚地表明,即使是单个操作性能也取决于数据大小。

回到答案。在GPU上放置操作可能有利于容易并行的操作,这些操作可以用少量的内存调用来计算。另一方面,当涉及到较高数量的低延迟(即少量数据)内存调用时,CPU会发光。此外,并不是所有的操作都可以轻松地在GPU上执行。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56615277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档