Tôi có thể sử dụng tất cả 4 lõi CPU của Raspberry Pi không?


11

Tôi đã tự hỏi liệu có một cách đơn giản để "bật" tất cả 100% CPU để tôi có thể chạy các quy trình nhanh hơn (chẳng hạn như tính toán python).

1) Điều này có thể không?

2) Có cách nào dễ dàng để trở lại bình thường không?

3) Có cách nào để sử dụng ít CPU hơn nếu muốn không?

Tôi đang nghĩ về một tương tác dòng lệnh như:

pi@raspberry:~ $ sudo turnOnFourCores python run.py


1
Câu trả lời ngắn gọn là Không
Steve Robillard

16
Câu trả lời dài là "Nếu nó đơn giản, nó sẽ là mặc định"
Shadow

18
Cả hai ý kiến của bạn đang gây hiểu lầm và có thể ngụ ý rằng Pi có 4 lõi nhưng chỉ bao giờ sử dụng 1. Một câu trả lời tốt hơn là tất cả bốn lõi đã có trên, nhưng điều đó Python (và bất kỳ chương trình nào khác, cho rằng vấn đề) sẽ chỉ sử dụng hơn hơn 1 lõi trừ khi chúng đa luồng. Python vẫn có thể bị mắc kẹt một cách hiệu quả khi sử dụng một lõi ngay cả với đa luồng do khóa trình thông dịch toàn cầu, nhưng điều đó hơi vượt quá phạm vi của câu hỏi này.
Sohcahtoa82

13
Để làm rõ, tôi nghĩ OP có sự hiểu lầm về cách hoạt động của CPU đa lõi và câu trả lời của bạn chỉ củng cố sự hiểu lầm của chúng.
Sohcahtoa82

6
Cách dễ nhất để làm cho chương trình Python nhanh hơn là viết lại bằng ngôn ngữ được biên dịch (hoặc ít nhất là thực hiện các tác vụ quan trọng về thời gian sử dụng mô-đun ac).
Milliways

Câu trả lời:


21

Theo mặc định, bất kỳ máy tính nào cũng sẽ cố gắng sử dụng tất cả các lõi của nó khi có thể. Tuy nhiên, nó chỉ có thể đạt được điều này khi một ứng dụng đa luồng. Nếu nó không phải (tức là tập lệnh Python không sử dụng threadingmô-đun), thì nó chỉ có thể sử dụng tối đa, một lõi. Điều này tương đương với 25% CPU trên CPU bốn lõi. Nếu bạn muốn sửa đổi tập lệnh của mình để sử dụng nhiều lõi, bạn có thể chia phép tính của mình thành nhiều phần và đa luồng như trong tài liệu Python .

Cập nhật:

Như Anon đã trả lời , điều này sẽ không hoạt động nếu không hoạt động với GIL của Python (Khóa phiên dịch toàn cầu). Điều này cho phép các tác vụ hoạt động (dường như) cùng một lúc, nhưng không cho phép mã chạy trên nhiều lõi. Nếu bạn đang sử dụng các mô-đun được viết bằng C (ví dụ: numpy), chúng có thể cho phép bạn sử dụng nhiều lõi đi xung quanh giới hạn đó. Ngoài ra, nếu đó không phải là một tùy chọn, Python cung cấp đa xử lý , cho phép bạn chạy bất kỳ tác vụ nào trên nhiều lõi.


Bản cập nhật - đúng - giải thích tại sao phần đầu tiên của câu trả lời là sai đối với Python. Bạn chỉ khắc phục được giới hạn này của Python bằng cách viết các mô-đun C hoặc một số ngôn ngữ được biên dịch, tại thời điểm đó bạn không thực sự viết Python nữa. Nếu hiệu suất là quan trọng, đi đến một ngôn ngữ được biên dịch là câu trả lời đúng. (Đa xử lý không giống nhau từ góc độ sử dụng tài nguyên.)
Brick

4
@Brick Chỉ cần rõ ràng, một ngôn ngữ được biên dịch chắc chắn không phải là một yêu cầu cho đa luồng trong quá trình thích hợp. Heck, ngay cả GIL của Python cũng là một chi tiết triển khai (được cấp cho CPython phổ biến) - có những trình thông dịch Python khác sẽ vui vẻ đa luồng, ví dụ như Jython và IronPython.
Bob

