GoGPT Best VPN GoSearch

Biểu tượng yêu thích OnWorks

mpy - Trực tuyến trên đám mây

Chạy mpy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks qua Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

Đây là lệnh mpy có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình giả lập trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


mpy - Tin nhắn chuyển Yorick

SYNOPSIS


mpirun -np mp_size cây thuốc phiện [ -NS pfile1.i [ -NS pfile2.i [ ... ]]] [ -tôi tập tin1.i [ -tôi tập tin2.i [
...]]]
mpirun -np mp_size cây thuốc phiện -lô hàng tập tin.i

MÔ TẢ


Yorick là một ngôn ngữ được thông dịch giống như Basic hoặc Lisp, nhưng nhanh hơn rất nhiều. Nhìn thấy yểu điệu (1) tới
tìm hiểu thêm về nó.
Mpy là một phiên bản song song của Yorick dựa trên Giao diện truyền thông báo (MPI). Các
cú pháp chính xác để khởi chạy một công việc song song phụ thuộc vào môi trường MPI của bạn. Nó có thể
cần thiết để khởi chạy một daemon đặc biệt trước khi gọi mirun hoặc một lệnh tương đương.

Giải thích
Gói mpy giao tiếp yorick với thư viện lập trình song song MPI. MPI là viết tắt của
Giao diện truyền tin; ý tưởng là kết nối nhiều trường hợp của yorick
giao tiếp với nhau qua tin nhắn. Mpy có thể thực hiện đơn giản, song song cao
nhiệm vụ như các chương trình được thông dịch thuần túy hoặc nó có thể bắt đầu và điều khiển được biên dịch phức tạp tùy ý
các gói miễn phí sử dụng API MPI đã biên dịch. API được thông dịch không nhằm mục đích
trở thành một trình bao bọc của Bộ KH & ĐT; thay vào đó nó bị tước bỏ đến mức tối thiểu nhất.

Đây là phiên bản 2 của mpy (phát hành năm 2010); nó không tương thích với phiên bản 1 của mpy
(phát hành vào giữa những năm 1990), vì phiên bản 1 có nhiều lỗi thiết kế khiến nó rất
chương trình khó viết, không có điều kiện chủng tộc và không thể mở rộng quy mô lên hàng triệu
của bộ vi xử lý. Tuy nhiên, bạn có thể chạy hầu hết các chương trình mềm phiên bản 1 trong phiên bản 2 bằng cách
mp_include, "mpy1.i" trước khi bạn mp_include bất kỳ tệp nào xác định tác vụ song song mpy1 (đó là
trước khi bất kỳ tệp nào tiếp tục một lệnh gọi đến mp_task.)

Sử dụng ghi chú
Môi trường MPI không thực sự được cụ thể hóa bởi tiêu chuẩn; môi trường hiện tại là
rất thô sơ và đặc biệt ủng hộ các công việc hàng loạt không tương tác. Số lượng quy trình là
cố định trước khi MPI bắt đầu; mỗi quy trình có một thứ hạng, một số từ 0 đến một nhỏ hơn
số lượng quá trình. Bạn sử dụng thứ hạng làm địa chỉ để gửi tin nhắn và quá trình
nhận được tin nhắn có thể thăm dò để xem xếp hạng nào đã gửi tin nhắn đến nó, và tất nhiên
nhận những tin nhắn đó.

Một vấn đề chính trong việc viết một chương trình truyền thông báo là xử lý các sự kiện hoặc thông báo
đến một đơn đặt hàng không có kế hoạch. Bộ KH & ĐT chỉ đảm bảo rằng một chuỗi các thông báo được gửi bởi
xếp hạng A đến hạng B sẽ đến theo thứ tự đã gửi. Không có đảm bảo về thứ tự của
sự xuất hiện của những tin nhắn đó so với những tin nhắn được gửi đến B từ xếp hạng thứ ba C. Trong
cụ thể, giả sử A gửi tin nhắn cho B, sau đó A gửi tin nhắn cho C (hoặc thậm chí trao đổi
một số tin nhắn với C) dẫn đến việc C gửi một tin nhắn đến B. Tin nhắn từ C
có thể đến B trước thông báo từ A. Một chương trình MPI không cho phép điều này
khả năng có một lỗi được gọi là "điều kiện chủng tộc". Điều kiện cuộc đua có thể rất phức tạp,
đặc biệt là khi số lượng quá trình lớn.

