程式
在數值庫中使用並行程式的實踐
這是一個軟的,可能也是一個基於意見的問題。
假設我正在編寫一個用於處理財務數據的數值線性代數庫。我的目標是:
- 由於我使用大數據,我想通過使用並行計算來盡可能快地處理它。
- 我希望我的同事在不理解/調整函式下面的並行性的情況下使用這個庫。
由此產生的問題是:
- 將並行性作為預設行為是個好主意嗎?例如
sum(vector)
,在不詢問使用者的情況下並行化求和。- 如果是,是否有任何經驗法則可以涵蓋處理器之間任務拆分的預設行為?即我應該使用多少個處理器?
問 QuantFinance,因為我對業內人士如何解決這個問題特別感興趣。提前致謝。
我是data.table的忠實粉絲。data.table 的作者對大數據集的性能進行了很多思考,並且由於它的受歡迎程度和年齡,得到了很多回饋,並在權衡替代方案方面獲得了很多經驗。我肯定會建議您熟悉他們的想法。
它們允許使用函式設置執行緒數
setDTthreads()
:設置和獲取要在與 OpenMP 並行化的“data.table”函式中使用的執行緒數。執行緒數在使用可選環境(原文如此,PR 製作)變數首次在 R 會話中載入“data.table”時初始化。此後,可以通過呼叫“setDTthreads”來更改執行緒數。如果您使用“Sys.setenv”更改環境變數,則需要再次呼叫“setDTthreads”以重新讀取環境變數。
這是特定於使用 R 包的,但我認為應用的原則可以延續。使其在執行時和通過環境變數可配置,並設置一個合理的預設變數。在 data.table 的情況下,預設值非常貪婪,這對於在自己的機器上進行分析的人來說是有意義的。它也很聰明,因為它檢測到被分叉:如果它檢測到程序被分叉,則刪除並行性,因為可能在更高級別應用了並行性,並且嘗試使用所有執行緒中的所有核心會導致非常糟糕的爭用.