2012-03-09 48 views
9

Điều gì sẽ là cách tốt nhất để đo tốc độ của chương trình của tôi giả sử tôi chỉ có 4 lõi? Rõ ràng là tôi có thể đo lường nó lên đến 4, tuy nhiên nó sẽ là tốt đẹp để biết cho 8, 16, và như vậy.Làm cách nào để đo lường quy mô mã đa luồng của tôi (tăng tốc)?

Lý tưởng nhất là tôi muốn biết số lượng tăng tốc trên số chủ đề, tương tự như biểu đồ này:

Amdahl's law diagram

Có cách nào tôi có thể làm điều này? Có lẽ một phương pháp mô phỏng nhiều lõi?

+4

+1 cho hình ảnh. Câu trả lời ngắn gọn, bạn không thể bỏ qua những dự đoán được giáo dục. – Mysticial

+0

@Mysticial nhưng không nên bạn có thể đo bằng một công cụ như VTune của Intel? –

+0

@ConradFrix Không phải khi bạn đang cố gắng đoán hiệu suất trên 16 lõi mà bạn không có. Mặt khác, bạn có thể sử dụng VTune để lược tả hiệu năng trên 4 lõi và dựa trên những con số đó để cố gắng ngoại suy tới 16 lõi. Đó sẽ là, nhiều hơn hoặc ít hơn, một "dự đoán có học thức". – Mysticial

Trả lời

2

Tôi không nghĩ rằng có một cách thực sự để làm điều này, nhưng một điều mà nói đến cái tâm của tôi là bạn có thể sử dụng một máy ảo để mô phỏng thêm lõi. Trong VirtualBox ví dụ bạn có thể chọn tối đa 16 lõi trong menu chuẩn, nhưng tôi rất tự tin rằng có một số hack, có thể làm nhiều hơn thế và các VirtualMachines khác như VMware thậm chí có thể hỗ trợ nhiều hơn cho Box.

enter image description here

+0

VirtualBox có thể mô phỏng thêm nhiều lõi như thế nào? – CMCDragonkai

+0

@CMCDragonkai Vâng, đó là ảo hóa. Nó có thể nói cho hệ điều hành khách bất cứ điều gì nó muốn. – inf

+0

Liệu nó có đưa các lõi mô phỏng vào lõi vật lý thực? Vì vậy, nếu tôi có 4 lõi, tôi có thể tạo ra 100 lõi mô phỏng bằng VirtualBox? Tôi không có khả năng như vậy! – CMCDragonkai

1

Tôi không tin rằng đây là tốt vì có quá nhiều biến để có thể suy luận một cách chính xác performace. Thậm chí giả sử bạn là 100% song song. Có những yếu tố khác như tốc độ bus và bộ nhớ cache bị bỏ lỡ có thể hạn chế hiệu suất của bạn, chưa kể đến hiệu suất vĩnh cửu. Làm thế nào tất cả các yếu tố này ảnh hưởng đến mã của bạn chỉ có thể được thực hiện mặc dù đo trên nền tảng phần cứng cụ thể của bạn.

2

bamboon và và Doron là chính xác mà nhiều biến là chơi đùa, nhưng nếu bạn có một kích thước đầu vào du dương n, bạn có thể tìm ra các mạnh nhân rộngyếu rộng mã của bạn.

Chia tỷ lệ mạnh đề cập đến việc sửa kích thước vấn đề (ví dụ: n = 1M) và thay đổi số lượng chủ đề có sẵn để tính toán. Tỷ lệ yếu đề cập đến việc sửa kích thước vấn đề cho mỗi chủ đề (n = 10k/thread) và thay đổi số lượng chủ đề có sẵn để tính toán.

Đó là sự thật có rất nhiều biến trong công việc trong bất kỳ chương trình nào - tuy nhiên nếu bạn có một số kích thước đầu vào cơ bản n, có thể nhận được một số semblance về tỷ lệ. Trên một mô phỏng n-body tôi đã phát triển một vài năm trở lại, tôi thay đổi các chủ đề cho kích thước cố định và kích thước đầu vào cho mỗi luồng và có thể tính toán một cách hợp lý một cách đo lường mức độ đa luồng mã được chia tỷ lệ.

Vì bạn chỉ có 4 lõi, bạn chỉ có thể tính toán khả năng mở rộng tới 4 chuỗi. Điều này làm hạn chế khả năng của bạn để xem mức độ ảnh hưởng của nó đến tải trọng chủ yếu. Nhưng đây có thể không phải là vấn đề nếu ứng dụng của bạn chỉ được sử dụng trên các máy tính có số lượng lõi nhỏ.

