當前位置:首頁 » 挖礦知識 » 顯卡挖礦看單精度還是雙精度

顯卡挖礦看單精度還是雙精度

發布時間: 2021-06-12 10:42:20

A. 顯卡單精度和雙精度的區別

單精度,也就是 float ,在 32 位機器上用 4 個位元組來存儲的;而雙精度double是用 8 個位元組來存儲的,這是他們最本質的區別。 2、由於存儲位不同,他們能表示的數值的范圍就不同,也就是能准確表示的數的位數就不同。

B. 有單精度和雙精度都高的顯卡嗎

只能說,魚和熊掌無法兼得。

C. 單精度和雙精度

單精度和雙精度數值類型最早出現在C語言中(比較通用的語言裡面),在C語言中單精度類型稱為浮點類型(Float),顧名思義是通過浮動小數點來實現數據的存儲。這兩個數據類型最早是為了科學計算而產生的,他能夠給科學計算提供足夠高的精度來存儲對於精度要求比較高的數值。但是與此同時,他也完全符合科學計算中對於數值的觀念:

當我們比較兩個棍子的長度的時候,一種方法是並排放著比較一下,一種方法是分別量出長度。但是事實上世界上並不存在兩根完全一樣長的棍子,我們測量的長度精度受到人類目測能力和測量工具精度的限制。從這個意義上來說,判斷兩根棍子是否一樣長絲毫沒有意義,因為結果一定是False,但是我們可以比較他們兩個哪個更長或者更短。這個例子很好地概括了單精度/雙精度數值類型的設計初衷和存在意義。

基於上述認識,單精度/雙精度數值類型從一開始設計的時候,就不是一個准確的數值類型,他只保證在他這個數值類型的精度之內是准確的,精度之外則不保證,比方說,一個數值5.1,很可能存儲在單精度/雙精度數值中的實際值是5.100000000001或者5.09999999999999。導致這個現象的原因我們可以通過兩種方式來解釋:

簡單的解釋方法:

你可以嘗試在任何一個控制項的屬性面板中,設定他的寬度為:3.2CM,當你輸入完畢後,你會發現值自動變成了3.199cm,無論你怎麼改,你都無法輸入3.200CM,因為實際上在電腦中存儲的並不是CM為單位的數值,而是「緹」為單位的數值,而「緹」和CM之間的比值,是個很難被除盡的數,因此你輸入完畢後,電腦自動轉換成了最接近的「緹」值,然後再轉換成厘米顯示到屬性面板上,這一乘一除,兩次四捨五入,誤差就出來了。單精度/雙精度也是類似的原理,其實在二進制存儲的時候,單精度/雙精度都採用了類似相近分數的方法,而這樣的存儲是不可能做到准確的。

深入的解釋方法:

讓我們來看看我們存儲到數字介質中的單精度/雙精度值到底是怎麼樣的,我們使用如下代碼對單精度類型進行一個解剖:

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Public Sub floatTest()
Dim dblVar As Single

dblVar = 5.731 / 8
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

End Sub

Public Sub dblOutput(ByVal dblVar As Single)
Dim bytVar(3) As Byte
Dim i As Integer, j As Integer
Dim strVar As String

CopyMemory ByVal VarPtr(bytVar(0)), ByVal VarPtr(dblVar), 4
strVar = dblVar & ": "
For i = 3 To 0 Step -1
For j = 7 To 0 Step -1
strVar = strVar & (bytVar(i) And 2 ^ j) / 2 ^ j
Next j
strVar = strVar & " "
Next i
Debug.Print strVar

End Sub
運行後我們得到輸出結果(輸出格式為高位左,低位右):

.716375: 00111111 00110111 01100100 01011010
1.43275: 00111111 10110111 01100100 01011010
2.8655: 01000000 00110111 01100100 01011010
5.731: 01000000 10110111 01100100 01011010
11.462: 01000001 00110111 01100100 01011010
22.924: 01000001 10110111 01100100 01011010
這里,我們把單精度類型轉化成了二進制數據輸出,這里我們看到,雖然這六個數字完全不同,但是他們的二進制存儲驚人地相似,我們看到紅色標記部分,每次都是加1,事實上,單精度數據類型使用從高位開始第1位作為正負標記位(綠色),第2位到第9位,是一個跨位元組的有符號位元組類型數據,這個數值決定了小數點移動的方向和位數(紅色),第10位到32位保存一個整數(藍色)在存儲過程中,電腦首先把輸入的值不斷移位(乘除2)直到這個數的整數部分佔用了全部24位的整數位,然後把移動的位數寫入浮點部分(紅色),而移位後的結果寫入整數部分(藍色和綠色),小數部分則舍棄。求值的時候則是反向過程,先根據正負位和整數位求值,然後根據紅色部分的整數來進行移位(乘除2的次方),最終才是我們得到的單精度數值。雙精度數值也是同樣原理,只是位數更多而已。

