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