我们先来搞清几个概念:

像4核CPU就是一个计算平台设备里面有4个计算部件。可以并行执行四个运算操作。因此我们除了要获取系统里计算平台设备信息外,还要获取每个设备里面的计算核心信息,这样才可以对我们的程序进行最大优化。 OpenCL除了获取计算机平台设备数目外,还可以获取这些设备的特性数据。比如刚才说的,CPU是几核心的,频率是多少,CACHE是多大等等这些数据。我们在上节课的程序中进行修改,检测每个计算平台的计算部件信息。

程序代码如下:

codeblocks的调试工具栏(用Codeblocks进行OpenCL编程2)(1)

codeblocks的调试工具栏(用Codeblocks进行OpenCL编程2)(2)

codeblocks的调试工具栏(用Codeblocks进行OpenCL编程2)(3)

codeblocks的调试工具栏(用Codeblocks进行OpenCL编程2)(4)

程序运行结果如下:

codeblocks的调试工具栏(用Codeblocks进行OpenCL编程2)(5)

硬件检索运行结果

大家可看到,我的计算机上有两个计算平台,第一个平台包含了CPU和GPU。第二个平台只包含了CPU。这是怎么回事呢?注意看第二个平台支持的OpenCL版本是 OpenCL2.1。而且还只是实验性版本。这下明白了。OpenCL把计算平台分得很细。这里面又有几个问题了,全局内存、本地内存、最大工作组是什么意思呢?这些我们下节课再讲。

,