OpenCL与CNN篇三:OpenCL入门及API使用

  1. OpenCL平台API : 平台API定义了宿主机程序发现OpenCL设备所用的函数以及这些函数的功能,另外还定义了为OpenCL应用创建上下文的函数.
  2. 这里推荐一下我的参考书籍:《OpenCL编程指南》和《OpenCL异构计算》,前者风格像一个说明文档,后者带你实践;推荐后者因为代码更简洁一些,本来OpenCL初始化都有点复杂了,而前者还能搞的更复杂,苦笑……,不过《指南》的优点是对API解释的比较详细。
  3. 再送一个在线的OpenCL API查询库,建议收藏:OpenCL 2.1 Reference Pages
  4. 让了让萌新们更快上手,我直接以实例开始,争取读完就能写下自己第一个OpenCL程序,至于API的学习参考书籍或者上一条
  5. 为方便查阅,本系列用到的几个API将在篇二给出说明,我先写好的篇三ヾ(o◕∀◕)ノヾ。

一、初始化的平台相关变量

这里主要有平台、上下文、设备、命令队列、程序、内核等,这几项是通用的;其他如缓冲区等看需创建哈。文件开始先声明几个需要主要的变量:

    cl_int           errNum;
    cl_platform_id   platform;        // 0.  使用简明:
    cl_device_id     device;          // 1.  在平台选定设备
    cl_context       context;         // 2.1 在指定设备创建上下文
    cl_command_queue cmdqueue;        //     创建一个命令队列关联上下文中指定设备
    cl_program       program;         // 2.2 关联上下文创建程序对象,并对列表设备构建  
    cl_kernel        kernel;          // 3.  由程序对象创建内核
    printf("\n\n OpenCL_Initing .....");

1.1、查询平台 clGetPlatformIDs( )

首先呢,我们申请一个平台变量的指针类型,在获取平台个数以后,再为其指定空间。对clGetPlatformIDs调用两次,第一次获取获取平台数量,第二次获取平台列表。有些老式设备在第一次调用clGetPlatformIDs可能花费时间较久,比如我的,建议选择以高性能显卡启动VS,情况会稍微缓解一些。

    cl_uint          numPlatforms =1;
    cl_platform_id  *platformIds;
    errNum = clGetPlatformIDs( 1, NULL, &numPlatforms);  
    platformIds =(cl_platform_id*)malloc(sizeof(cl_platform_id)*numPlatforms);
    errNum = clGetPlatformIDs( numPlatforms, platformIds, NULL); 
    assert(errNum==CL_SUCCESS);

1.2、 从平台查询设备 clGetDeviceIDs( )

一般情况我们直接选定第一个平台,查询设备即可,入门可以选这样干着,日后熟悉OpenCL了可以实验深入一点的东西。这个方式和查询平台相同,第一次调用查询设备数,创建存储空间后第二次获取设备列表。这里需要指定设备类型

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值