4
Thêm vào sự nhầm lẫn, Python được biên dịch; trong trường hợp CPython, nó biên dịch thành mã byte CPython được chạy trong máy ảo CPython. Đối với Jython, nó được biên dịch sang mã byte Java, được chạy trong JVM. Và cuối cùng, IronPython biên dịch thành CIL, nhắm vào thời gian chạy .NET. Vì vậy, "đi đến một ngôn ngữ được biên dịch" cho hiệu suất không thực sự có ý nghĩa;)
marcelm

bất kỳ máy tính nào cũng sẽ cố gắng sử dụng tất cả các lõi của nó khi có thể. Không thực sự, nó sẽ chỉ sử dụng tất cả các lõi của nó (hoặc làm bất cứ điều gì khác) khi được yêu cầu . Sự khác biệt đó có vẻ rõ ràng hoặc thậm chí bảo trợ cho người có kinh nghiệm, nhưng có vẻ như OP cần đánh giá cao rằng điều đó không tự động xảy ra.
nekomatic

13

Tôi đã tự hỏi liệu có một cách đơn giản để "bật" tất cả 100% CPU để tôi có thể chạy các quy trình nhanh hơn (chẳng hạn như tính toán python).

Không phải theo nghĩa mà tôi nghĩ bạn đang ám chỉ. Đây không phải là một vấn đề cụ thể đối với pi, nó cũng là một ràng buộc logic.

Bản thân các máy tính hiện không có nhiều khả năng để xác định rằng một tiến trình đang chạy như một luồng duy nhất có thể được chạy song song. Lưu ý rằng tại thời điểm họ có khả năng này, sẽ không cần lập trình viên máy tính, bởi vì một hệ thống máy tính có thể làm điều này cũng có thể viết mã riêng của nó 1 ..

Xét biểu thức toán đơn giản sau:

(4 + 2) * 17 / (3 + 6)

Có một số tiềm năng cho điều này được tính toán song song, nhưng nó bị hạn chế về mặt logic. Tôi muốn nói rằng không có điểm nào trong hơn hai luồng, và thậm chí sau đó nó hầu như chỉ là một:

#1 a) 4 + 2 b) 6 * 17 c) 102 / 9
#2 a) 3 + 6

Chủ đề số 2 đã đóng góp bằng cách tính 3 + 6 = 9, được sử dụng trong bước C theo chủ đề số 1, lưu lại một bước. Nhưng đó là xa như song song sẽ có ích ở đây. Trong khi luồng số 2 có thể tính 17/9 trong khi # 1 đang thực hiện 6 * 17, thì việc đó sẽ là vô nghĩa, bởi vì bây giờ bạn có hai đường dẫn khác nhau đến cùng một mục tiêu không thể kết hợp lại. Tức là, số 2 có thể tiếp tục hoạt động:

b) 17 / 9 c) 1.888 * 6

Và kết thúc với kết quả tương tự như chủ đề số 1 (11.333), nhưng họ đã không giúp đỡ nhau ngoài bước A, do đó, việc hai người theo đuổi mục tiêu này là một sự lãng phí thời gian.

(Lưu ý rằng ví dụ này không phải là một nghĩa đen; nó có ý định thể hiện một nguyên tắc logic. Thang đo các tác vụ được xâu chuỗi trong mã người dùng lớn hơn nhiều, nhưng bạn không cần một bài học thực sự về lập trình đa luồng để nắm bắt ý tưởng ở đây.)

Khai thác nhiều bộ xử lý yêu cầu mã được viết để làm điều đó. Bạn không thể đơn giản lấy bất cứ thứ gì và nói, "oh sử dụng cả 4 lõi và làm điều đó nhanh hơn!". Đó không phải là điều sẽ xảy ra. Về mặt logic, rất nhiều vấn đề và nhiệm vụ (.. hoặc hầu hết) liên quan đến các bước không thể xảy ra song song, chúng phải xảy ra theo trình tự.


