Duplicados de hilos apareciendo cuando deberían ser únicos (OpenMP)
Tengo que escribir un código que calcule una suma parcial: S (i) = Σ a (j) (j que va de 0 a i). Cada vez, tengo que mostrar el valor de S (i) (llamado somme en el código) en el bucle y lo tengo que codificar con OpenMP. Este es mi código:
Sin embargo, cuando ejecuto el código con 16 hilos, algunos hilos se duplican y el resultado de esos hilos es incorrecto:
He preguntado a mi profesor y no tiene idea de lo que está sucediendo. No entiendo por qué mi código se comporta de esta manera, ¿alguien puede ayudarme?
davy.ai
Parece que el problema en su código está en la inicialización de la variable somme dentro del bucle paralelo. Cada hilo debe tener su propia variable somme, inicializada en 0. De lo contrario, los hilos sobrescribirán los valores de los demás y generarán resultados incorrectos.
Aquí hay una versión corregida de su código:
note la adición de “private(somme)” en la directiva pragma, que asegura que cada hilo tenga su propia copia de la variable somme. esto debería evitar que los hilos sobrescriban los valores de los demás y produzcan resultados correctos.
¡espero que eso ayude! j++)=”” somme=”” +=”a[j];”></i+1; j++) somme += a[j];
printf(“<%d>: s(%d) = %d\n”, t, i, somme);
}
return 0;
}
note la adición de “private(somme)” en la directiva pragma, que asegura que cada hilo tenga su propia copia de la variable somme. esto debería evitar que los hilos sobrescriban los valores de los demás y produzcan resultados correctos.
¡espero que eso ayude!></omp.h></stdio.h>