我正在寫一個使用密集型CPU和內存使用情況的多線程Java程序。 該程序的目標是在圖上執行一些算法。該程序在運行linux的NUMA機器上執行,我希望獲得最佳性能。NUMA體系結構的有效使用
爲此,我爲每個NUMA節點製作一些圖的副本,以便每個線程都能夠訪問本地存儲器上的圖。
本地內存分配的一部分已經通過在分配圖的每個新副本之前設置相關性來完成。這是通過jna完成的,所以我寧願留在這個庫中,也不要添加jni代碼,如果可能的話。
我的問題是我如何檢查工作線程運行在哪個內核上,以便從本地內存中讀取數據?
我知道在執行期間線程與核心的綁定可能會發生變化。但是,內核嘗試在所有時間片上的同一個NUMA節點上運行線程。因此,只有在開始時,檢查線程運行在哪個內核上才能適用於大多數情況。
這是相當困難的事情,即使在C/C++,由於質量差/支持NUMA庫。 – Mysticial
我不需要專門的NUMA庫。只是想知道線程運行在哪個內核上。從核心ID我可以知道NUMA節點沒有問題。 – jutky
我非常懷疑你可以用Java來做到這一點。唯一真正的選擇是C++(我自己是一名Java開發人員)。但是對於NUMA體系結構和並行處理,C++和MPI是唯一的選擇。 – Alexandros