1. Nhưng hãy xem bình luận của Felix Dombek bên dưới; Tôi không phải là một chuyên gia về AI. Cũng có thể đáng chú ý rằng theo nhận xét của Peter Corde, các bộ hướng dẫn và bộ xử lý hiện đại có thể được HĐH khai thác để tối ưu hóa các thứ rất nhỏ theo cách song song và các đường ống phần cứng cũng làm điều này, mặc dù không phải qua các lõi (một cốt lõi có nhiều hơn một điều đang diễn ra, hoạt động trên luồng hướng dẫn tại các điểm khác nhau trước khi thực hiện cuối cùng của họ). Tôi đã cố gắng bám sát chủ đề của các chủ đề người dùng ở đây vì tôi nghĩ rằng đó là ít nhiều những gì bạn đang nhận được.


4
Tôi đã viết rất nhiều mã số song song và điều này hơi sai lệch về các chi tiết. Bạn không song song ở cấp độ của các phép toán số học riêng lẻ như thế này. .
Gạch

4
@Brick "Bạn không song song hóa ở cấp độ các phép toán số học riêng lẻ như thế này." -> Tất nhiên là bạn không, nhưng tôi sẽ nói rõ hơn rằng đây là một sự tương tự, không phải là một bài học về các loại hạt và bu lông lập trình đa luồng.
goldilocks

4
Tính song song trong tính toán mà bạn sử dụng làm ví dụ được bản địa hóa đến mức nó sẽ tạo ra sự song songmức hướng dẫn trong một chương trình tính toán nó và CPU với việc thực hiện không theo thứ tự có thể tự khai thác tính song song đó.
Peter Cordes

2
RPi3 sử dụng superscalar rộng 2 bậc theo thứ tự en.wikipedia.org/wiki/ARM_Cortex-A53 , do đó, với lịch trình hướng dẫn cẩn thận, trình biên dịch vẫn có thể khai thác ILP bằng cách đặt hai addlệnh bên cạnh nhau để cả hai có thể chạy cùng một chu kỳ đồng hồ. Tuy nhiên, phần nhân và chia phần còn lại sau đây sẽ được tuần tự hóa bởi các phụ thuộc dữ liệu, như bạn đã chỉ ra.
Peter Cordes

1
Xác định các phần song song không nhất thiết đòi hỏi phải có AI mạnh. Theo nghĩa "chung", nó có thể; nhưng có thể dễ dàng tưởng tượng rằng máy tính có thể sử dụng một số cách tiếp cận heuristic mà hầu hết hoạt động trong nhiều trường hợp thực tế. Giống như, một máy tính đã không chứng minh định lý cuối cùng của Fermat, nhưng chắc chắn có các chương trình hoạt động định lý. Lưu ý rằng các trình biên dịch hiện đại cho các ngôn ngữ lập trình đã thực hiện nhiều sắp xếp lại mã như là một phần của các bước tối ưu hóa của chúng, bao gồm lý do trên các phần song song.
Felix Dombek

7

Không cho trăn.

Những người khác đang đề nghị bạn xem xét phân luồng, đây là câu trả lời hợp lệ cho hầu hết các ngôn ngữ, nhưng họ không đưa vào tài khoản mà bạn đang sử dụng python.

GIL python không cho phép bạn sử dụng hiệu quả nhiều lõi.


3
GIL làm cho việc sử dụng cả 4 lõi trở nên khó khăn hơn một chút . Không có cách nào làm cho nó không thể, hoặc thậm chí thực sự là thách thức.
Tên giả

5

Việc sử dụng nhiều lõi đòi hỏi phải phơi bày song song mức độ luồng cho HĐH, điều này thường đòi hỏi người lập trình phải viết một chương trình đa luồng. (Hoặc để chạy một chương trình đơn luồng nhiều lần trên các đầu vào khác nhau, như biên dịch với make -j4)

Trình biên dịch cho một số ngôn ngữ hỗ trợ tự động song song, mặc dù. Ví dụ, C hoặc C ++ với OpenMP có thể biên dịch một for()vòng lặp thông thường thành một chương trình bắt đầu nhiều luồng.

#pragma omp parallel for
for(int i = 0; i < 1000000; ++i)
{
   A[i] = B[i] * constant + C[i];
}

