2010-08-23 37 views
10

Tôi đang chơi một chút với chương trình của mình (cố gắng đa lõi một vài phần) và tôi đã nhận thấy "lịch sử CPU" trông hơi khác một chút, tùy thuộc vào số lượng công nhân khởi đầu. 2-4 công nhân dường như tạo ra một quy trình làm việc "ổn định", tuy nhiên việc kết hợp 5-8 công nhân tạo ra hành vi thất thường (từ 0 đến tối đa, xem ảnh). Tôi nên chỉ ra rằng tất cả các lần chạy đều bắt đầu với công suất tối đa "mịn" (ví dụ: 2 lõi chỉ với 25%) và bắt đầu thể hiện hành vi thất thường chỉ sau một phút hoặc lâu hơn. Điều gì đang xảy ra? Tôi có 4 bộ xử lý lõi, và bạn có nghĩ hành vi này có thể liên quan đến thực tế này không?hành vi khác nhau khi sử dụng số lượng nhân viên đa nhân khác nhau

Tôi hy vọng bạn có thể xem các bức ảnh.

2 công nhân 2 workers

3 công nhân 3 workers

4 công nhân 4 workers

5 công nhân 5 workers

6 công nhân 6 workers

7 công nhân 7 workers

8 công nhân 8 workers

+2

Bạn có đang sử dụng gói 'đa lõi' hoặc' doSMP' không? Đây có phải là trên Windows 7 không? – Shane

+0

mục đích của công nhân của bạn là gì? họ hoàn toàn độc lập với nhau? có lẽ công nhân của bạn bị đói. –

+0

Có câu hỏi nào ở đây không? Nếu vậy, nó là cái gì? –

Trả lời

11

Đây là hành vi kinh điển về một quad-core với hyperthreading. R không đạt được với siêu phân luồng, vì nó thường sử dụng lõi hoàn chỉnh để tính toán. Do đó, nếu một bộ xử lý vật lý tạo ra 2 bộ logic, bộ xử lý phải chuyển đổi liên tục giữa hai luồng, điều này giải thích các mẫu.

Đối với R, tôi đã tắt siêu phân luồng trên máy tính của mình. Nó chỉ không giúp, ngược lại. Khi làm việc với chỉ một luồng như R bình thường, bạn mất dung lượng (max là 12,5% thay vì 25%).

+1

Cũng nên nhớ rằng theo mặc định, một quá trình không bị ràng buộc vào một lõi mà là nhảy giữa các lõi trong toàn bộ thời gian. Điều này giải thích lý do tại sao bạn thấy hiệu ứng bạn nhận thấy dần dần tăng thay vì hiển nhiên trên 2 lõi logic khi bạn có hơn 4 nhân viên. Nó cũng giải thích các đồ thị nhọn mà bạn chắc chắn có trên một máy đa lõi. –

+0

Tôi không mua giải thích này. Một chương trình CPU-ràng buộc bằng văn bản có thể sử dụng tốt hơn các CPU. –

+0

@David: bạn không mua gì? Thực tế là nếu bạn chỉ có 4 lõi vật lý và 8 lõi logic, bộ vi xử lý phải chuyển đổi giữa hai luồng? Làm thế nào khác để bạn đặt 2 chủ đề trên một lõi? Đồng thời? Hoặc một thực tế là -unless bạn ràng buộc một quá trình cụ thể cho một lõi-proces chính nó chuyển lõi khi bất cứ khi nào nó có vẻ khả thi? –

Các vấn đề liên quan