Pregunta

estoy experimentando con OpenMP para el procesamiento de datos de gran tamaño y relativamente nuevo para él. Mi conjunto de datos de entrada es enorme y así que lo dividió en múltiples subconjuntos y cada hilo de trabajo en el subconjunto de datos. Cada elemento de datos en el subconjunto se actúa sobre el hilo. Si uno de los hilos falla durante su funcionamiento en cualquier dataitem, me gustaría terminar otros hilos y devolver un fracaso. Usando variable compartida es una opción, pero hay una mejor manera de hacer lo mismo?

¿Fue útil?

Solución

¿Qué desea que suceda si uno de sus hilos se ahoga con su entrada? ¿Quieres llevar el programa a un alto repentino? O ¿desea detener la ejecución en paralelo y tienen una parte de serie del programa hasta ordenada?

OpenMP no es realmente diseñado tanto para la clase de operación, por lo que vamos a estar luchando contra ella, en lugar de luchar con ella como lo hacen la mayoría de los principiantes. Por supuesto que podría, como usted sugiere, el uso compartido de variables y escribir su propia lógica para detener el programa o saltar hasta el final de la región paralelo si uno de los hilos falla. Sin embargo, no existen mecanismos intrínsecos de OpenMP para estas operaciones.

Es posible que desee investigar las nuevas capacidades task de OpenMP 3.0. El uso de estos se puede implementar un sistema mediante el cual las tareas se envían a las discusiones que devuelven el éxito o el fracaso, y que tienen otras tareas que se ocupan de los fallos sin duda.

Por último, se podría argumentar que el mal de entrada no debe hacer que un programa de estrellarse, pero eso es otro tema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top