2013-11-12 2 views
2

Я новичок в C, и я использую Linux. Я застрял в этой задаче uni. Мне нужно оценить программу, и мне нужно сделать программу, чтобы показать время, прошедшее для выполнения. Вот программа происхождения.Вычислить прошедшее время в C

/* 
* Simple MPI program to sum the numbers from 1 to 1000 
* 
* The output of this program should look like this: 
* 
* $ mpirun -n 4 ./su 
* node 1 of 4 starting at 251 and ending at 500 
* node 2 of 4 starting at 501 and ending at 750 
* node 3 of 4 starting at 751 and ending at 1000 
* node 0 of 4 starting at 1 and ending at 250 
* The sum from 1 to 1000 is: 500500 
* 
* Author: Kevan Buckley 
*/ 

#include <stdio.h> 
#include <mpi/mpi.h> 

int main(int argc, char **argv) { 
    // Rank is which process this code is executing in. 
    // Rank 0 is the initial process. 
    int rank; 
    int size; 
    int sum = 0; 
    int start, end, accum, i; 

    // These lines must appear at the start of any 
    // MPI program. 
    MPI_Status status; 
    MPI_Init(&argc, &argv); 

    // These lines tell MPI that rank and size are values 
    // that we want to communicate between processes. 
    MPI_Comm_size(MPI_COMM_WORLD, &size); 
    MPI_Comm_rank(MPI_COMM_WORLD, &rank); 

    // Only compute part of the sum. 
    // This splits the work over the different processes. 
    start = (1000*rank/size)+1; 
    end = 1000*(rank+1)/size; 

    printf("node %d of %d start: %d end: at %d\n",\ 
      rank, size, start, end); 

    for(i=start; i<=end; i++){ 
     sum = sum + i; 
    } 

    if(rank == 0) { 
     for(i=1; i<size; i++){ 
      // Receive a message from another process. 
      MPI_Recv(&accum, 1, MPI_INT, i, 1, \ 
        MPI_COMM_WORLD, &status); 
      sum = sum + accum; 
     } 
     printf("The sum from 1 to 1000 is: %d\n", sum); 
    } 
    else { 
     // Send data to the process at rank 0. 
     MPI_Send(&sum, 1, MPI_INT, 0, 1, MPI_COMM_WORLD); 
    } 

    // This code must end any MPI program. 
    MPI_Finalize(); 

    return 0; 
} 

Это моя обновленная версия этого - Gist. Я потратил все расчеты времени из другого кода, над которым я работал. Я пробовал много вещей, но все равно не могу заставить его работать.

Любая помощь была бы полезной, спасибо!

+0

Попробуйте использовать 'mpi_wtime'. –

+0

Где вы выбрали этот '#include ' from? Я видел несколько сообщений здесь, делающих то же самое, и это просто неправильно. Должен быть '#include ' вместо. –

ответ

4

Если я правильно понял, вы хотите, чтобы время было частью вашей программы. Вот пример кода, который можно сделать только для параллельного программирования, используя MPI_Wtime.

#include <mpi.h> 

double start, finish; 

MPI_Init (&argc, &argv); 
start=MPI_Wtime(); /*start timer*/ 

/*put the code you want to time here*/ 

finish=MPI_Wtime(); /*stop timer*/ 
MPI_Finalize(); 

printf("Parallel Elapsed time: %f seconds\n", finish-start); 
+0

вам не хватало точку с запятой на 'MPI_Finalize()'. это должно быть 'MPI_Finalize();'. Это также лучшая практика и дает лучшие результаты, если вы запускаете и останавливаете таймер между 'MPI_Init' и' MPI_Finalize'. Вы также должны использовать редактор (например, Eclipse), чтобы избежать траты времени на поиск пропущенных синтаксических ошибок! – dimpen

+0

На самом деле вам следует удалить оба символа '#include ' ** и ** '#include ' и заменить их на '#include '. Там я сделал это для тебя. –

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