Suma de una array usando pthreads

La suma de la array es un pequeño problema en el que tenemos que agregar cada elemento de la array recorriendo toda la array. Pero cuando la cantidad de elementos es demasiado grande, puede llevar mucho tiempo. Pero esto podría resolverse dividiendo la array en partes y encontrando la suma de cada parte simultáneamente, es decir, encontrando la suma de cada porción en paralelo.

Esto podría hacerse mediante el uso de subprocesos múltiples donde se usa cada núcleo del procesador. En nuestro caso, cada núcleo evaluará la suma de una porción y finalmente sumaremos la suma de todas las porciones para obtener la suma final. De esta manera, podríamos mejorar el rendimiento de un programa y utilizar los núcleos del procesador.

Es mejor usar un hilo para cada núcleo. Aunque puede crear tantos subprocesos como desee para una mejor comprensión de los subprocesos múltiples.

Ejemplos:

Input :  1, 5, 7, 10, 12, 14, 15, 18, 20, 22, 25, 27, 30, 64, 110, 220
Output : sum is 600

Input :  10, 50, 70, 100, 120, 140, 150, 180, 200, 220, 250, 270, 300, 640, 110, 220
Output : sum is 3030

Nota: se recomienda ejecutar el programa en un sistema basado en Linux.
Compile en Linux usando el siguiente código:

g++ -pthread program_name.cpp

Código –

// CPP Program to find sum of array
#include <iostream>
#include <pthread.h>
  
// size of array
#define MAX 16
  
// maximum number of threads
#define MAX_THREAD 4
  
using namespace std;
  
int a[] = { 1, 5, 7, 10, 12, 14, 15, 18, 20, 22, 25, 27, 30, 64, 110, 220 };
int sum[4] = { 0 };
int part = 0;
  
void* sum_array(void* arg)
{
  
    // Each thread computes sum of 1/4th of array
    int thread_part = part++;
  
    for (int i = thread_part * (MAX / 4); i < (thread_part + 1) * (MAX / 4); i++)
        sum[thread_part] += a[i];
}
  
// Driver Code
int main()
{
  
    pthread_t threads[MAX_THREAD];
  
    // Creating 4 threads
    for (int i = 0; i < MAX_THREAD; i++)
        pthread_create(&threads[i], NULL, sum_array, (void*)NULL);
  
    // joining 4 threads i.e. waiting for all 4 threads to complete
    for (int i = 0; i < MAX_THREAD; i++)
        pthread_join(threads[i], NULL);
  
    // adding sum of all 4 parts
    int total_sum = 0;
    for (int i = 0; i < MAX_THREAD; i++)
        total_sum += sum[i];
  
    cout << "sum is " << total_sum << endl;
  
    return 0;
}

Producción:

sum is 600

Publicación traducida automáticamente

Artículo escrito por shubham_rana_77 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *