有没有简单的方法可以知道一些代码是在GPU而不是CPU上执行的?
我认为你需要清楚CPU和GPU工作分离的概念。如果你编写并使用非针对GPU执行的常规编译器编译代码,该代码将始终在CPU上执行。
主程序中所有OpenGL或DirectX函数的调用都在CPU上执行,没有“神奇”的翻译层。但是,其中一些调用会使GPU做一些事情,例如绘制三角形。
CUDA和OpenCL是专门针对数据并行执行结构的语言。GPU就是这样的结构。但是CUDA和OpenCL代码需要一些主机程序来执行,而这些程序将在CPU上执行。可编程着色器(HLSL,GLSL)同样如此。
因此:程序的主机部分(设置工作环境,发出渲染调用或GPU执行)将在CPU上运行。在GPU上运行的代码是在单独的编译单元中编译的(即上传到OpenGL的GLSL着色器代码,使用OpenCL / CUDA编译器编译的OpenCL / CUDA代码)。
float a = 0.5*0.7
将被执行大约零次。具体来说,编译器将在处理程序时评估和折叠常量,并将用 0.35 替换每个 a
的出现,直到遇到更改该值的 a
赋值为止。 - datenwolf