Tôi là một sinh viên kỹ thuật hàng không vũ trụ, và tôi đang làm việc trên một dự án capstone cao cấp. Một trong những mô hình toán học mà tôi đang phát triển đòi hỏi một lượng dữ liệu thiên văn được tạo ra từ XFOIL, một công cụ hàng không vũ trụ phổ biến được sử dụng để tìm thang máy và hệ số kéo trên các cánh máy bay. (Nhưng tôi đang digressing.)Làm thế nào tôi có thể làm cho kịch bản Perl của tôi sử dụng nhiều lõi cho các tiến trình con?
Cắt theo đuổi: Tôi có một kịch bản Perl gọi XFOIL nhiều lần với các tham số đầu vào khác nhau để tạo dữ liệu tôi cần. Tôi cần XFOIL để chạy 5600 lần, và vì nó đứng ngay bây giờ nó mất khoảng 100 giây trung bình mỗi lần chạy. Làm toán, điều này có nghĩa là sẽ mất khoảng 6,5 ngày để hoàn thành.
Bây giờ, tôi có một máy quad-core, nhưng kinh nghiệm của tôi là một lập trình viên bị hạn chế, và tôi thực sự chỉ biết cách sử dụng Perl cơ bản. Tôi muốn chạy 4 phiên bản của XFOIL tại một thời điểm, tất cả trên lõi của chính họ. Một cái gì đó như thế này:
while (1){
for (i = 1..4){
if (! exists XFOIL_instance(i)){
start_new_XFOIL_instance(i, input_parameter_list);
}
}
}
Vì vậy, các chương trình được kiểm tra (hoặc tốt hơn là ngủ cho đến khi một thể hiện XFOIL đánh thức nó dậy để bắt đầu một trường hợp mới) nếu mỗi lõi đang chạy XFOIL. Nếu không, ví dụ trước đó đã thoát và chúng ta có thể bắt đầu một cá thể mới với danh sách tham số đầu vào mới.
Nếu bất kỳ ai có bất kỳ ý tưởng nào về điều này có thể đạt được, vui lòng cho tôi biết. Điều này sẽ tăng tốc đáng kể thời gian tôi cần để tạo dữ liệu và sẽ cho phép tôi làm việc trên chính dự án hàng không vũ trụ.
Cảm ơn sự giúp đỡ!
Tôi sợ tôi sẽ không cung cấp một câu trả lời đầy đủ, nhưng phiên bản ngắn là bạn chắc chắn có thể chia ra bốn trường hợp của kịch bản lệnh perl hiện tại, sau đó có mỗi lần liên tục xuất hiện để chạy tập lệnh XFOIL. Tuy nhiên, thiết lập ái lực bộ vi xử lý cho các quá trình kết quả - điều đó đòi hỏi phải biết bạn đang sử dụng hệ điều hành nào. –
Bạn có chắc chắn XFOIL không phải là chủ đề hoặc sử dụng nhiều bộ xử lý để có thời gian chạy khoảng 100 giây ngay từ đầu không? – dlamblin
Thật khó để triển khai XFOIL vào C/Fortran? Nếu không, sau đó tôi sẽ đề nghị bạn đi cho nó. Perl không chính xác là Gonzalez tốc độ của các ngôn ngữ lập trình ... – Zaid