Câu trả lời:
Trong tiến trình, cuộc gọi sẽ là sched_setaffinity()
, hoặc cho các công cụ pthreads,pthread_setaffinity_np()
Trên một lưu ý liên quan, nếu bạn lo lắng về mối quan hệ CPU của chương trình của mình, có thể đáng để chú ý đến cách thức phân bổ bộ nhớ. Các hệ thống lớn hơn có bộ nhớ được gắn vào nhiều bộ điều khiển (nghĩa là nhiều ổ cắm CPU, mỗi ổ cắm riêng) sẽ có độ trễ và băng thông thay đổi giữa các cặp bộ nhớ CPU khác nhau. Bạn cũng sẽ muốn xem xét mối quan hệ của NUMA, bằng cách sử dụng numactl
lệnh hoặc hệ thống gọi mà nó hoạt động. Một chương trình tôi đã làm việc đã cải thiện hiệu suất 10% từ việc này.
taskset -c 1-3 ./a.out arg1 arg2
khởi chạy a.out
quy trình với các đối số và ái lực đã cho được đặt thành bộ xử lý 1, 2 hoặc 3 (không dựa trên).
Dưới đây là chương trình thử nghiệm C tối thiểu có thể được sử dụng để xem nó hoạt động: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787
taskset -p -c 1,3 45678
hơn làtaskset -c 1,3 -p 45678
; tức là, đó-c 1,3
là một đặc tả mặt nạ và, như vậy, phải được đặt giữa-p
vàpid
.