通過解剖單精度數值的二進制存儲格式,我們可以清楚看到,實際上單精度/雙精度的存儲,都要通過乘法和除法,其中必有舍入,如果恰好你的數值在除法中被舍入了,那麼你賦的初值就很可能與你最終存儲的值不完全相同,其中的微小差異,並不與單精度/雙精度的設計目標相違背。

當我們在資料庫中或者VBA代碼中使用一個單精度/雙精度數值的時候,也許你從界面上看不到區別,但是在實際的存儲中,這個差別卻真真切切地就在那裡,當你對其進行相等比較的時候,系統只是簡單地作二進制的比較,界面上無法體現的微小差異,在二進制比較面前卻無處遁形,於是,你的等於比較返回了一個意料之外的False。

D. GPU性能中有單精度和雙精度浮點運算性能,游戲中主要用的是哪個

單純的並行計算並不能提高游戲速度。要想用並行計算提高速度有兩個要求:
1.游戲引擎設計的時候必須設計介面對接並行處理單元;
2.這種運算相似度高,分支預測少,能大量同時並發執行。
但事實上,gpu通用計算加速游戲十分困難
1.目前顯卡連渲染圖像這種本職工作都沒做好,最高端顯卡跑孤島危機特效全開都不太流暢,哪還有精力去管cpu的事呢?
2.游戲中的運算(圖像渲染除外)相似度都很低,很難大量並發執行。因為人的操作沒有規律可言。
3.圖像處理的結構和並行處理的結構從就不太一樣。並行處理需要完整的core,有整數運算單元,浮點運算單元,控制器,緩存等。而圖形渲染(不包括物理運算和光線追蹤)則不需要。在目前圖形渲染能力還不足的情況下,fermi gf100過多的考慮了並行計算,結果用了30億晶體管在某些方面還沒搞過5870。而GTX460改變了結構,圖形處理能力才有所增強。

但游戲機的強主要是圖形處理部分優化的好,廠家編游戲時特別優化過,處理系統高度專業化,就干這個,當然比要負載全部處理任務的pc強。

gpu的非並行處理能力並不強。頻率低,內部結構簡單。並不能很好的勝任游戲的要求,他暫時還是老老實實的渲染圖像吧。

E. 顯卡的參數里怎麼看是雙精度還是單精度

如同字面, 就是表示精度的區別。雙精度浮點數使用8個位元組表示,有大約16位十進制有效數字。而單精度浮點數使用4位元組,只有7位十進制有效數字。

PS. Titan並沒有閹割雙精度性能,它在驅動中是有個開關的,打開後提供完整的雙精度性能,但顯卡會略微降頻運行,實際峰值DP計算速度1.3TFlops。


(5)顯卡挖礦看單精度還是雙精度擴展閱讀:

單精度float 和雙精度double 但是很多消費級顯卡都閹割了雙精度功能。

參考:/2 單精度: GCN理論、 Tesla-Fermi

1/3 單精度: 單芯 Titan-Kepler系列、Tesla-Kepler

1/3.5 單精度: Titan Z(功耗、溫度限制)

1/4 單精度: GCN一代旗艦 HD7970、馬甲 R9 280X

1/8 單精度: GCN二代旗艦 R9 290X(功耗、溫度限制) 、Fermi 游戲卡

1/16 單精度: GCN 非旗艦卡

1/24 單精度: Kepler 游戲卡、 Titan-Kepler關閉雙精度

1/32 單精度: Maxwell 游戲卡、Titan-Maxwell關閉雙精度

F. 顯卡挖礦決定速度的主要是什麼

