最新消息: 你生产环境的Composer是怎么样的?
您现在的位置是:群英 > 服务器 > 系统运维 >
OpenCL编写程序有哪些流程?
CSDN发表于 2020-09-22 15:46 次浏览

        OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。

        下面文章简单介绍编写一般OpenCL程序的流程,并将每个步骤调用的API function列出来。

        OpenCL程序编写流程

        1、获取当前存在的有效的平台(platform),实际上可以理解为device的发行商,如因特尔、AMD等。(clGetPlatformIDs)

        2、选择获取到的平台中的其中一个,获取该平台当前存在的有效的设备(device),如CPU、GPU card。(clGetDeviceIDs)

        3、创建OpenCL context,context可以理解为是在host上的一个抽象的容器,由它来协调host与device交互的机制,管理device可用的内存对象,并跟踪为每个device创建的程序和内核。(clCreateContext)

        4、创建command queue,command queue用来对device发出host想要device去执行的一系列指令。如果是有多个device,则需对每个device创建各自的command queue。(clCreateCommandQueue)

        5、创建program,program可以理解为是kernels的集合,如果要执行的kernel有多个的话,则全部放置在一个program里面。创建完成后还需要编译一下该program看看有没有存在错误。(clCreateProgramWithSource、clBuildProgram)

        6、创建kernel对象,kernel对象可以理解为将当前想要执行的某个特定kernel从program里面提取出来,提取的依据是该kernel的名字。想要执行的kernel被提取出来之后还不能立即把它放置到command queue要求device去执行,而是需要先把该kernel的参数设置好(这里并不能像C语言调用函数一样去给参数,而是需要调用特定的API function去实现给参数)。(clCreateKernel、clSetKernelArg)

        7、给完kernel所需的参数后就可以将它放入(enqueue)到command queue里,然后device就会接收到要求,去执行该kernel。(clEnqueueNDRangeKernel)

        8、当然,除了以上步骤之外,还需按照需求穿插着和内存(memory)相关的操作,如,当需要利用buffer来储存数据时,首先要创建buffer对象,然后要将host里的数据写进buffer,写进数据的实现是将该操作放入(enqueue)command queue里;当kernel运行完成后要从kernel读出数据到host,也可通过buffer来实现,首先也是创建buffer对象,然后读出数据的实现也是通过放入(enqueue)command queue来实现。(clCreateBuffer、clEnqueueWriteBuffer、clEnqueueReadBuffer)

标签:OpenCL
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