2015-03-31 7 views
0

Я экспериментирую с 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?

Бест,

++ т

+0

Из того, что я едва помню, вы правы, в том смысле, что счетчик оборудования должен подсчитывать количество инструкций с плавающей запятой (FLIPs против FLOP), являясь их ADD, MUL или FMA, и в этом случае я бы не стал рассматривать это ошибка, просто нецелесообразно напрямую оценивать фактические GFlops. Но я работал над Power3/4/5, когда встретил их. Возможно, что IBM представила счетчики операций FP в новых процессорах, и это на самом деле ошибка. – Sigismondo

+0

Спасибо за быстрый ответ, мне действительно нужны эти флопы для какой-то модели производительности. Я попытаюсь отправить информацию в IBM –

ответ

2

Да, я думаю, что ты прав.

Глядя на документацию (от ophelp):

PM_VSU1_8FLOP: (counter: 0, 1, 2, 3) 
    eight flops operation (DP vector versions of fdiv,fsqrt and SP vector versions of 
    fmadd,fnmadd,fmsub,fnmsub) (min count: 10000) 

что не очень понятно, но предполагает, что счетчик 1 для этого события означает, 8 FLOPs были выполнены.

 Смежные вопросы

  • Нет связанных вопросов^_^