Tuy nhiên, điều này phải xảy ra khi bạn viết hoặc biên dịch chương trình. Không có cách nào để phần cứng và hệ điều hành hiện tại sử dụng nhiều lõi để tăng tốc chương trình đơn luồng.


Liên quan: Làm thế nào để một luồng duy nhất chạy trên nhiều lõi? : trả lời: họ không. Nhưng có nhiều loại song song khác, như song song ở mức Hướng dẫn mà một lõi CPU duy nhất tìm thấy và khai thác để chạy một luồng nhanh hơn một lệnh tại một thời điểm.

Câu trả lời của tôi cho câu hỏi đó đi vào một số chi tiết về cách các CPU hiện đại tìm và khai thác song song mức độ hướng dẫn chi tiết. (Chủ yếu tập trung vào x86). Đó chỉ là một phần trong cách các CPU hoạt động bình thường, bằng cách có nhiều hướng dẫn trong chuyến bay cùng một lúc và không phải là thứ bạn cần kích hoạt đặc biệt. (Có các bộ đếm hiệu suất có thể cho phép bạn xem có bao nhiêu lệnh trên đồng hồ mà CPU của bạn quản lý để chạy trong khi thực hiện chương trình, hoặc các biện pháp khác.)

Lưu ý rằng RPi3 sử dụng lõi CPU ARM Cortex-A53 theo thứ tự . Mỗi lõi là siêu khối 2 chiều (2 hướng dẫn trên mỗi đồng hồ khi ILP cho phép), nhưng không thể sắp xếp lại các hướng dẫn để tìm thêm song song mức hướng dẫn và ẩn độ trễ.

Tuy nhiên, CPU được sắp xếp theo đường ống, do đó, tổng số hướng dẫn trong chuyến bay (từ tìm nạp và giải mã tất cả các cách đến giai đoạn ghi lại ở cuối đường ống) là rất đáng kể. Khi phụ thuộc dữ liệu không giới hạn mọi thứ, có thể có 2 hướng dẫn trong mỗi giai đoạn đường ống mà CPU đang làm việc, với thông lượng là 2 hướng dẫn trên mỗi đồng hồ. (Đó là ý nghĩa của 2 chiều rộng.)

Nó không thể thực hiện các lệnh không theo thứ tự, nhưng với thứ tự lệnh cẩn thận (thường là bởi trình biên dịch), nó vẫn có thể ẩn độ trễ của một lệnh mất nhiều chu kỳ để đầu ra của nó sẵn sàng. (ví dụ: tải ngay cả khi nó truy cập vào bộ đệm hoặc bội số sẽ mất nhiều chu kỳ, so với việc thêm sẵn sàng cho chu kỳ tiếp theo). Bí quyết là đặt hàng các hướng dẫn asm để có nhiều hướng dẫn độc lập giữa một hướng dẫn tạo ra kết quả và hướng dẫn sử dụng nó.

Có phần mềm (trình biên dịch) hướng dẫn lập lịch tĩnh dễ vỡ hơn so với việc có phần cứng có thể sắp xếp lại bên trong trong khi vẫn duy trì ảo giác chạy theo thứ tự chương trình. Trình biên dịch rất khó để thực hiện công việc tốt như ngay cả một cửa sổ không theo thứ tự nhỏ để sắp xếp lại các hướng dẫn vì lỗi bộ nhớ cache là không thể đoán trước và rất khó để phân tích chuỗi phụ thuộc qua các lệnh gọi trong thời gian biên dịch. Và số lượng thanh ghi bị giới hạn mà không cần đổi tên đăng ký phần cứng.


Tất cả điều này là sự thoải mái nhỏ khi mã của bạn chạy chậm hơn bạn muốn. Chắc chắn có rất nhiều thứ hay ho dưới mui xe trong Cortex-A53, nhưng có nhiều thứ hay ho hơn dưới mui xe trong Cortex-A57 (như thực hiện theo thứ tự tối đa 3 lệnh trên mỗi đồng hồ), và thậm chí nhiều hơn trong một CPU x86 lớn như Skylake (chưa kể đến sự khác biệt về tốc độ xung nhịp).

