我正在使用Intel MKL庫來解決具有多個右手邊(rhs)向量的線性方程組(A*x = b)
的系統。 rhs矢量是異步生成的,並通過一個單獨的例程生成,因此,不可能一次解決它們。在mkl_dss_solve的幾個實例中使用一個LU因子分解
爲了加速程序,使用多線程程序,其中每個線程負責解決單個rhs向量。由於矩陣A
始終保持不變,所以LU分解應該執行一次,並且所有線程中都會使用這些因子。所以,我用下面的命令
dss_factor_real(handle, opt, data);
因素A
和句柄傳遞給線程解決使用以下命令的問題:
dss_solve_real(handle, opt, rhs, nRhs, sol);
不過,我發現它不是線程安全的在dss_solve_real
的幾個實例中使用相同的handle
。顯然,出於某種原因,MKL庫更改會在每個創建競爭條件的實例中處理。我閱讀了MKL手冊,但找不到任何相關內容。由於將每個線程分解爲A
是不合邏輯的,因此我想知道是否有任何方法可以解決此問題,並且在任何地方都使用相同的handle
。
在此先感謝您的幫助
謝謝您的意見。我不做任何假設(串行或並行)。事實上,RHS載體異步進入隊列。每當RHS矢量準備就緒時,就會使用免費的工作者(線程)來解決該特定RHS矢量的問題。現在我確信dss_solve_real確實改變了句柄。如果我想鎖定句柄,使用線程將沒有任何理由。 – Pouya
查看我的編輯:我仍然認爲有很多線程可以解決rhs效率不高的問題,即使您可以強制連續解決問題的階段。 –