比特幣早期通過CPU來獲取,而隨著GPU通用計算的優勢不斷顯現以及GPU速度的不斷發展,礦工們逐漸開始使用GPU取代CPU進行挖礦。比特幣挖礦採用的是SHA-256哈希值運算,這種演算法會進行大量的32位整數循環右移運算。有趣的是,這種演算法操作在AMD GPU里可以通過單一硬體指令實現,而在NVIDIAGPU里則需要三次硬體指令來模擬,僅這一條就為AMD GPU帶來額外的1.7倍的運算效率優勢。憑借這種優勢,AMD GPU因此深受廣大礦工青睞。



勸告樓主如果預算不多還是不要挖了!!!這錢不是想賺就能賺的


比特幣的難度不斷增加,用顯卡挖礦是在與時間賽跑,其最主要的原因是比特幣挖礦的難度在逐漸增加(比特幣的演算法設計的原因)。如果某套平台按目前難度每天能夠獲取1個比特幣的話,那麼一個月後,同樣算力的平台可能只會獲得0.8個,連最頂級的顯卡也挖18.2天才得到個(其中還不能中斷關機),最低的HD7750二手都要400多(要214天才能挖到一個),看看這圖就知道了(這是今年5月數據,現在不止18天了)

人家正規的挖礦買幾萬一台的礦機才能賺(幾十個頂級顯卡堆在一起運算的礦機)


希望能幫你

G. 怎樣確定一個某個數值是單精度還是雙精度

方法和詳細的操作步驟如下:

1、第一步,打開Matlab並在快捷工具欄中單擊「新建腳本」選項,見下圖,轉到下面的步驟。

H. 怎樣識別一個數是單精度數還是雙精度數

單精度和雙精度數值類型最早出現在C語言中(比較通用的語言裡面),在C語言中單精度類型稱為浮點類型(Float),顧名思義是通過浮動小數點來實現數據的存儲。這兩個數據類型最早是為了科學計算而產生的,他能夠給科學計算提供足夠高的精度來存儲對於精度要求比較高的數值。但是與此同時,他也完全符合科學計算中對於數值的觀念:

當我們比較兩個棍子的長度的時候,一種方法是並排放著比較一下,一種方法是分別量出長度。但是事實上世界上並不存在兩根完全一樣長的棍子,我們測量的長度精度受到人類目測能力和測量工具精度的限制。從這個意義上來說,判斷兩根棍子是否一樣長絲毫沒有意義,因為結果一定是False,但是我們可以比較他們兩個哪個更長或者更短。這個例子很好地概括了單精度/雙精度數值類型的設計初衷和存在意義。

基於上述認識,單精度/雙精度數值類型從一開始設計的時候,就不是一個准確的數值類型,他只保證在他這個數值類型的精度之內是准確的,精度之外則不保證,比方說,一個數值5.1,很可能存儲在單精度/雙精度數值中的實際值是5.100000000001或者5.09999999999999。導致這個現象的原因我們可以通過兩種方式來解釋:

簡單的解釋方法:

你可以嘗試在任何一個控制項的屬性面板中,設定他的寬度為:3.2CM,當你輸入完畢後,你會發現值自動變成了3.199cm,無論你怎麼改,你都無法輸入3.200CM,因為實際上在電腦中存儲的並不是CM為單位的數值,而是「緹」為單位的數值,而「緹」和CM之間的比值,是個很難被除盡的數,因此你輸入完畢後,電腦自動轉換成了最接近的「緹」值,然後再轉換成厘米顯示到屬性面板上,這一乘一除,兩次四捨五入,誤差就出來了。單精度/雙精度也是類似的原理,其實在二進制存儲的時候,單精度/雙精度都採用了類似相近分數的方法,而這樣的存儲是不可能做到准確的。

深入的解釋方法:

讓我們來看看我們存儲到數字介質中的單精度/雙精度值到底是怎麼樣的,我們使用如下代碼對單精度類型進行一個解剖:

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Public Sub floatTest()
Dim dblVar As Single

dblVar = 5.731 / 8
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

dblVar = dblVar * 2
dblOutput dblVar

End Sub

Public Sub dblOutput(ByVal dblVar As Single)
Dim bytVar(3) As Byte
Dim i As Integer, j As Integer
Dim strVar As String

