我一直在開發一種高效的稀疏矩陣求解器,它在過去的一年中使用多線程(C++ 11 std :: thread)的概念。對我的代碼進行獨立測試是完美的,並且超出了所有預期。但是,將代碼(作爲靜態庫)鏈接到我正在開發的軟件時,性能會更差,並且從我在任務管理器中CPU負載中可以看到的情況來看,所有線程都運行在同一個內核上,而不是在獨立測試期間。 系統加載是否與此有關?將靜態庫鏈接到程序時多線程行爲發生變化
我無權訪問軟件代碼。
任何人有任何建議或有任何解釋?
我一直在開發一種高效的稀疏矩陣求解器,它在過去的一年中使用多線程(C++ 11 std :: thread)的概念。對我的代碼進行獨立測試是完美的,並且超出了所有預期。但是,將代碼(作爲靜態庫)鏈接到我正在開發的軟件時,性能會更差,並且從我在任務管理器中CPU負載中可以看到的情況來看,所有線程都運行在同一個內核上,而不是在獨立測試期間。 系統加載是否與此有關?將靜態庫鏈接到程序時多線程行爲發生變化
我無權訪問軟件代碼。
任何人有任何建議或有任何解釋?
您是否考慮過上下文切換和每個線程的實際工作負載之間的折衷?如果上下文切換恰好比每個線程執行的實際加載更佔用CPU資源,則可能會發生此問題。嘗試增加每個線程所做的工作,並查看問題是否得到解決
我在測試期間使用的工作負載在兩種情況下都是相同的(獨立和應用程序)。在獨立的情況下,我可以看到高達80%的增益,但對於應用程序,性能比順序代碼差。 – Anas 2015-04-06 13:41:43
如果所有線程都運行在同一個核心上,可能是因爲SetProcessAffinityMask()在應用程序的某個地方被調用 – 2015-04-06 12:12:23
@Slava Zhuyko,應用程序是用FORTRAN編寫的,並且該語言不支持SetProcessAffinityMask()。 – Anas 2015-04-06 12:17:37