我运行一个小的测试来评估几个TF操作的性能,并注意到一个有趣的现象。在多台计算机上,我使用int64
索引与int32
索引的操作始终获得更好的性能。例如,如下gather
所示,如果index_dtype
为np.int32
,则操作速度比np.int64
慢2倍。
我的迷你测试包含一个按顺序运行的gather
个操作的图表(元组确保依赖于前一个操作的输出):
indices = np.asarray(indices, dtype=index_dtype)
params = tf.placeholder(dtype=tf.float32)
op = tf.gather(params, indices)
for _ in range(num_ops):
op = tf.gather(tf.tuple([params, op])[0], indices)
我多次运行图表并平均时间(忽略第一次运行)。
因为int32
是GPU计算的原生int类型,我期望相反的行为。可能是造成这种差异的原因是什么?