CopyMemory ByVal VarPtr(bytVar(0)), ByVal VarPtr(dblVar), 4
strVar = dblVar & ": "
For i = 3 To 0 Step -1
For j = 7 To 0 Step -1
strVar = strVar & (bytVar(i) And 2 ^ j) / 2 ^ j
Next j
strVar = strVar & " "
Next i
Debug.Print strVar

End Sub
運行後我們得到輸出結果(輸出格式為高位左,低位右):

.716375: 00111111 00110111 01100100 01011010
1.43275: 00111111 10110111 01100100 01011010
2.8655: 01000000 00110111 01100100 01011010
5.731: 01000000 10110111 01100100 01011010
11.462: 01000001 00110111 01100100 01011010
22.924: 01000001 10110111 01100100 01011010
這里,我們把單精度類型轉化成了二進制數據輸出,這里我們看到,雖然這六個數字完全不同,但是他們的二進制存儲驚人地相似,我們看到紅色標記部分,每次都是加1,事實上,單精度數據類型使用從高位開始第1位作為正負標記位(綠色),第2位到第9位,是一個跨位元組的有符號位元組類型數據,這個數值決定了小數點移動的方向和位數(紅色),第10位到32位保存一個整數(藍色)在存儲過程中,電腦首先把輸入的值不斷移位(乘除2)直到這個數的整數部分佔用了全部24位的整數位,然後把移動的位數寫入浮點部分(紅色),而移位後的結果寫入整數部分(藍色和綠色),小數部分則舍棄。求值的時候則是反向過程,先根據正負位和整數位求值,然後根據紅色部分的整數來進行移位(乘除2的次方),最終才是我們得到的單精度數值。雙精度數值也是同樣原理,只是位數更多而已。

通過解剖單精度數值的二進制存儲格式,我們可以清楚看到,實際上單精度/雙精度的存儲,都要通過乘法和除法,其中必有舍入,如果恰好你的數值在除法中被舍入了,那麼你賦的初值就很可能與你最終存儲的值不完全相同,其中的微小差異,並不與單精度/雙精度的設計目標相違背。

當我們在資料庫中或者VBA代碼中使用一個單精度/雙精度數值的時候,也許你從界面上看不到區別,但是在實際的存儲中,這個差別卻真真切切地就在那裡,當你對其進行相等比較的時候,系統只是簡單地作二進制的比較,界面上無法體現的微小差異,在二進制比較面前卻無處遁形,於是,你的等於比較返回了一個意料之外的False。
參考資料:網路

I. 單精度和雙精度怎麼用怎麼區別

不要誤人子弟啊,「c++裡面單精度float精確到6位,雙精度double15位,long double 17位
單精度定義時就這么寫 float n;雙精度就是double 」這個是哪個編譯器的,說明一下啊。

c++標准里沒有定義類型長度,所以這個類型完全是按照編譯器來的,比如說gcc,float和double一樣長,完全沒有任何區別。

具體使用時候估計float就夠用了,float x=5.3,非常OK,沒有必要加f,同時因為編譯器會自動類型轉換,也就是說這樣定義float x=5,完全可以,連警告都沒有。

J. 求指點顯卡單精度和雙精度,有什麼區別,求科普,不要發一些科學說法,完全聽不懂,求一個通俗點答案,比

問題太專業。建議到知乎上去問。我只知道,目前民用領域上幾乎用不到雙精度運算,大部分為單精度運算

熱點內容
trx4可以調軸距嗎 發布:2025-06-22 12:13:21 瀏覽:700
你對比特幣是怎麼認識和理解的 發布:2025-06-22 12:12:37 瀏覽:353
元宇宙多久到來 發布:2025-06-22 12:04:55 瀏覽:427
區塊鏈的幣有哪些 發布:2025-06-22 12:04:17 瀏覽:640
iot區塊鏈國內 發布:2025-06-22 12:00:51 瀏覽:200
shib上不去了 發布:2025-06-22 11:51:27 瀏覽:762
漲樂財富通區塊鏈 發布:2025-06-22 11:45:28 瀏覽:409
trx4組裝後輪子不轉 發布:2025-06-22 11:43:56 瀏覽:161
螞蟻礦機t15拆 發布:2025-06-22 11:38:18 瀏覽:532
比特幣怎麼囤幣 發布:2025-06-22 11:28:46 瀏覽:411