ฉันกำลังเขียนโปรแกรมจาวาแบบมัลติเธรดที่ใช้ CPU และหน่วยความจำอย่างเข้มข้น เป้าหมายของโปรแกรมคือการรันอัลกอริทึมบางอย่างบนกราฟ โปรแกรมดำเนินการบนเครื่อง NUMA ที่ใช้ Linux และฉันต้องการได้รับประสิทธิภาพที่ดีที่สุดเท่าที่จะเป็นไปได้
ในการทำเช่นนี้ ฉันจึงทำสำเนากราฟจำนวนหนึ่งต่อโหนด NUMA แต่ละโหนด เพื่อให้แต่ละเธรดสามารถเข้าถึงกราฟในหน่วยความจำภายในเครื่องได้
การจัดสรรหน่วยความจำภายในส่วนหนึ่งเสร็จสิ้นแล้วโดยการตั้งค่าความสัมพันธ์ก่อนที่จะจัดสรรกราฟใหม่แต่ละสำเนา สิ่งนี้เสร็จสิ้นด้วย jna ดังนั้นฉันชอบที่จะอยู่กับไลบรารีนี้ต่อไปและไม่เพิ่มโค้ด jni หากเป็นไปได้
คำถามของฉันคือฉันจะตรวจสอบได้อย่างไรว่าคอร์ของผู้ปฏิบัติงานกำลังทำงานอยู่เพื่ออ่านจากหน่วยความจำในเครื่องได้อย่างไร
ฉันเข้าใจว่าการเชื่อมโยงแบบเธรดต่อคอร์อาจเปลี่ยนแปลงได้ระหว่างการดำเนินการ อย่างไรก็ตาม เคอร์เนลพยายามเรียกใช้เธรดบนโหนด NUMA เดียวกันตลอดเวลา ดังนั้นการตรวจสอบเฉพาะในการเริ่มต้นเท่านั้นว่าเธรดใดที่รันอยู่คอร์ใดจะทำงานได้ในกรณีส่วนใหญ่
man 7 numa
จะช่วยได้บางส่วนบน Linux ก็ตาม - person Aaron Altman   schedule 12.06.2014