Bạn thực sự cần phải tự hỏi mình câu hỏi: Điều này sẽ được sử dụng trên 10, 20, 40 + chủ đề? Nếu có, cách duy nhất để xác định chính xác mở rộng các chế độ đó là thực sự đo điểm chuẩn trên nền tảng nơi bạn có phần cứng sẵn có.


Lưu ý phụ: Tùy thuộc vào ứng dụng của bạn, có thể bạn không chỉ có 4 nhân. Một số khối lượng công việc mở rộng quy mô với các chuỗi ngày càng tăng bất kể số lõi thực tế có sẵn, nếu nhiều chủ đề đó dành thời gian "chờ" để điều gì đó xảy ra (ví dụ: máy chủ web).Nếu bạn đang thực hiện tính toán thuần túy, đây không phải là trường hợp

+0

Tôi nghĩ [luật của Amdahl] (http: //en.wikipedia.org/wiki/Amdahl's_law) chỉ có ý nghĩa đối với các tác vụ tốn thời gian CPU. –

3

Xin lỗi, nhưng theo ý kiến ​​của tôi, đo lường đáng tin cậy duy nhất là thực sự có được máy 8, 16 hoặc nhiều lõi hơn và thử nghiệm cái đó.

Độ bão hòa băng thông bộ nhớ, số lượng đơn vị chức năng CPU và tắc nghẽn phần cứng khác có thể có tác động rất lớn đến khả năng mở rộng. Tôi biết từ kinh nghiệm cá nhân rằng nếu một chương trình quy mô trên 2 lõi và trên 4 lõi, nó có thể làm chậm đáng kể khi chạy trên 8 lõi, đơn giản bởi vì nó không đủ để có 8 lõi để có thể mở rộng 8x.

Bạn có thể thử để dự đoán những gì sẽ xảy ra, nhưng có rất nhiều yếu tố cần được xem xét:

  1. cache - kích thước, số lượng lớp, chia sẻ/không chia sẻ
  2. băng thông bộ nhớ
  3. số lõi so với số bộ xử lý tức là nó là máy 8 lõi hoặc máy lõi tứ quad-core
  4. kết nối giữa các lõi - số lõi thấp hơn (2, 4) vẫn có thể hoạt động hợp lý tốt với một chiếc xe buýt, nhưng đối với 8 hoặc nhiều lõi, một kết nối phức tạp hơn ion là cần thiết.
  5. truy cập bộ nhớ - một lần nữa, số lõi thấp hơn hoạt động tốt với mô hình SMP (đối xứng đa xử lý), trong khi số lõi cao hơn cần mô hình NUMA (truy cập bộ nhớ không đồng bộ).
1

Tôi lấy nó bạn đang hỏi về đo lường, vì vậy tôi sẽ không giải quyết vấn đề dự đoán hiệu ứng trên số lõi cao hơn.

Câu hỏi này có thể được xem theo một cách khác: bạn bận rộn đến mức nào trong mỗi luồng và tổng số chúng lên đến mức nào? Vì vậy, trong sáu chủ đề, chạy ở mức sử dụng 50% mỗi, có nghĩa là bạn có 3 bộ vi xử lý tương đương đang chạy. Phân chia bằng cách nói bốn bộ xử lý, có nghĩa là phương pháp của bạn đang đạt được 75% sử dụng. So sánh việc sử dụng đó, so với đồng hồ thời gian tăng tốc thực tế, cho bạn biết mức sử dụng của bạn là chi phí mới, và tốc độ thực tăng lên bao nhiêu. Đó không phải là những gì bạn thực sự quan tâm?

Việc sử dụng bộ vi xử lý có thể được tính theo thời gian thực theo một vài cách khác nhau. Các luồng có thể hỏi một cách độc lập hệ thống về thời gian luồng của chúng, các tỷ lệ tính toán và duy trì các tổng số toàn cầu. Nếu bạn có toàn quyền kiểm soát các trạng thái chặn của mình, bạn thậm chí không cần các cuộc gọi hệ thống, bởi vì bạn chỉ có thể theo dõi tỷ lệ chặn đến các chu kỳ máy không bị chặn, để sử dụng máy tính. Một gói thiết bị đa luồng thời gian thực mà tôi đã phát triển sử dụng các phương pháp như vậy và chúng hoạt động tốt. Bộ đếm đồng hồ CPU trong CPU mới hơn đọc bên trong 20 chu trình máy.

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