Одним из возможных подходов было бы использование метода средневзвешенного значения.
Предположим, у нас было 3 непересекающихся ядра на нашей временной шкале. Допустим, ядро 1 работает в течение 10 миллисекунд, ядро 2 - в течение 20 миллисекунд, а ядро 3 - в течение 30 миллисекунд. В совокупности все 3 ядра занимают 60 миллисекунд в нашей общей шкале времени приложения.
Предположим также, что профилировщик сообщает о метрике gld_efficiency следующим образом:
kernel duration gld_efficiency
1 10ms 88%
2 20ms 76%
3 30ms 50%
Вы можете рассчитать средневзвешенное значение следующим образом:
88*10 76*20 50*30
"overall" global load efficiency = ----- + ----- + ----- = 65%
60 60 60
Я уверен, что могут быть и другие подходы, которые также имеют смысл. Например, лучшим подходом могло бы быть, чтобы профилировщик сообщал об общем количестве транзакций глобальной загрузки для каждого ядра и выполнял взвешивание на основе этого, а не продолжительность ядра:
kernel gld_transactions gld_efficiency
1 1000 88%
2 2000 76%
3 3000 50%
88*1000 76*2000 50*3000
"overall" global load efficiency = ------- + ------- + ------- = 65%
6000 6000 6000