Tôi đã sử dụng numactl, với tùy chọn --physcpubind. hướng dẫn sử dụng nói:numactl --physcpubind
--physcpubind=cpus, -C cpus
Only execute process on cpus. Etc...
Giả sử tôi có NUMA hệ thống với 3 nút NUMA, trong đó mỗi nút có 4 lõi. NUMA nút 0 có 0, 1, 2, 3 là số lõi. NUMA nút 1 có 4,5,6,7 và NUMA nút 2 có 8,9,10,11. Câu hỏi của tôi là hãy nói rằng tôi chạy chương trình như sau:
export OMP_NUM_THREADS=6
numactl --physcpubind=0,1,4,5,8,9 ./program
tức là tôi sẽ chạy chương trình của tôi với 6 chủ đề và tôi yêu cầu họ được trên lõi CPU 0,1,4,5,8, 9. Ví dụ, nếu tại một số thời điểm trong chuỗi chương trình 0-5 được gán lõi CPU 0,1,4,5,8,9 (setup1). Có thể là tại một số điểm khác trong suốt quá trình thực thi chương trình 0 có thể chạy trên lõi CPU 9 chẳng hạn, và vân vân? I E. sẽ có sự chuyển đổi luồng giữa các lõi CPU? Hoặc các chủ đề duy nhất bị ràng buộc với lõi CPU (như trong setup1)? Cảm ơn.
physcpubind phải là giao diện cho [sched_setaffinity] (http://linux.die.net/man/2/sched_setaffinity), do đó, nó sửa đổi cpuset của quy trình và tất cả chuỗi. Bất kỳ thread nào được phép chạy trên bất kỳ CPU nào từ cpuset, việc di chuyển được cho phép giữa bất kỳ CPU nào từ cpuset. Nếu bạn muốn liên kết chuỗi với CPU, hãy sử dụng sched_setaffinity hoặc pthread_setaffinity_np trực tiếp trong mỗi chuỗi. Hoặc đặt mối quan hệ thông qua thư viện OMP: http://stackoverflow.com/a/8325730/196561 ví dụ: với lệnh 'xuất OMP_PROC_BIND = true'. – osgx
@osgx Cảm ơn. Bạn có thể trả lời câu hỏi này không? Cảm ơn. – tiki