Giao diện thông dịch mpy cơ bản bao gồm hai biến:
mp_size = số lần xử lý
mp_rank = xếp hạng của quá trình này và bốn chức năng:
mp_send, to, msg; // gửi tin nhắn để xếp hạng "tới"
msg = mp_recv (từ); // nhận thư từ xếp hạng "từ"
rank = mp_probe (khối); // truy vấn người gửi tin nhắn đang chờ xử lý
mp_exec, string; // phân tích cú pháp và thực thi chuỗi trên mọi thứ hạng

Bạn gọi mp_exec ở hạng 0 để bắt đầu một tác vụ song song. Do đó, khi chương trình chính được tạo
kết thúc, tất cả các xếp hạng khác với xếp hạng 0 quay trở lại vòng lặp nhàn rỗi, chờ tiếp theo
mp_exec. Xếp hạng 0 chọn dòng đầu vào tiếp theo từ stdin (nghĩa là, đợi đầu vào tại
nhắc trong một phiên tương tác) hoặc chấm dứt tất cả các quy trình nếu không có thêm thông tin đầu vào
có sẵn trong một phiên hàng loạt.

Gói mpy sửa đổi cách yorick xử lý chỉ thị phân tích cú pháp #include và bao gồm
và yêu cầu các chức năng. Cụ thể, nếu một tác vụ song song đang chạy (nghĩa là một hàm đã bắt đầu
bởi mp_exec), tất cả chúng đều trở thành các hoạt động tập thể. Tức là, hạng 0 đọc toàn bộ
nội dung tệp và gửi nội dung đến các quy trình khác dưới dạng thông báo MPI (như
mp_exec của nội dung tệp). Mọi quy trình khác với xếp hạng 0 chỉ chạy trong
nhiệm vụ song song; bên ngoài một nhiệm vụ song song khi chỉ có xếp hạng 0 đang chạy (và tất cả các cấp bậc khác
đang đợi mp_exec tiếp theo), lệnh #include và bao gồm và yêu cầu
các hàm trở lại hoạt động nối tiếp thông thường của chúng, chỉ ảnh hưởng đến xếp hạng 0.

Khi mpy khởi động, nó ở chế độ song song, do đó tất cả các tệp yorick bao gồm khi nó
bắt đầu (các tệp trong Y_SITE / i0) được bao gồm dưới dạng các hoạt động tập thể. Không có cái này
tính năng, mọi quy trình yorick sẽ cố gắng mở và đọc phần khởi động bao gồm các tệp,
làm quá tải hệ thống tệp trước khi mpy được khởi động. Chuyển nội dung của những
các tệp dưới dạng tin nhắn MPI là cách duy nhất để đảm bảo có đủ băng thông cho mọi
quá trình đọc nội dung của một tệp duy nhất.

Tệp cuối cùng được bao gồm khi khởi động là tệp được chỉ định trong tùy chọn -batch hoặc
tệp custom.i. Để tránh các vấn đề với mã trong custom.i có thể không an toàn cho
thực thi song song, mpy không tìm custom.i mà thay vào đó là custommp.i. Các
hướng dẫn trong tệp -batch hoặc trong custommp.i được thực thi ở chế độ nối tiếp trên xếp hạng 0
chỉ một. Tương tự, mpy ghi đè hàm process_argv thông thường, do đó -i và các
các tùy chọn dòng lệnh chỉ được xử lý trên xếp hạng 0 trong chế độ nối tiếp. Ý định trong tất cả những
các trường hợp là làm cho tệp -batch hoặc custommp.i hoặc -i bao gồm chỉ thực thi trên xếp hạng 0, như
nếu bạn đã nhập chúng vào đó một cách tương tác. Bạn có thể tự do gọi mp_exec từ bất kỳ
để bắt đầu các tác vụ song song, nhưng bản thân tệp là nối tiếp.

Một tùy chọn dòng lệnh bổ sung được thêm vào tập hợp thông thường:
mpy -j somefile.i
bao gồm somefile.i ở chế độ song song trên tất cả các cấp (một lần nữa, -i khác.i chỉ bao gồm other.i
trên xếp hạng 0 trong chế độ nối tiếp). Nếu có nhiều tùy chọn -j, song song bao gồm xảy ra
theo thứ tự dòng lệnh. Nếu tùy chọn -j và -i được trộn lẫn, tuy nhiên, tất cả -j bao gồm xảy ra
trước bất kỳ -i bao gồm.

Do sự phức tạp của các hàm bao gồm trong mpy, tính năng tự động tải là
Vô hiệu hóa; nếu mã của bạn thực sự kích hoạt bao gồm bằng cách gọi một hàm tự động tải, mpy
sẽ dừng lại khi có lỗi. Bạn phải tải rõ ràng bất kỳ chức năng nào cần thiết cho một song song
các tác vụ sử dụng hàm request sẽ tự gọi chúng bên trong một tác vụ song song.

Hàm mp_send có thể gửi bất kỳ mảng yorick số nào (kiểu char, short, int, long,
float, double, hoặc complex) hoặc một giá trị chuỗi vô hướng. Quá trình gửi tin nhắn
qua MPI chỉ bảo toàn số phần tử, vì vậy mp_recv chỉ tạo ra một giá trị vô hướng hoặc
mảng giá trị 1D, bất kể thứ nguyên nào đã được chuyển tới mp_send.

Hàm mp_recv yêu cầu bạn chỉ định người gửi thư bạn muốn
nhận. Nó chặn cho đến khi một tin nhắn thực sự đến từ người gửi đó, xếp hàng bất kỳ
tin nhắn từ những người gửi khác có thể đến trước. Các tin nhắn trong hàng đợi sẽ là
đã truy xuất đơn đặt hàng nhận được khi bạn gọi mp_recv cho người gửi phù hợp. Các
Tính năng xếp hàng giúp việc tránh các loại điều kiện đua đơn giản nhất trở nên dễ dàng hơn đáng kể
khi bạn viết các chương trình song song được thông dịch.

Hàm mp_probe trả về danh sách tất cả những người gửi thư được xếp hàng đợi (hoặc nil nếu
hàng đợi trống). Gọi mp_probe(0) để trả về ngay lập tức, ngay cả khi hàng đợi trống.
Gọi số mp_probe(1) để chặn nếu hàng đợi trống, chỉ trả lại khi có ít nhất một thông báo
có sẵn cho mp_recv. Gọi mp_probe(2) để chặn cho đến khi có tin nhắn mới, ngay cả khi
một số tin nhắn hiện có sẵn.

Hàm mp_exec sử dụng fanout logarit - xếp hạng 0 gửi đến F quá trình, mỗi
sẽ gửi đến F nhiều hơn, v.v., cho đến khi tất cả các quy trình có thông báo. Một lần một quá trình
hoàn thành tất cả các hoạt động gửi của nó, nó phân tích cú pháp và thực thi nội dung của tin nhắn.
Thuật toán fanout đạt đến N quá trình trong nhật ký F cơ sở của N bước. Quy trình F
xếp hạng 0 gửi đến là xếp hạng 1, 2, 3, ..., F. Nói chung, quá trình với xếp hạng r gửi đến
xếp hạng r * F + 1, r * F + 2, ..., r * F + F (khi chúng nhỏ hơn N-1 cho N quá trình). Bộ này
được gọi là "nhân viên" của cấp bậc r. Xếp hạng có r> 0 nhận được thông báo từ xếp hạng (r-1) / F,
được gọi là "ông chủ" của r. Cuộc gọi mp_exec tương tác với hàng đợi mp_recv;
nói cách khác, các thông báo từ cấp bậc khác với cấp trên trong thời gian diễn ra mp_exec fanout sẽ là
được xếp hàng đợi để truy xuất sau bởi mp_recv. (Nếu không có tính năng này, bất kỳ tác vụ song song nào
sử dụng một mẫu tin nhắn khác với hàm số logarit sẽ dễ bị phân biệt chủng tộc
điều kiện.)

Fanout logarit và tương đương hướng vào của nó rất hữu ích nên mpy cung cấp một cặp
của các hàm cấp cao hơn sử dụng cùng một mẫu fanout như mp_exec:
mp_handout, tin nhắn;
tổng = mp_handin (giá trị);
Để sử dụng mp_handout, xếp hạng 0 tính một tin nhắn, sau đó tất cả các cấp độ gọi mp_handout, gửi tin nhắn
(đầu ra ở tất cả các cấp bậc khác 0) ở mọi nơi bởi cùng một fanout như mp_exec. Để sử dụng
mp_handin, mọi quá trình tính toán giá trị, sau đó gọi mp_handin, trả về tổng của
giá trị của chính họ và tất cả nhân viên của họ, do đó ở thứ hạng 0 mp_handin trả về tổng của
giá trị từ mọi quy trình.

