Aunque no puedo ayudar (¡todavía!) En la mayoría de sus problemas, creo que nuestra herramienta C++ Test Coverage podría proporcionarle datos de cobertura de prueba multiproceso con bastante facilidad.
Esta herramienta instrumentos de su código fuente; compilas y ejecutas eso. Usted termina con (barato) sondas de instrumentación en su código que representan varios bloques. La instrumentación registra qué partes de su programa se ejecutan, nominalmente como un vector de bits con un bit por sonda de instrumentación. Al final de la ejecución (o cuando lo desee), este vector de bits se descarta y un visor lo mostrará superpuesto al código.
El truco para obtener la cobertura de prueba multihilo es saber que le brindamos control total sobre la definición de cómo funcionan las sondas del instrumento; ellos son macros. Así que en lugar de usando la macro por defecto de esencialmente
probe[n]=true;
en una matriz booleana, en su lugar puede aplicar
probe[n]|=1<<threadid;
en una matriz int (o algo más barato hábilmente por precomputación de este valor). Esto probablemente solo requiera unas pocas líneas de código para implementar.
La gente podría notar esto técnicamente tiene problemas de sincronización. Eso es cierto, pero a lo sumo pierde un poco de datos de cobertura, y las probabilidades en contra son bastante altas. La mayoría de las personas están contentos con los datos "bastante buenos" en lugar de perfectos. Si insistes en la perfección, pagarás un alto precio de sincronización utilizando algunas instrucciones de actualización atómica .
También le ofrecemos control sobre la lógica de descarga de la sonda; puede revisarlo para escribir datos de cobertura específicos de subprocesos (en las decenas de líneas del rango de código personalizado). El visor de datos de cobertura de prueba le permitirá ver cobertura específica de subprocesos (simplemente elija el vector de cobertura correcto); también tiene una función incorporada para que computa/muestra fácilmente intersection/union/diff en vectores de cobertura, lo que le proporciona exactamente su relación de cobertura por hilo.
Buena suerte, estaré pendiente de una respuesta razonable. Creo que necesitas tener una comprensión completa del hilo de ejecución que estás dividiendo en múltiples. Hay muchas herramientas para perfilar y producir gráficos de ejecución (fav es el perfilador de rendimiento de Redgate, caro pero impresionante) pero sin detalles estás disparando en la oscuridad. – Justin
@Justin Ah Olvidé mencionar que la aplicación en la que estoy trabajando está en C++. – fantasticsid
@fantasticid: he editado su título para reflejar su interés. –