Метод подсчета операций с плавающей запятой в программе C ++ / CUDA с использованием PTX

У меня есть несколько большое приложение CUDA, и мне нужно рассчитать достигнутые GFLOP.
Я ищу простой и, возможно, общий способ подсчета количества операций с плавающей запятой.

Можно ли считать операции с плавающей запятой из сгенерированного кода PTX (как показано ниже), используя список предопределенных fpo на ассемблере? Основываясь на коде, можно ли сделать подсчет общим? Например, делает add.s32 %r58, %r8, -2; считать как одну операцию с плавающей запятой?

ПРИМЕР:

BB3_2:
.loc 2 108 1
mov.u32         %r8, %r79;
setp.ge.s32     %p1, %r78, %r16;
setp.lt.s32     %p2, %r78, 0;
or.pred         %p3, %p2, %p1;
@%p3 bra        BB3_5;

add.s32         %r58, %r8, -2;
setp.lt.s32     %p4, %r58, 0;
setp.ge.s32     %p5, %r58, %r15;
or.pred         %p6, %p4, %p5;
@%p6 bra        BB3_5;

.loc 2 112 1
ld.global.u8    %rc1, [%rd17];
cvt.rn.f32.u8   %f11, %rc1;
mul.wide.u32    %rd12, %r80, 4;
add.s64         %rd13, %rd7, %rd12;
ld.local.f32    %f12, [%rd13];
fma.rn.f32      %f14, %f11, %f12, %f14;
.loc 2 113 1
add.f32         %f15, %f15, %f12;

Или есть намного более простые способы подсчета FPO, и это пустая трата времени?

0

Решение

Самый простой способ считать FLOPS — это сделать так, чтобы профилировщик CUDA сделал это за вас. Выбрав Achieved FLOPS эксперимент, вы можете получить диаграммы, как это:

FLOPS эксперимент

Floating Point Operations Диаграмма отображает количество операций каждого типа с плавающей запятой, выполняемых вашим ядром.

3

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

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

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