0

我有一个有点大的 CUDA 应用程序,我需要计算获得的 GFLOP。我正在寻找一种简单且通用的方法来计算浮点运算的数量。

是否可以使用汇编语言中预定义的 fpo 列表从生成的 PTX 代码(如下所示)中计算浮点运算?根据代码,计数可以通用吗?例如,是否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 的方法,这是浪费时间?

4

1 回答 1

3

计算 FLOPS 的最简单方法是让 CUDA 分析器为您计算。通过选择Achieved FLOPS实验,可以得到如下图表:

翻牌实验

Floating Point Operations图表显示内核执行的每种类型的浮点运算的计数。

于 2013-02-11T15:50:11.180 回答