CUDA中的触发器效率

CUDA中的触发器效率,cuda,nvprof,Cuda,Nvprof,根据flop\u sp\u效率的定义 实现的单精度浮点运算与峰值运算的比率 CUDA手册涵盖了触发器。度量收益率,例如10%。这就对“峰值”一词提出了两个问题: 1-这是硬件特定的值吗?因此,nvprof应该意识到,为了计算比率,分母对于在特定设备上运行的所有应用程序都应该是常数?根据手册,即无CUDA内核*图形时钟频率*2。这就是nvprof设定分母的方式吗 2-这是否意味着峰值是在每个内核的程序运行期间达到的?假设一个内核被调用了10次。一次调用具有最高的触发器(与硬件值无关),例如2G触发

根据
flop\u sp\u效率的定义

实现的单精度浮点运算与峰值运算的比率

CUDA手册涵盖了触发器。度量收益率,例如10%。这就对“峰值”一词提出了两个问题:

1-这是硬件特定的值吗?因此,nvprof应该意识到,为了计算比率,分母对于在特定设备上运行的所有应用程序都应该是常数?根据手册,即
无CUDA内核*图形时钟频率*2
。这就是nvprof设定分母的方式吗

2-这是否意味着峰值是在每个内核的程序运行期间达到的?假设一个内核被调用了10次。一次调用具有最高的触发器(与硬件值无关),例如2G触发器。然后将效率计算为
sum(FLOPS_i)/10
,它给出10次调用的平均FLOPS,然后将该平均值除以2,得到该内核的FLOPS效率。在这种假设下,一个内核可能达到2千兆次,而另一个内核可能达到4千兆次。我之所以这么说,是因为在nvprof中,度量是每个内核报告的

对此有何评论

  • 是的,“FLOPS”的定义是,乘法加运算可以被算作一个或两个“ops”。nvprof将简单地在效率计算中使用设备的峰值跳频率,其根据设备的属性(即ALU的数量)和设备报告的频率(我不相信它实时测量实际频率)确定

  • FLOPS已经是一个时间平均值(并且在单个内核的执行过程中会明显变化),因此当以每个内核为基础进行报告时,它也是所讨论内核的所有调用的平均值

  • 是的,“FLOPS”的定义是,乘法加运算可以被算作一个或两个“ops”。nvprof将简单地在效率计算中使用设备的峰值跳频率,其根据设备的属性(即ALU的数量)和设备报告的频率(我不相信它实时测量实际频率)确定

  • FLOPS已经是一个时间平均值(并且在单个内核的执行过程中会明显变化),因此当以每个内核为基础进行报告时,它也是所讨论内核的所有调用的平均值

  • NVPROF(和其他CUDA分析器)通过两次重放内核来计算触发器。在一次过程中,工具收集时间和经过的周期。在第二个过程中,该工具修改内核以计算触发器的总数

    SMCOUNT = CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT flops_sp_efficiency = flop_count_sp / (elapsed_cycles_sm * SM_MAX_FLOP_PER_CYCLE) SM_MAX_FLOP_PER_CYCLE = CUDA_CORES x 2 / SMCOUNT flops = flop_count_sp / gpu__time_duration x NANOSECONDS_PER_SECOND gpuclk_hz = elapsed_cycles_sm / SMCOUNT / gpu_time_duration x NANOSECONDS_PER_SECOND SMCOUNT=CU\u设备\u属性\u多处理器\u计数 flops\u sp\u效率=flop\u计数\u sp/(已用\u周期\u sm*sm\u最大\u flop\u每周期) SM_每个周期的最大触发器=CUDA_内核x 2/Smount 触发器=触发器计数\u sp/gpu \u时间\u持续时间x纳秒\u每秒 gpuclk\U hz=经过的\u周期\u sm/SMCOUNT/gpu时间\u持续时间x纳秒\u每秒 Appeased_cycles_sm是sm时钟域中所有SMs中经过的周期数总和。SM时钟域与图形时钟相同

    NVPROF既没有和事件,也没有持续时间的度量。可以使用跟踪活动在NVPROF中捕获持续时间。在Perfworks中,度量gpu时间持续时间是内核的挂钟持续时间

    Nsight VSE CUDA Profiler允许开发人员自定义每个指令的权重,或使用SASS正则表达式定义全新的实验。看

    回答1-是的,工具使用实时测量来确定理论最大值。这是在内核的重播中计算的

    回答2-为内核的每次执行收集度量。NVPROF(但不是其他工具)使用非加权平均值在具有相同函数名的内核上汇总度量。

    NVPROF(和其他CUDA分析器)通过重放内核两次来计算失败。在一次过程中,工具收集时间和经过的周期。在第二个过程中,该工具修改内核以计算触发器的总数

    SMCOUNT = CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT flops_sp_efficiency = flop_count_sp / (elapsed_cycles_sm * SM_MAX_FLOP_PER_CYCLE) SM_MAX_FLOP_PER_CYCLE = CUDA_CORES x 2 / SMCOUNT flops = flop_count_sp / gpu__time_duration x NANOSECONDS_PER_SECOND gpuclk_hz = elapsed_cycles_sm / SMCOUNT / gpu_time_duration x NANOSECONDS_PER_SECOND SMCOUNT=CU\u设备\u属性\u多处理器\u计数 flops\u sp\u效率=flop\u计数\u sp/(已用\u周期\u sm*sm\u最大\u flop\u每周期) SM_每个周期的最大触发器=CUDA_内核x 2/Smount 触发器=触发器计数\u sp/gpu \u时间\u持续时间x纳秒\u每秒 gpuclk\U hz=经过的\u周期\u sm/SMCOUNT/gpu时间\u持续时间x纳秒\u每秒 Appeased_cycles_sm是sm时钟域中所有SMs中经过的周期数总和。SM时钟域与图形时钟相同

    NVPROF既没有和事件,也没有持续时间的度量。可以使用跟踪活动在NVPROF中捕获持续时间。在Perfworks中,度量gpu时间持续时间是内核的挂钟持续时间

    Nsight VSE CUDA Profiler允许开发人员自定义每个指令的权重,或使用SASS正则表达式定义全新的实验。看

    回答1-是的,工具使用实时测量来确定理论最大值。这是在内核的重播中计算的


    回答2-为内核的每次执行收集度量。NVPROF(但不是其他工具)使用非加权平均值在具有相同函数名的内核上汇总度量值。

    关于最后一句话
    ,它也是所有内核实例的平均值,我认为您假定所有对该内核的调用,而不是所有的内核,因为后者是无意义的。关于最后一句话
    ,它也是所有内核实例的平均值,我认为你假设所有的内核调用,而不是所有的内核,因为后者是没有意义的。你提到的最大flop不同于手册。至少你没有提到图形频率。你能澄清一下吗?同样,根据这个公式,M2000有6个多处理器,每MP 128个核,对于o