Estoy perfilando el rendimiento de los solucionadores lineales de PETSc. Según lo entiendo,
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,
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:
- ¿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?
- ¿Es realmente necesario? ¿Es el rendimiento paralelo en un procesador lo suficientemente bueno como para aproximarse al rendimiento secuencial, en general?
Respuestas:
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.
fuente
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.
fuente