Cách tăng mức sử dụng CPU của Python


21

Tôi sử dụng Python để thực thi một số thuật toán và bất kể tôi sử dụng Python nào và tôi đã thử nhiều phiên bản, mức sử dụng CPU đạt tối đa 25%. Tại sao Python không tận dụng phần còn lại của tài nguyên CPU của tôi? Tôi đã thay đổi mức độ ưu tiên của dịch vụ từ bình thường sang cao và sau đó thành thời gian thực, với khởi động lại ở giữa, nhưng không có gì thay đổi.

Có cách nào để khiến Python sử dụng 50% hoặc thậm chí nhiều hơn CPU của tôi không?


cpu của bạn là một cpu đa lõi?
Journeyman Geek

vâng, đó là i5-480M và trong bảng điều khiển> tùy chọn nguồn> cpu tối thiểu / tối đa 100%
Christos K.

Câu trả lời:


20

Nói một cách đơn giản, bạn đang chạy một ứng dụng luồng đơn trong một hệ thống có 4 lõi logic - như vậy, bạn có một quy trình, sử dụng tất cả các lõi.

Bạn sẽ (và điều này không tầm thường) cần phải viết lại thuật toán thành đa luồng hoặc xem liệu bạn có thể chạy 2 hoặc nhiều phiên bản, trên các lõi cụ thể để sử dụng nhiều CPU hơn không. Không có cách nào khác.


Tôi sợ rằng đây là trường hợp, nhưng trong sơ đồ sử dụng cpu trong trình quản lý tác vụ windows, tôi không thấy 1 sơ đồ nào được chọn trong khi thuật toán được thực thi, ngược lại tôi thấy tất cả chúng đều tăng đáng kể.
Christos K.

1
Hệ thống của bạn đang cân bằng tải giữa các lõi. Tuy nhiên, không có hai lõi được sử dụng cùng một lúc.
gronostaj

Các bạn đã xác nhận nỗi sợ hãi của tôi, dường như đã đến lúc tôi bắt đầu đọc về xâu chuỗi
Christos K.

@ fractal_7: Việc xâu chuỗi có thể không mang lại lợi ích mà bạn mong đợi. Xem câu trả lời của tôi dưới đây.
Roland Smith

15

Ngôn ngữ Python có trước CPU đa lõi, vì vậy không có gì lạ khi nó không sử dụng chúng nguyên bản.

Ngoài ra, không phải tất cả các chương trình có thể kiếm lợi từ nhiều lõi. Một phép tính được thực hiện theo các bước, trong đó bước tiếp theo phụ thuộc vào kết quả của bước trước đó, sẽ không nhanh hơn khi sử dụng nhiều lõi hơn. Các vấn đề có thể được vector hóa (áp dụng cùng một phép tính cho các mảng dữ liệu lớn) có thể tương đối dễ dàng để sử dụng nhiều lõi vì các phép tính riêng lẻ là độc lập.

Khi bạn đang thực hiện nhiều phép tính, tôi cho rằng bạn đang sử dụng numpy ? Nếu không, hãy kiểm tra nó. Nó là một phần mở rộng được viết bằng C có thể sử dụng các thư viện đại số tuyến tính được tối ưu hóa như ATLAS. Nó có thể tăng tốc đáng kể các phép tính số so với Python tiêu chuẩn.

Phải nói rằng, có một số cách để sử dụng nhiều lõi với python.

  • Tích hợp là multiprocessingmô-đun. Các multiprocessing.Poollớp học cung cấp vector hóa trên nhiều CPU với map()và có liên quan phương pháp. Có một sự đánh đổi ở đây mặc dù. Nếu bạn phải giao tiếp một lượng lớn dữ liệu giữa các quy trình thì chi phí đó có thể phủ nhận lợi thế của nhiều lõi.
  • Sử dụng một bản dựng phù hợp của numpy. Nếu numpy được xây dựng với thư viện ATLAS đa luồng, nó sẽ nhanh hơn đối với các vấn đề lớn.
  • Sử dụng các mô-đun mở rộng như numexpr , python song song , corepy hoặc Copenhagen Vector Byte Code .

Lưu ý rằng threadingmô-đun không phải là tất cả những gì hữu ích trong vấn đề này. Để giữ cho việc quản lý bộ nhớ đơn giản, khóa trình thông dịch toàn cầu ("GIL") thực thi rằng chỉ một luồng tại một thời điểm có thể thực thi mã byte python. Các mô-đun bên ngoài như numpy có thể sử dụng nhiều luồng nội bộ, mặc dù.


Cho đến nay tôi đã sử dụng python 2.7 ironpython và thử pypy. Tôi sẽ cho numpy một cơ hội. nhưng tôi vẫn sẽ phải đọc trước khi có thể sử dụng bất kỳ mô đun đa xử lý nào.
Christos K.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.