shirazbj 发表于 2012-12-26 08:11:28

win下ati卡用gcc编opencl笔记五

双精度改单精度

例子FluidSimulation2D是双精度的,我的HD5570不支持,给改成单精度的了。附改好的可执行文件。
在dos窗口里执行2d即用GPU计算。
                   执行2d --device cpu即用CPU计算

主要是把源程序中的double全部自动替换成float

但这句:
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );

是关于opengl的语句,其中的GLUT_DOUBLE里的double不能被换掉。

然后把FluidSimulation2D.cpp中这段删掉或注释掉:

    // Check if cl_khr_fp64 extension is supported
    if(strstr(deviceInfo.extensions, "cl_khr_fp64"))
    {
      buildOptions.append("-D KHR_DP_EXTENSION");
    }
    else
    {
      // Check if cl_amd_fp64 extension is supported
      if(!strstr(deviceInfo.extensions, "cl_amd_fp64"))
      {
            reqdExtSupport = false;
            OPENCL_EXPECTED_ERROR("Device does not support cl_amd_fp64 extension!");
      }
    }

还有FluidSimulation2D_Kernels.cl中这段注释掉

#ifdef KHR_DP_EXTENSION
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#else
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#endif

cl_khr_fp64和cl_amd_fp64是控制要不要双精度的,一个是khr定义的标准opencl的,一个是amd的具体实现。以前amd的是khr的子集,有区别,现在应该没有了。

[ 本帖最后由 shirazbj 于 2012-12-26 08:27 编辑 ]

shirazbj 发表于 2012-12-26 08:13:47

GPU的结果

shirazbj 发表于 2012-12-26 08:15:14

i7-870的结果,比hd5570处理的快。

shirazbj 发表于 2012-12-26 08:24:44

i7-870双精度的结果,比单精度慢了些。
页: [1]
查看完整版本: win下ati卡用gcc编opencl笔记五