Actualmente estoy trabajando en un programa OpenGl cuyo rendimiento me gustaría mejorar. El rendimiento está bien, pero no es ideal en GPU dedicadas potentes, pero es abismal en gráficos integrados (<10 fps). En un programa normal (basado en CPU, sin OpenGl u otra API de GPU), ejecutaría un perfilador (tal vez el integrado en CLion) en el programa, vería dónde se pasa la mayor parte del tiempo y luego trabajaría en un mejor algoritmo para esas áreas o encuentre una manera de reducir la cantidad que se llama esa área.
El uso de esta técnica en mi programa OpenGl muestra que la gran mayoría del tiempo del programa (~ 86%) en su hilo principal (el que quiero optimizar) se gasta en el archivo .so del controlador OpenGl. Además, el uso de la CPU del programa mientras se ejecuta es muy bajo, pero el uso de la GPU oscila entre el 95% y el 100%. En conjunto, esta información me dice que el cuello de botella está en la GPU, por lo que es donde debería optimizar.
Esto donde ocurre un problema. Sin embargo, mi técnica normal de usar un perfilador para guiar mis optimizaciones no funcionará sin un perfilador de GPU específico. Como tal, investigué un poco para encontrar un generador de perfiles que me diga dónde se está gastando el tiempo de procesamiento de la GPU. No pude encontrar nada que se pueda utilizar de forma remota. Todo era solo para Windows (ejecuto exclusivamente Linux, y mi programa aún no se ha portado a Windows, ni lo será hasta que esté mucho más avanzado), ya no se actualiza y / o cuesta mucho más que el presupuesto para este proyecto es
Como tal, pregunto: ¿cómo puedo optimizar el rendimiento de mi programa cuando el generador de perfiles relevante no existe? Traté de adivinar dónde están los problemas y optimizar a partir de eso, sin embargo, no hizo ninguna diferencia a pesar de que pude determinar que mis optimizaciones (eliminación del frustum) resultaron en menos trabajo para la GPU a la mitad. Una buena respuesta dará alguna técnica de creación de perfiles que sea aplicable a Opengl en Linux, o dará una técnica que funcione sin un generador de perfiles.