使用GPU計算時,單精度float32類型和半精度float16類型運算效率的區別


最近在看資料時發現寫着使用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:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-------------------------------------------------------------------------

 

 

 

RTX 2060super 顯卡環境下:

Float32 , 單精度數據類型的x, y:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RTX 2060super 顯卡環境下:

Float16 , 半精度數據類型的x, y:

 

 

 

 

 

 

 

 

 

 

 

 

======================================================

 

 

說下個人的結論:

1. 如果任務需要的計算能力在家用級別顯卡的計算能力之下(顯卡利用率在100%以內,不考慮顯存的前提),那么家用級顯卡計算時間不會比服務器級別顯卡運算時間長。或者說,如果你的任務使用家用級別顯卡可以應付,那么運行時間不會比使用服務器級別顯卡的時間長。

2. 服務器級別的顯卡運行效率受多方面的條件影響,同一任務多次運行的時間會有一定波動;而家用級別的顯卡一般所受影響的方面較少,同一任務多次運行的時間也比較一致。

3.同一個任務可能使用服務器顯卡,顯卡的利用率可能只有40%,但是使用家用級別的顯卡利用率可能就有99%了,證明服務器顯卡的性能上限要遠高於家用級別顯卡。但是如果你的計算任務並沒有那么高的計算性能要求,可能使用家用級別的顯卡(此時,如果你在超個頻啥的,oc版顯卡)運算時間很可能要短於服務器級別顯卡的運算時間的。

 

 

 

 

 

======================

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM