2010-03-02 43 views
19

Từ trang người đàn ông:Tùy chọn "-j" thực sự hoạt động như thế nào?

-j [việc], --jobs [= việc làm] Chỉ định số lượng việc làm (lệnh) để chạy cùng một lúc. Nếu có nhiều tùy chọn -j, tùy chọn cuối cùng có hiệu lực. Nếu tùy chọn -j là được đưa ra mà không có đối số, hãy thực hiện sẽ không giới hạn số lượng công việc có thể chạy đồng thời.

Tôi biết nó sử dụng phụ thuộc đồ thị để biết quy tắc độc lập.

Tôi muốn biết biểu đồ này được xây dựng như thế nào và hiểu tiêu chí được sử dụng là gì.

cảm ơn.

Trả lời

21

Đồ thị phụ thuộc dựa trên biểu đồ điều kiện tiên quyết được liệt kê cho mỗi mục tiêu Makefile. make sẽ xây dựng một biểu đồ nơi các mục tiêu và điều kiện tiên quyết là đỉnh và có một cạnh đạo diễn từ các điều kiện tiên quyết cho các mục tiêu của chúng. Bằng cách này, số lượng các cạnh đến cho bạn biết có bao nhiêu prereqs một mục tiêu có. Nếu nó không có các cạnh đến, thì nó không có điều kiện tiên quyết.

Các đỉnh cho các tệp .c.h, chẳng hạn, sẽ không có cạnh đến. Những tệp đó là tệp nguồn của bạn và không cần phải được tạo.

Sau đó, thực hiện topological sort trên biểu đồ để xác định thứ tự thực thi. Từ Wikipedia:

Ứng dụng chính tắc phân loại topo (thứ tự topo) là lập lịch trình chuỗi công việc hoặc nhiệm vụ; các thuật toán phân loại topo được nghiên cứu đầu tiên vào đầu những năm 1960 trong bối cảnh kỹ thuật PERT để lập kế hoạch trong quản lý dự án (Jarnagin 1960). Các công việc được đại diện bởi đỉnh, và có một cạnh từ x đến y nếu công việc x phải được hoàn thành trước khi công việc y có thể được bắt đầu (ví dụ, khi giặt quần áo, máy giặt phải hoàn thành trước khi chúng tôi đặt quần áo để khô). Sau đó, một loại topo cung cấp một thứ tự để thực hiện công việc.

Ý chính của một loại topo là tìm các đỉnh không có cạnh đến (không phụ thuộc) và đặt các giá trị đầu tiên. Sau đó xóa chúng khỏi biểu đồ. Bây giờ bạn sẽ có một tập hợp các đỉnh mới mà không có các cạnh đến (không phụ thuộc). Đó là tiếp theo. Và như vậy cho đến khi kết thúc.(Nếu bạn đã từng đạt đến một điểm khi không có các đỉnh như vậy thì biểu đồ phụ thuộc chứa một chu kỳ, đó là một điều kiện lỗi.)

Trong một Makefile điển hình, điều này có nghĩa là trước tiên bạn sẽ xây dựng các tệp nguồn (không cần gì được làm). Sau đó, các tệp đối tượng phụ thuộc vào các tệp nguồn đó. Sau đó, các thư viện và tệp thi hành được xây dựng từ các tệp đối tượng đó.

Trong hoạt động không song song bình thường make sẽ chỉ cần chọn một mục tiêu duy nhất cho mỗi lần lặp và xây dựng nó. Khi nó song song, nó sẽ lấy càng nhiều mục tiêu phụ thuộc càng ít càng tốt và xây dựng chúng song song, tùy theo số lượng công việc được phép đồng thời.

Vì vậy, khi make đến, ví dụ, bước tệp đối tượng, nó sẽ có một số lượng lớn các đỉnh trong biểu đồ mà tất cả đều không có cạnh đến. Nó biết nó có thể xây dựng các tập tin đối tượng song song và do đó nó tắt n bản sao của gcc để xây dựng các tệp đối tượng.

3

Tôi nghi ngờ bạn đang mong đợi một điều gì đó huyền diệu hơn thực tế ở đây. Makefiles chứa các dòng như:

target: prereq1 prereq2 prereq3 ... 

Điều này xác định mối quan hệ giữa các tệp trong hệ thống; theo cách đồ thị, mỗi từ được phân cách bằng dấu cách trắng trên dòng sẽ khai báo rõ ràng một nút trong biểu đồ và cạnh được chỉ đạo được tạo giữa mỗi nút ở bên trái dấu hai chấm và mỗi nút ở bên phải dấu hai chấm , chỉ từ cái sau đến cái cũ.

Từ đó, có một vấn đề đơn giản là duyệt qua biểu đồ để tìm các nút không có cạnh đến và thực hiện các lệnh liên kết với các nút đó, sau đó làm việc trở lại biểu đồ từ đó.

Hy vọng điều đó sẽ hữu ích.

+0

Tính song song thực sự được thực hiện như thế nào? Tôi cho rằng nó không phải là 'openmpi' .... – kilojoules

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