¿Cómo calculo la sobrecarga paralela de un código paralelo ejecutado en un único procesador cuando no hay un código secuencial disponible?


8

Estoy perfilando el rendimiento de los solucionadores lineales de PETSc. Según lo entiendo,

speedup=Sequential TimeParallel Time.

Sé que ejecutar el código paralelo en un procesador se puede usar como proxy para el rendimiento secuencial. Sin embargo, no creo que sea una buena medida de un código secuencial equivalente debido a la sobrecarga paralela incurrida. A menudo, el rendimiento de un código secuencial es más rápido que el rendimiento paralelo en un único procesador. Supongo que podría buscar bibliotecas numéricas que implementen el mismo solucionador, pero no hay garantía de que el algoritmo sea realmente equivalente.

Según lo entiendo,

Parallel performance on one processor=Sequential Time+Parallel Overhead

Por lo tanto, si hay una manera de cuantificar la sobrecarga paralela, podríamos restarla del tiempo paralelo en un procesador para obtener una mejor medida del tiempo secuencial.

Entonces, mis preguntas serían:

  1. ¿Hay alguna manera de calcular la sobrecarga paralela de un código paralelo ejecutado en un solo procesador cuando no hay un código secuencial disponible?
  2. ¿Es realmente necesario? ¿Es el rendimiento paralelo en un procesador lo suficientemente bueno como para aproximarse al rendimiento secuencial, en general?

La aceleración es una medida relativa y no dice mucho sobre el rendimiento absoluto. La aceleración se puede medir ya sea con una implementación secuencial pura haciendo el mismo trabajo útil o una implementación paralela (con sobrecarga como usted indica). En cada caso, la aceleración puede ser bastante diferente debido a la sobrecarga paralela y / o posibles rutas de ejecución diferentes en el conjunto de instrucciones de la aplicación. ¿Por qué quieres estimar la sobrecarga paralela?
Allan P. Engsig-Karup

@ AllanP.Engsig-Karup: Creo que mi principal motivación es saber cómo obtener una estimación razonable del código secuencial cuando todo lo que tengo es un código paralelo.
Paul

1
@Paul: Trataré de dar una respuesta real más tarde, pero a menudo hay compensaciones para obtener un algoritmo escalable. La aceleración realmente debe medirse en relación con la mejor implementación en serie que, dada la misma entrada, produce la misma salida (módulo de pequeñas perturbaciones).
Jack Poulson el

@ Jack: De acuerdo. Además, en mi opinión, las aceleraciones relativas no son muy útiles a menos que también se den tiempos absolutos.
Allan P. Engsig-Karup

1
@ Jack: No estoy de acuerdo. La mejor implementación en serie podría no ser la suya. La velocidad de un código probablemente debería medirse en función de su propio rendimiento en serie. Luego, su implementación debe medirse frente a otras implementaciones en términos relativos y absolutos. El uso de una implementación en serie no relacionada en el numerador puede ser engañoso.
Bill Barth

Respuestas:


5

Creo que mientras diga con qué mide la aceleración, nadie lo culpará por usar el tiempo que la versión paralela del código tarda en ejecutarse en un procesador. Si también le da el tiempo total para uno de sus casos (digamos el tiempo de procesador único), entonces las personas podrán comparar su implementación con otras en la literatura o con la suya.

Para algunos problemas, ningún resultado de uni-procesador será incluso posible de calcular dadas las limitaciones de memoria o tiempo. Dado que, la mayoría de la gente entiende cuando observa los resultados de aceleración, que las cosas se calculan en relación con el menor número de procesadores disponibles y que el dato uni-procesador es el código paralelo que se ejecuta en un procesador.

No existen reglas estrictas y rápidas, pero debe ser explícito sobre lo que está haciendo y brindarle a su lector suficiente información para calcular otras cantidades que puedan interesarle.


0

No estoy familiarizado con los componentes internos de PETSc (a diferencia de otros expertos de PETSc aquí) pero, en mi opinión, no debería haber una sobrecarga paralela con PETSc siempre que ejecute su trabajo como un solo proceso (es decir, sin particiones, etc.).

Recuerde que PETSc también se puede instalar sin MPI, lo que significa que cualquier pequeña sobrecarga de MPI que pueda estar allí (suponiendo que se realice alguna llamada MPI real cuando se ejecuta en 1 núcleo, lo cual dudo mucho) también se puede descontar.

Obviamente, esto es cierto cuando la sobrecarga paralela es principalmente comunicación y no algorítmica.


Eso puede ser cierto para petsc, pero probablemente no sea cierto para el código paralelo en general.
Paul
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.