Tôi đang sử dụng gcc
và OpenMPI. Thông thường, tôi chạy chương trình MPI bằng cách sử dụng trình bao bọc mpirun
- ví dụ:Chạy chương trình OpenMPI mà không cần mpirun
mpirun -np 4 myprogram
để bắt đầu 4 quy trình.
Tuy nhiên, tôi đã tự hỏi nếu có thể dễ dàng tạo ra một nhị phân sẽ tự động làm điều đó (có thể với một số tùy chọn mã cứng như -np 4
ở trên).
Tôi biết tôi có thể viết một wrapper C mà các cuộc gọi chương trình của tôi, chẳng hạn như sau:
#include <stdlib.h>
#include <unistd.h>
int main() {
char *options[] = { "mpirun", "-np", "4", "myprogram" };
execvp("mpirun", options);
/* Ignoring return value to keep example simple */
return EXIT_SUCCESS;
}
nhưng điều này có vẻ hơi vụng về và tôi kết thúc với hai thực thi thay vì một.
Tôi đã cố gắng để liên kết một cách rõ ràng các thư viện MPI, như
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
nhưng khi tôi chạy kết quả thực thi, MPI_Comm_size
bộ số không như kích thước nhóm (như thể tôi đã cho -np 0
như là đối số). Tôi có thể sử dụng biến môi trường hoặc thứ gì khác để vượt qua kích thước nhóm không? Hoặc, có cách nào khác để xây dựng một chương trình MPI thực thi một lần (sử dụng Linux và gcc
) không?
Nó có thể được thực hiện, mặc dù tôi không biết làm thế nào từ đỉnh đầu của tôi. Tôi biết một vài chương trình mà tôi đã thực hiện để thực hiện việc này. Không có ma thuật thực sự trong đó, nó chỉ làm một đống công cụ đằng sau hậu trường mà bạn cũng có thể tự làm. –
Tôi có hiểu chính xác không - bạn muốn bỏ qua 'mpirun' hoặc bạn muốn tự động gọi' mpirun' bằng cách nào đó? –
@Hristo Iliev: Sẽ tốt hơn nếu tôi có một nhị phân tĩnh đơn. – Jay