【发布时间】:2018-07-15 18:34:48
【问题描述】:
我刚刚开始学习如何使用 Tensorflow,遇到了一个问题,让我怀疑我对它应该如何工作的理解。我想大致了解在 GPU 上使用基本算术运算应该获得多少性能。我创建了一个包含 1 亿个元素的一维张量,然后在这个张量上链接 1000 个添加操作。我的期望是 Tensorflow 运行时能够将这些操作链接到在 GPU 上执行的单个 CUDA 内核中,但是当我运行它时,似乎每个操作都是单独发布给 GPU 的。在我的 gtx 1080 ti 上完成大约需要 5 秒,它提供了大约 20 Gflops。运行时,python.exe 正在使用完整的 CPU 内核,Nvidia Nsight 显示许多内核正在提交。相比之下,当我尝试查看使用 Alea.GPU 得到的结果时,我得到了大约 3Tflops 和单个 CUDA 内核。
我是否误解了基本操作在 GPU 上的工作方式?手动将操作分组为更复杂的自定义操作或使用更高级别的 ML 函数是获得良好 GPU 效率的唯一方法吗?
谢谢。
import tensorflow as tf
import time
TENSOR_SIZE=100000000
TF_REP=1000
def testSpeed(x):
tf.InteractiveSession();
z=tf.zeros(TENSOR_SIZE)
for i in range(0, TF_REP):
z=tf.add(z,x)
return tf.reduce_sum(z).eval();
x=tf.range(0.0, TENSOR_SIZE)
t0=time.perf_counter()
testSpeed(x)
t1=time.perf_counter()
print("Time taken "+str(t1-t0)+"s gflops= " + str(TENSOR_SIZE * TF_REP / 1000000000.0 / (t1 - t0)))
【问题讨论】:
标签: tensorflow