Cortex-A53 khá tuyệt vời so với https://en.wikipedia.org/wiki/Classic_RISC_pipeline giống như MIPS ban đầu mà bạn tìm hiểu về lớp kiến ​​trúc máy tính, nhưng theo tiêu chuẩn hiện đại thì nó khá thấp.


1
"Không có cách nào để phần cứng và hệ điều hành hiện tại sử dụng nhiều lõi để tăng tốc chương trình đơn luồng." không đúng sự thật Chẳng hạn, trong một chương trình Java có luồng đơn, Java có thể thực hiện tất cả các phân tích / biên dịch thời gian chạy của nó trên các lõi CPU bổ sung. Phân tích thời gian chạy là một vấn đề lớn vì nó có thể quyết định thực hiện một số tối ưu hóa dựa trên việc chạy các đường dẫn mã mà không tốn bất kỳ "luồng đơn" nào của bạn và có thể tăng tốc đáng kể với những gì nó học được từ phân tích. Nói chung mặc dù quan điểm của bạn là một trong những tốt.
Bill K

@BillK Để công bằng, "chương trình" trong bối cảnh đó java, không myapp.jar, và chắc chắn nó không phải là một luồng.
goldilocks

1
Đúng, tôi chỉ chỉ ra rằng tùy thuộc vào cách thức thời gian chạy được thiết kế "mã bạn viết", mặc dù chỉ có một luồng, có thể tận dụng các lõi bổ sung mà không mã hóa rõ ràng nó như một ứng dụng đa luồng. Python cũng có thể cung cấp thời gian chạy mạnh mẽ hơn nhưng nó sẽ là vô nghĩa. Dù sao đó cũng không phải là một bước nhảy lớn - tôi nghĩ thậm chí java chỉ sử dụng như một lõi 1/2 bổ sung để trợ giúp với một ứng dụng luồng đơn.
Bill K

" Không có cách nào để phần cứng và hệ điều hành hiện tại sử dụng nhiều lõi để tăng tốc chương trình đơn luồng. " Và ngay sau đó bạn giải thích cách phần cứng thực hiện các lệnh song song.
Thomas Weller

3
@ThomasWeller Có, nhưng để kén chọn bộ xử lý đường ống không sử dụng nhiều lõi; nó được chứa trong một lõi, nhưng nó cho phép làm việc trên nhiều luồng lệnh. Tức một dạng song song, nhưng nó không phải là một dạng của luồng đa lõi.
goldilocks

4

Đây không phải là cách CPU hoạt động ... cả.

Vì hiện tại, CPU của bạn hoàn toàn có khả năng chạy ở mức sử dụng 100%, giả sử rằng nó không bị điều chỉnh do các vấn đề liên quan đến nhiệt độ ở 80 độ C trở lên. Điều đó đang được nói, bạn (nói chung) không muốn thấy CPU của mình được chốt ở mức 100%. Nếu bạn thường xuyên sử dụng 100% CPU, có thể bạn sẽ xử lý quá nhiều bộ xử lý của mình. Điều này sẽ gây ra nói lắp và trải nghiệm người dùng thường không hài lòng.

Để so sánh với một cái gì đó vật lý hơn, việc sử dụng CPU của bạn rất giống như một chiếc xe hơi. Chiếc xe có khả năng đi được 100 dặm / giờ, nhưng rất có thể đồng hồ tốc độ của bạn sẽ đọc được thứ gì đó đáng kể. Khi ở trong thị trấn, bạn có thể không bao giờ có thể nhận được khoảng 25 dặm / giờ. Tuy nhiên, điều đó không thay đổi rằng chiếc xe có thể đi được 100 dặm / giờ. Bạn chỉ đơn giản là không đẩy mạnh chân ga đủ mạnh.

Nếu bạn chỉ đơn giản làm cho RPi làm được nhiều việc hơn (đẩy nhiều hơn vào máy gia tốc), bạn sẽ thấy con số sử dụng CPU tăng lên. Ví dụ, xem việc sử dụng CPU khi bạn chạy lệnh yestrong cửa sổ đầu cuối (Hãy nhớ rằng ctrl+ckết thúc các lệnh đầu cuối). Điều này sẽ tăng CPU của bạn thêm 25% vì nó tối đa hóa một trong bốn lõi CPU của bạn.


