Оценка цикла Ккачегринда

После перехода на страницу github и просмотра руководства в формате pdf на сайте kde docs, я все еще растерялся. Предположим, что в тестовом коде есть две эти строки:

double a1 {asinh(1 / ep)};                   // 5 instr.
double b1 {log((1 + sqrt(1 + ep*ep)) / ep)}; // 12 instr.

где ep это некоторое значение, которое может быть предопределено. Комментарии мои и сделаны в Codeblocks, запустив отладчик с дизассемблером, затем терпеливо нажимая «следующую инструкцию» и считая. Они соответствуют тому, что говорит Какачегринд, если я установлю его, чтобы показать «Сбор инструкций». Я полагаю, это должно иметь смысл (я новичок в C ++, кстати). Но если я переключаюсь на «Оценка цикла», я получаю очень странные показания. Для текущего примера это 115 а также 122, но другие, на вид похожие выражения, вроде:

double Ap {1.0};
double ep {0.9};

шоу 222 а также 2 (например, выборка показывает 2 для обоих)! Что здесь происходит? Может кто-нибудь объяснить, пожалуйста?

4

Решение

Я думаю, что нашел ответ после многих кликов и привыкнуть к Kcachegrind больше. Общая «оценка цикла» использует эту формулу:

CEst = Ir + 10 L1m + 100 LLm

где

Ir  = Instruction Fetch
L1m = L1 Miss Sum
Llm = Last-level Miss Sum

Итак, для моего случая, где CEst показал 2 а также 222, но 2 Ir каждый, первый имел 2 инструкция получает и не пропускает, в то время как другой имел 2 выборки инструкций, но также две ошибки каждого, =>

2*Ir + 10*2*L1m + 100*2*Llm = 2 + 20 + 200 = 222

Это соответствует всем кодам, которые я пробовал.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]