Я экспериментирую с PAPI и аппаратным счетчиком на Power8. Я думаю, что проблема связана с вычислением PM_FLOP (используется PAPI_flop). PM_FLOP представляет собой сумму следующего счетчика: PM_VSU {i} _ {j} FLOP, где i - (1,2) (2 VSU на ядро) ", j - (1,2,4,8). . Тем не менее, если мы анализы теста матрицы hl.c теста Papi (матричное умножение), мы можем иметь рьаппаратное событие на Power8
в конце теста есть ошибка зрелище:
if (event[0] == PAPI_FP_INS) {
/* Compare measured FLOPS to expected value */
tmp =
2 * (long long) (NROWS1) * (long long) (NCOLS2) *
(long long) (NCOLS1);
printf("%llu \n",tmp);
if (abs((int) values[0] - (int) tmp) > (float) tmp * 0.05) {
/* Maybe we are counting FMAs? */
tmp = tmp/2;
if (abs((int) values[0] - (int) tmp) >
(float) tmp * 0.05) {
printf("\n" TAB1, "Expected operation count: ", 2 * tmp);
printf(TAB1, "Or possibly (using FMA): ", tmp);
printf(TAB1, "Instead I got: ", values[0]);
test_fail(__FILE__, __LINE__,
"Unexpected FLOP count (check vector operations)",
1);
}
}
}
существует нет ошибка, тем не менее если я удалить первое ветвление и скомпилировать тест с -O3 для поплавка и два раза я получаю
Expected operation count: 11812500
Or possibly (using FMA): 5906250
Instead I got: 3003761
matrix-hl.c - DOUBLE FAILED
Expected operation count: 11812500
Or possibly (using FMA): 5906250
Instead I got: 1552507
matrix-hl.c - FLOAT FAILED
в настоящее время я думаю, что вычисление PM_FLOP ошибочен. Для меня каждый PM_VSU {i} _ {j} FLOP - это не число флопов, а количество мнемоники, которое завершено. Следовательно, PM_VSU {i} _ {j} FLOP должен быть правильным по коэффициенту: x1 для M_VSU {i} _1FLOP, x2 для M_VSU {i} _2FLOP, x4 для M_VSU {i} _4FLOP и x8 для M_VSU {i} _8FLOP.
Фактически исходный тест работает, потому что по умолчанию мы компилируем с -O0, следовательно, генерируемый ASM имеет только последовательные операции, измеренные M_VSU {i} _1FLOP, где 1 скалярная мнемоника - один флоп. Я сделал несколько тестов по dgemm и базовому добавлению векторов и FMA, это подтвердило мою коррекцию.
Любые предложения от гуру IBM-Power?
Бест,
++ т
Из того, что я едва помню, вы правы, в том смысле, что счетчик оборудования должен подсчитывать количество инструкций с плавающей запятой (FLIPs против FLOP), являясь их ADD, MUL или FMA, и в этом случае я бы не стал рассматривать это ошибка, просто нецелесообразно напрямую оценивать фактические GFlops. Но я работал над Power3/4/5, когда встретил их. Возможно, что IBM представила счетчики операций FP в новых процессорах, и это на самом деле ошибка. – Sigismondo
Спасибо за быстрый ответ, мне действительно нужны эти флопы для какой-то модели производительности. Я попытаюсь отправить информацию в IBM –