2010-10-30 34 views
5

Tôi có một ứng dụng C/C++ crunching số. Về cơ bản nó là một vòng lặp chính cho các tập dữ liệu khác nhau. Chúng tôi đã truy cập vào một cụm nút 100 với openmp và mpi có sẵn. Tôi muốn tăng tốc các ứng dụng nhưng tôi là một newbie absolut cho cả mpi và openmp. Tôi tự hỏi đâu là cách dễ nhất để tìm hiểu và gỡ lỗi ngay cả khi hiệu suất không phải là tốt nhất.Điều gì là dễ dàng hơn để tìm hiểu và gỡ lỗi OpenMP hoặc MPI?

Tôi cũng tự hỏi điều gì là phù hợp nhất cho ứng dụng vòng lặp chính của tôi.

Cảm ơn

Trả lời

3

Nếu chương trình của bạn chỉ là một vòng lặp lớn sử dụng OpenMP có thể đơn giản như viết:

#pragma omp parallel for 

OpenMP là chỉ hữu ích cho lập trình bộ nhớ chia sẻ, mà trừ cluster của bạn đang chạy một cái gì đó như kerrighed có nghĩa là phiên bản song song sử dụng OpenMP sẽ chỉ chạy trên nhiều nhất một nút tại một thời điểm.

MPI dựa trên việc truyền thông báo và hơi phức tạp hơn một chút để bắt đầu. Ưu điểm là mặc dù chương trình của bạn có thể chạy trên nhiều nút cùng một lúc, truyền thông điệp giữa chúng và khi cần. Nếu bạn đã nói "đối với các tập dữ liệu khác nhau", có vẻ như sự cố của bạn có thể rơi vào danh mục "lúng túng song song", nếu bạn cung cấp hơn 100 bộ dữ liệu, bạn có thể thiết lập trình lập lịch biểu để chạy bộ dữ liệu tập dữ liệu trên mỗi nút cho đến khi chúng được hoàn tất, không cần phải sửa đổi mã của bạn và gần như tăng tốc 100 lần so với chỉ sử dụng một nút. Ví dụ: nếu cụm của bạn đang sử dụng condor làm bộ lập lịch thì bạn có thể gửi 1 công việc cho mỗi mục dữ liệu cho vũ trụ "vanilla", chỉ thay đổi dòng "Arguments =" của mô tả công việc. (Có nhiều cách khác để làm điều này cho Condor có thể hợp lý hơn và cũng có những thứ tương tự cho mô-men xoắn, sge, vv)

+0

+1 để đề cập đến kerrighed – srean

+0

Cảm ơn. Tôi vui chơi với điều đó cho công việc một thời gian trở lại sau khi mosix/openmosix đã chết một cái chết! – Flexo

1

OpenMP chủ yếu dành cho máy SMP, vì vậy nếu bạn muốn mở rộng đến hàng trăm nút sẽ cần MPI bằng mọi cách. Tuy nhiên bạn có thể sử dụng cả hai. MPI để phân phối công việc trên các nút và OpenMP để xử lý song song trên các lõi hoặc nhiều CPU trên mỗi nút. Tôi có thể nói OpenMP dễ hơn rất nhiều so với việc làm rối tung các pthread. Nhưng nó càng thô hơn, tốc độ bạn sẽ nhận được từ OpenMP sẽ thấp hơn so với việc thực hiện tối ưu hóa bàn tay.

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