Advertisement
techno-

Programa paralelo

Mar 28th, 2023
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <mpi.h>
  5.  
  6. void inicializaCadena(char *cadena, int n){
  7.   int i;
  8.   for(i=0; i<n/2; i++){
  9.     cadena[i] = 'A';
  10.   }
  11.   for(i=n/2; i<3*n/4; i++){
  12.     cadena[i] = 'C';
  13.   }
  14.   for(i=3*n/4; i<9*n/10; i++){
  15.     cadena[i] = 'G';
  16.   }
  17.   for(i=9*n/10; i<n; i++){
  18.     cadena[i] = 'T';
  19.   }
  20. }
  21.  
  22. int main(int argc, char *argv[])
  23. {
  24.     int numprocs , rank , namelen;
  25.     char processor_name [MPI_MAX_PROCESSOR_NAME];
  26.     MPI_Init(&argc, &argv);
  27.     MPI_Comm_size (MPI_COMM_WORLD , &numprocs);
  28.     MPI_Comm_rank (MPI_COMM_WORLD , &rank);
  29.     MPI_Get_processor_name (processor_name , &namelen);
  30.  
  31.   if(argc != 3){
  32.     printf("Numero incorrecto de parametros\nLa sintaxis debe ser: program n L\n  program es el nombre del ejecutable\n  n es el tamaño de la cadena a generar\n  L es la letra de la que se quiere contar apariciones (A, C, G o T)\n");
  33.     exit(1);
  34.   }
  35.  
  36.  
  37.  
  38.   int i, n, count=0;
  39.   char *cadena;
  40.   char L;
  41.  
  42.   if(rank==0) {
  43.       n = atoi(argv[1]);
  44.       L = *argv[2];
  45.   }
  46.     printf("%d\n",rank);
  47.  
  48.   cadena = (char *) malloc(n*sizeof(char));
  49.   inicializaCadena(cadena, n);
  50.   printf("%s\n",cadena);
  51.  
  52.   for(i=0; i<n; i++){
  53.     if(cadena[i] == L){
  54.       count++;
  55.     }
  56.   }
  57.  
  58.   if(rank == 0) {
  59.       for(i=1; i<numprocs; i++){
  60.           int count2=0;
  61.           MPI_Status status;
  62.           MPI_Recv(&count2, 1, MPI_INT, numprocs,0 ,MPI_COMM_WORLD, &status);
  63.           count=count+count2;
  64.       }
  65.       printf("El numero de apariciones de la letra %c es %d\n", L, count);
  66.   }else{
  67.       MPI_Send(&count, 1, MPI_INT, 0,0 ,MPI_COMM_WORLD);
  68.   }
  69.   free(cadena);
  70.     if(rank == 0) {
  71.         MPI_Finalize();
  72.     }
  73.     exit(0);
  74. }
  75.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement