2013-11-06 4 views
1

сегодня установить МПИ на мили макинтош 10.9 с самогона mpicc работает с simlpe привет мир программы, но если я пытаюсь нечто вроде этогоМПИ компиляции предупреждение неявное объявление

#include <mpi.h> 
#include <string.h> 
#include <stdio.h> 
#define max 1000 

int main(int argv, char *argc[]){ 


    int myrank,nProc,tag,j; 
    char buff [max]; 
    MPI_Status status; 
    tag=0; 
    MPI_Init(&argv,&argc); 
    MPI_Comm_Rank(MPI_COMM_WORLD,&myrank); 
    MPI_Comm_Size(MPI_COMM_WORLD,&nProc); 

    if(myrank==0){ 
    for(j =1 ; j<nProc;j++){ 
    MPI_Recv(&buff,max,MPI_CHAR,j,tag,MPI_COMM_WORLD,&status); 
    printf("Il processo %d dice di chiamarsi %s\n",j,buff); 
    } 

       } 
       else{ 
       switch (myrank){ 
       case 1 : 
       MPI_Send("Franco",max,MPI_CHAR,j,tag,MPI_COMM_WORLD); 
       break; 
       case 2 : 
       MPI_Send("Mena",max,MPI_CHAR,j,tag,MPI_COMM_WORLD); 
       break; 
       case 3 : 
       MPI_Send("Nino",max,MPI_CHAR,j,tag,MPI_COMM_WORLD); 
       break; 
           } 
        } 
    printf("Ciao da %d \n",myrank); 
    MPI_Finalize(); 
    return(0); 
           } 

и я стараюсь компиляции это ничуть следующий ряд:

mpicc -o filename filename.c 

Это дает мне предупреждения и не строится.

nucciampi.c:15:3: warning: implicit declaration of function 'MPI_Comm_Rank' is 
     invalid in C99 [-Wimplicit-function-declaration] 
       MPI_Comm_Rank(MPI_COMM_WORLD,&myrank); 
       ^
nucciampi.c:16:3: warning: implicit declaration of function 'MPI_Comm_Size' is 
     invalid in C99 [-Wimplicit-function-declaration] 
       MPI_Comm_Size(MPI_COMM_WORLD,&nProc); 
       ^
2 warnings generated. 
Undefined symbols for architecture x86_64: 
    "_MPI_Comm_Rank", referenced from: 
     _main in nucciampi-zsehoq.o 
    "_MPI_Comm_Size", referenced from: 
     _main in nucciampi-zsehoq.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

, пожалуйста, помогите мне решить эти проблемы !!!

+0

Соглашение об именах, используемое в MPI, это 'MPI_Capital_then_all_lowercase'. –

ответ

2

MPI_Comm_Rank ->MPI_Comm_rank

MPI_Comm_Size ->MPI_Comm_size

+0

Ответ Христова на самом деле более полный для потомков. –

2

Существует четко определенное соглашение об именах для всех подпрограмм и констант в MPI и это описано в пункте 2.2 спецификации MPI:

В C все подпрограммы, связанные с определенным типом объекта MPI, должны иметь форму MPI_Class_action_subset или, если подмножество не существует, формы MPI_Class_action. В Fortran все подпрограммы, связанные с определенным типом объекта MPI, должны иметь вид MPI_CLASS_ACTION_SUBSET или, если не существует подмножества, формы MPI_CLASS_ACTION. Для C и Fortran мы используем терминологию C++ для определения Class. В C++ подпрограмма представляет собой метод на Class и называется MPI::Class::Action_subset. Если подпрограмма связана с определенным классом, но не имеет смысла в качестве объектного метода, это статическая функция-член класса.

Обратите внимание, что в отличие от Fortran, имена символов в C зависят от регистра.

Смежные вопросы