有没有简单的方法可以让我知道某些代码是在GPU而不是CPU中执行的?
答案 0 :(得分:10)
我认为您需要直接了解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代码)。
答案 1 :(得分:1)
正如datenwolf所说,你编写的任何通过标准编译器(gcc等)编译的代码都将在CPU上运行。在GPU上运行的程序称为着色器。着色器中的变量类型与C / C ++程序不同,语法也更严格,更有限。
较旧的图形应用程序使用两种类型的着色器操作:顶点和片段。顶点着色器在发送到渲染器的几何体的任何顶点上操作。片段着色器将接收来自顶点着色器的输出(在几何面上进行插值),并将对将绘制到屏幕的几何体的每个像素或片段进行操作。
现代图形引入了General Purpose GPU Programming的想法。 OpenGL的几何着色器和Nvidia的CUDA可以在GPU上执行通用编程。
总结:编译的着色器在GPU上运行,编译的C / C ++在CPU上运行。
答案 2 :(得分:1)
取决于您使用哪种操作系统,以及OpenGL / OpenCL / other,您可以使用系统探查器为您提供此信息。系统分析器是一种跟踪系统范围活动的软件,并在跟踪完成后以可读的形式呈现。 例如,对于Windows,您可以使用Vtune,它监视CPU和GPU。
希望这有帮助。