zoukankan      html  css  js  c++  java
  • OpenCL数据的传送与划分

    选定一个platform,创建上下文context。

    context被成功创建好之后,CL的工作环境就等于被搭建出来了,CL_DEVICE_TYPE_ALL意味着把platform下所有连接这个context作为compute device。

    为每个device创建commandQueue。command queue是每个device发送指令的信使。

    cqueue[i] = clCreateCommandQueue(context, did[0], 0, 0);
    

    进入真正在device run code的阶段:kernel函数的准备

    cl_int clCreateKernelsInProgram(cl_program program,    //成功创建执行的program对象
                                    cl_uint num_kernels,    //kernels指定地址的kernel数目
                                    cl_kernel *kernels, //返回程序中内核对象的缓冲区地址。如果是NULL,则忽略。否则缓冲区的地址需要足够大以接收
    cl_uint *num_kernels_ret) //程序中一共有多少kernel,如果是NULL,则忽略。
    //给一个kernel的某些特定参数值赋值
    cl_int clSetKernelArg(cl_kernel kernel,      cl_uint arg_index, size_t arg_size, const void *arg_value)

      

    cl_mem clCreateBuffer(cl_context context,  //一个有效的上下文
                          cl_mem_flags flags,  //针对cl上的缓冲对象的一些设置
                          size_t size,      //以byte为单位,对于buffer应该被开辟的空间
                          void *host_ptr,    //一个指向之前被开辟的buffer数据的指针,buffer的空间必须>= size bytes
                          cl_int *errcode_ret)  //错误代码
    

    这里要说明的是,cl计算的变量要位于device的存储上(例如显卡的显存),这样才能快起来,所以首先要把内存搬家,把这部分输入数据从hsot mem拷贝到device的mem上。

  • 相关阅读:
    【Leetcode】Insertion Sort List JAVA实现
    【Leetcode】Sort List JAVA实现
    Maximum Product Subarray JAVA实现
    hadoop2.0中无法启动datanode的问题
    合并排序
    setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式
    postgresql 服务器端编程之hello word
    mac osx get postgresql path
    mac osx install mysql
    django 基于proxy实现用户权限管理
  • 原文地址:https://www.cnblogs.com/tcsong24/p/6535995.html
Copyright © 2011-2022 走看看