使用GPU計算時,單精度float32型別和半精度float16型別運算效率的區別
阿新 • • 發佈:2020-11-20
最近在看資料時發現寫著使用float16 半精度型別的資料計算速度要比float32的單精度型別資料計算要快,因為以前沒有考慮過資料型別對計算速度的影響,只知道這個會影響最終的計算結果精度。於是,好奇的使用TensorFlow寫了些程式碼,試試看看是否有很大的區別,具體程式碼如下:
import tensorflow as tf import time x = tf.Variable(tf.random.normal([64,3000,3000], dtype=tf.float32)) y = tf.Variable(tf.random.normal([64,3000,3000], dtype=tf.float32))
#x = tf.Variable(tf.random.normal([64,3000,3000], dtype=tf.float16))
#y = tf.Variable(tf.random.normal([64,3000,3000], dtype=tf.float16))
init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) a = time.time() for _ in range(500): sess.run(tf.matmul(x,y)) b = time.time()print(b-a)
上述程式碼,分別使用單精度或半精度型別的x,y來進行計算。
分別使用RTX titan 和 RTX 2060super 兩個型別的顯示卡分別測試:
RTX titan 顯示卡環境下:
Float32 , 單精度資料型別的x, y:
RTX titan 顯示卡環境下:
Float16 , 半精度資料型別的x, y:
-------------------------------------------------------------------------