Bạn có thể gọi mp_handin như một hàm không có đối số để hoạt động như một đồng bộ hóa; khi nào
hạng 0 tiếp tục sau cuộc gọi như vậy, bạn biết rằng mọi thứ hạng khác đã đạt đến điểm đó.
Tất cả các tác vụ song song (bất cứ thứ gì bắt đầu bằng mp_exec) phải kết thúc bằng lệnh gọi đến mp_handin,
hoặc một bảo đảm tương đương rằng tất cả các quy trình đã trở lại trạng thái nhàn rỗi khi tác vụ
kết thúc ở thứ hạng 0.

Bạn có thể truy xuất hoặc thay đổi tham số fanout F bằng cách sử dụng hàm mp_nfan. Mặc định
giá trị là 16, điều này sẽ hợp lý ngay cả đối với số lượng rất lớn các quy trình.

Một tác vụ song song đặc biệt được gọi là mp_connect, bạn có thể sử dụng tác vụ này để cấp dữ liệu đã diễn giải
dòng lệnh cho bất kỳ xếp hạng nào khác 0, trong khi tất cả các cấp khác không hoạt động. Xếp hạng 0 nằm trong một
vòng lặp đọc bàn phím và gửi các dòng đến xếp hạng "được kết nối", thực thi
chúng và gửi một xác nhận trở lại xếp hạng 0. Bạn chạy hàm mp_disconnect để
hoàn thành nhiệm vụ song song và tụt xuống hạng 0.

Cuối cùng, một lưu ý về khôi phục lỗi. Trong trường hợp xảy ra lỗi trong một tác vụ song song,
mpy cố gắng thoát khỏi mp_exec một cách duyên dáng, để khi xếp hạng 0 trở lại, tất cả các xếp hạng khác
được biết là không hoạt động, sẵn sàng cho mp_exec tiếp theo. Thủ tục này sẽ bị treo vĩnh viễn nếu có
một trong các quy trình ở trong một vòng lặp vô hạn, hoặc nếu không thì ở trạng thái mà nó sẽ không bao giờ
gọi mp_send, mp_recv hoặc mp_probe vì MPI không cung cấp phương tiện để gửi tín hiệu
làm gián đoạn tất cả các quá trình. (Đây là một trong những cách mà môi trường MPI
"thô".) Quy trình xếp hạng 0 còn lại với xếp hạng của quy trình đầu tiên báo cáo
lỗi, cộng với số lượng quy trình bị lỗi vì một lý do khác ngoài việc
đã gửi một thông báo rằng một thứ hạng khác đã bị lỗi. Quá trình lỗi đầu tiên có thể nhập dbug
chế độ thông qua mp_connect; sử dụng mp_disconnect hoặc dbexit để quay lại chế độ nối tiếp ở thứ hạng 0.

Các lựa chọn
-j tập tin.i bao gồm tệp nguồn Yorick tập tin.i khi mpy bắt đầu ở chế độ song song
trên tất cả các cấp bậc. Điều này tương đương với hàm mp_include sau mpy
đã bắt đầu.

-i tập tin.i bao gồm tệp nguồn Yorick tập tin.i khi mpy bắt đầu, ở chế độ nối tiếp.
Điều này tương đương với lệnh #include sau khi mpy đã bắt đầu.

-lô hàng tập tin.i bao gồm tệp nguồn Yorick tập tin.i khi mpy bắt đầu, ở chế độ nối tiếp.
Tệp tùy chỉnh của bạn custommp.i, nếu có, là không đọc, và mpy là
được đặt ở chế độ hàng loạt. Sử dụng lệnh trợ giúp trên hàm lô
(trợ giúp, hàng loạt) để tìm hiểu thêm về chế độ hàng loạt. Ở chế độ hàng loạt, tất cả
sai sót là nghiêm trọng; thông thường, mpy sẽ tạm dừng thực thi và đợi thêm
đầu vào sau khi có lỗi.

Sử dụng mpy trực tuyến bằng các dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

Lệnh Linux

Ad




×
quảng cáo
❤️Mua sắm, đặt phòng hoặc mua tại đây — không mất phí, giúp duy trì các dịch vụ miễn phí.