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