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à
multiprocessing
mô-đun. Các multiprocessing.Pool
lớ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 threading
mô-đ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ù.