CPU 探勘:最佳執行緒數
(我想這個問題原則上同樣適用於比特幣,但考慮到比特幣的 CPU 探勘似乎是無利可圖的,這個問題實際上是關於 Yacoin 探勘的)。
我目前正在使用 64 位 Windows 礦工的 AVX 版本,其連結可以在Yacoin 的首頁上找到。與礦工的所有分叉一樣,您可以指定礦工應該使用多少威脅進行挖礦。似乎它使用的預設數字是邏輯處理器的數量,在我的情況下恰好是 8。但是,我嘗試過使用這個值,似乎使用執行緒數可以顯著增加我的雜湊率(當然它也可以降低它)。我想這有點令人驚訝,因為我只是假設預設執行緒數是最有效的。
還有一個變數是我在池中執行了多少個工人(在我的例子中是 yac.coinmine.pl)以及我正在執行多少個礦工程序。
這意味著我可以嘗試使用各種程序數/執行緒數組合來嘗試找到最有效的組合,但在我認為我會花時間玩這些各種可能性之前,問一下會更容易有人對它的實際工作原理有更好的了解:是否有任何理由執行 8 個每個具有 1 個執行緒的 minerd 實例與每個具有 8 個執行緒的 1 個 minerd 實例是有益的?也許原則上不應該,但因為我在一個池中探勘,單獨的實例需要單獨的工作人員這一事實會有所不同嗎?什麼應該是理想的執行緒數,為什麼這實際上應該是一個有效的執行緒數?例如,使用 16 個執行緒似乎比僅使用 8 個執行緒提高了我的雜湊率,但是再次加倍到 32 個執行緒似乎再次降低了雜湊率。為什麼會這樣?
作為一個單獨但相關的問題,為什麼我的雜湊率似乎越慢礦機執行時間越長?
你只需要一個礦工實例。該應用程序還與池同步。因此,打開 1 個以上的 minerd 實例只會導致您的網路被兩次用於相同的資訊。此外,作業系統有一些執行應用程序的成本。打開另一個實例將意味著更多的成本,因此更少的雜湊!
你有一個超執行緒的 CPU,所以你有 8 個邏輯核心,這與有 8 個物理核心不同。您是否嘗試過使用 4 個執行緒執行它(只是為了好玩)?
另外,想像一下有一個有 4 條車道的賽道。您可以在上面駕駛 8 或 16 輛汽車。但是你仍然必須讓 4 輛車同時並排行駛。你可以隨心所欲地扔任何數量的汽車,但必須有人同步這些汽車,所以這只是意味著賽道的使用更少。
理想情況下,您應該在 4 車道賽道上擁有 8 輛汽車。這樣,退出賽道的賽車有一些時間來交換他們的單圈時間,而其他 4 輛車則使用賽道。然後他們幾乎可以完美地互相緩解,就像接力賽一樣。
這條賽道上的賽車少於 4 輛意味著賽道不會一直被使用,因為賽車中的賽車手希望在退出賽道後相互交換單圈時間(程序希望將結果返回給礦工線)。
擁有超過 8 輛汽車意味著總會有汽車等待進入賽道,因此您只會讓汽車等待很長時間才能在賽道上比賽。
當我使用 Slackware 並編譯我的核心時,建議將執行緒設置為 2xN - N=核心數。但是在這裡<http://www.databook.bz/?page_id=2319>我找到了一個人,不同意這個意見。顯然它在不同的平台上有所不同。所以,如果你的觀察表明 2xN 在你的機器上效果更好,這聽起來很合理。