我注意到用于CUDA的Nvidia Visual Profiler打印出一条显示寄存器使用的行:
Register Ratio = 0.75 ( 24576 / 32768 ) [48 registers per thread]
是否可以在OpenCL中生成类似的行?
我还没有看到任何OpenCL方式来查询寄存器的数量,或者使用那些寄存器。
答案 0 :(得分:2)
如DarkZeros所述,它是实现定义的。并且有很好的理由。
OpenCL没有对架构做出假设,因此没有定义单个寄存器比率的通用方法,更不用说根据它进行任何预测。作为AMD硬件的一个例子,你有两种寄存器。标量和向量寄存器。从某种意义上讲,它们是不相交的,它们会独立地溢出等等。
在CPU中,情况又完全不同,编译器甚至可以将不同的工作项组合到一个线程中。
要分析AMD硬件,您需要使用http://developer.amd.com/tools-and-sdks/heterogeneous-computing/amd-accelerated-parallel-processing-app-sdk/和附带的内核分析器,对于英特尔,您需要使用http://software.intel.com/en-us/vcsource/tools/opencl-sdk