5
Tôi nghĩ rằng câu trả lời này là sai lệch khi nói rằng bạn thường không muốn CPU của mình chạy với mức sử dụng 100%. Có rất nhiều ứng dụng chuyên sâu về số mà bạn hoàn toàn muốn sử dụng 100% vì bạn đã dành riêng cho máy (hoặc máy) để tính toán. Để có được thời gian siêu máy tính thực sự, bạn thường phải chứng minh rằng mã của bạn được tối ưu hóa đủ tốt để làm điều này, nếu không họ sẽ từ chối bạn như một sự lãng phí tài nguyên. Nếu bạn có một cụm Pi, rõ ràng bạn không nhận được hiệu năng siêu máy tính, nhưng điều đó có thể khiến việc sử dụng tối đa hóa nó trở nên quan trọng hơn, không phải ít hơn!
Gạch

3
Tôi đồng ý với Brick theo nghĩa có vẻ như ngụ ý ở đây rằng nếu bộ xử lý ở mức 25%, thì đó là vì nó tiết kiệm gas hoặc tuân theo giới hạn tốc độ;) hoặc lịch sự và không phải tài nguyên hog. Bạn có thể muốn làm rõ hơn rằng nó thường bởi vì bất kỳ nhiệm vụ nào đang chờ trong I / O nhiều thời gian. Những thứ có thể chạy một lõi duy nhất sẽ tăng lên. Điều (lý tưởng) giữ cho điều này không làm gián đoạn giao diện người dùng là cắt thời gian - nhưng thực tế, nó vẫn khá dễ dàng để gây nhiễu cho một máy lõi đơn nhỏ.
goldilocks

Việc sử dụng CPU 100% thường không gây ra UX kém. Thậm chí 1000% có thể đủ tốt vì hầu hết các chương trình không bị giới hạn bởi CPU mà bởi các yếu tố khác. Các chương trình duy nhất trở nên chậm do tải CPU quá lớn là các chương trình thực sự sử dụng CPU mọi lúc.
Oskar Skog

4

Các câu trả lời khác cung cấp chi tiết tốt, nhưng dường như không giải quyết (các) câu hỏi của bạn một cách cụ thể.

  1. Có, nếu chương trình (và hệ điều hành) được lập trình để chiếm nhiều lõi. ('Threading' là thuật ngữ trong lập trình ở đây)
  2. Máy sử dụng nhiều hoặc ít từng lõi mà nó cần, để hoàn thành nhiệm vụ. vì vậy không cần phải thay đổi gì cả
  3. Bạn có thể đặt giới hạn cho việc sử dụng tối đa, nhưng không cần sử dụng bình thường. hãy xem câu trả lời tại đây: - /unix/151883/limiting- Processes -to- not - process - more - than -10- of - cpu - usage

Lưu ý:

Nếu bạn đang tìm cách cải thiện hiệu suất của pi tổng thể, bạn có thể muốn xem qua Ép xung. Điều này cho phép CPU chạy với tốc độ nhanh hơn. Nhược điểm là tăng sản xuất nhiệt, tuổi thọ thấp hơn của bộ xử lý và tăng mức tiêu thụ điện năng.


2

Nếu có thể tôi sẽ tham số hóa tập lệnh và thực thi chúng trong các quy trình Python riêng biệt. Ví dụ:

cat parameters.txt | xargs -n1 -P4 python run.py

Một cách khác là thư viện đa xử lý đã được đề cập, cho phép bạn xử lý các quá trình python kết hợp. Nhưng điều đó cũng đòi hỏi bạn phải có một danh sách các tham số (như tên tệp) mà bạn muốn các phép tính được chạy.


Phần đầu tiên: Có, giả sử vấn đề trong tay là song song lúng túng .
Peter Mortensen

Ahaa đúng, tôi chỉ quen với nhóm xử lý đa xử lý mapnhưng rõ ràng nó cũng có nhiều cấu trúc bộ nhớ chia sẻ khá tinh vi.
NikoNyrh

1

Tôi nghĩ OP có thể không hiểu đầy đủ các khái niệm về lập trình đa lõi / đa luồng và mức độ khó sử dụng hoàn toàn 100% của đa lõi trừ khi thuật toán có thể dễ dàng trở thành một vấn đề song song đáng xấu hổ .

Để biết thêm thông tin, bạn có thể đọc thêm về tiêu đề bài viết nổi tiếng "Bữa trưa miễn phí đã kết thúc" http://www.gotw.ca/publications/concurrency-ddj.htm


0

Nếu bạn muốn kiểm tra RPI của bạn. Bạn có thể chạy stressnhư ở đây , sau đó bạn có thể thấy CPU của bạn đang được sử dụng như thế nào htop. Điều này rất hữu ích vì bạn có thể xem nguồn điện của mình có đủ không, nếu không đủ RPI của bạn sẽ cố gắng sử dụng quá nhiều dòng điện (cường độ dòng điện) và nó sẽ tắt.

Mặt khác, nếu bạn muốn sử dụng kịch bản python, bạn nên xem joblibcái nào hoạt động tốt khi bạn muốn song song hóa các quy trình, và do đó bạn sẽ sử dụng số lượng bộ xử lý bạn muốn.


0

Mặc dù tất cả các câu trả lời này đều đúng theo những cách khác nhau nhưng sự thật là hệ điều hành sẽ tự động sử dụng các lõi khác nhau để phân tán tải. Bạn có thể thấy điều này với một chương trình python đơn giản (temp.py nói)

while True:
  x = 1.0

mở một thiết bị đầu cuối từ máy tính để bàn RPi của bạn và loại $ topsẽ hiển thị bộ xử lý hoạt động. Sau đó mở một thiết bị đầu cuối khác python3 temp.pyvà bạn sẽ thấy công việc python3 tăng lên 100% thời gian xử lý. Sau đó mở một thiết bị đầu cuối khác và lặp lại quá trình và xem cách bạn di chuyển lên tới 400%. Vì vậy, ở một cấp độ như @Shadow nhận xét, nó đơn giản và nó là mặc định. Tuy nhiên, việc thiết kế các chương trình có thể sử dụng xử lý song song là không tầm thường như những người khác đã giải thích.


0

Câu trả lời là CÓ! Bạn đơn giản phải viết chương trình của bạn để nhận ra chúng và sử dụng chúng. Các chương trình làm điều này có thể sử dụng các lõi. Tôi viết của tôi để làm điều này trong Java và do đó tôi có thể.

Các câu trả lời trên của các nhà phát triển Python có một khái niệm rất hạn chế về câu trả lời này và do đó có thể rất khó hiểu nhưng câu trả lời là CÓ và chỉ CÓ!


Bạn có thể vui lòng giải thích?
SDsolar

0

Vì OP không chỉ định python trong câu hỏi của anh ấy, tôi muốn đề xuất hai ngôn ngữ hiện đại hơn hoạt động tốt trên Raspberry Pi và có những cách rất dễ sử dụng đồng thời.

Yêu thích hiện tại của tôi là ngôn ngữ Rust. Tôi đã viết và biên soạn các chương trình trên Pi. Rust rất hay ở chỗ nó ngăn chặn nhiều loại lỗi con trỏ và tình trạng chủng tộc, giúp việc viết mã đồng thời vừa dễ dàng và an toàn hơn. Rust được dự định là một ngôn ngữ lập trình hệ thống, nhưng nó có thể làm được khá nhiều thứ mà C có thể làm.

Một ngôn ngữ khác là Go (còn được gọi là Golang để giúp tìm kiếm dễ dàng hơn). Go được tạo bởi nhóm Google và là một ngôn ngữ hợp lý trưởng thành. Thật dễ dàng để thực hiện coroutines trong Go, mà họ gọi là "thói quen đi".

Cả hai ngôn ngữ này đều có thể biên dịch mã trên Raspberry Pi, thậm chí là Pi Zero. Tuy nhiên, cả hai đều có thể được biên dịch chéo từ một máy tính nhanh hơn, phù hợp với các chương trình lớn.

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.