opencl - 创建图像的成本

时间:2015-08-30 08:25:29

标签: opencl

在我的主持人计划中,我检查了创建图像的时间。

只需创建而不复制需要0.03秒。

为什么会发生这种事情需要比某些内核的执行时间更长的时间?

     fmt.image_channel_order=CL_RG;
     fmt.image_channel_data_type =CL_FLOAT;
      clock_gettime(CLOCK_REALTIME, &time_start_temp);
    cl::Image2D  test_image=cl::Image2D(gContext,CL_MEM_WRITE_ONLY,fmt,width,height,0,NULL);//width= 2560 height=1440
         clock_gettime(CLOCK_REALTIME, &time_end_temp);
    time_elapsed = getTimeElapsed(time_end_temp, time_start_temp);
                        LOGI("image copy TIME, %f ", time_elapsed);


    float getTimeElapsed(struct timespec end, struct timespec start) {
    struct timespec temp;
    float res;

    temp.tv_sec = end.tv_sec - start.tv_sec - 1;
    if ((end.tv_nsec - start.tv_nsec) < 0) {
        temp.tv_nsec = 1e9 + end.tv_nsec - start.tv_nsec;
    } else {
        temp.tv_sec = end.tv_sec - start.tv_sec;
        temp.tv_nsec = end.tv_nsec - start.tv_nsec;
    }
    res = ((float) temp.tv_sec) + ((float) temp.tv_nsec / 1e9);

    return res;
}

1 个答案:

答案 0 :(得分:1)

您没有显示所有代码,但如果在创建映像之前有clEnqueue调用,某些运行时将在创建映像之前执行隐式clFinish,因此您的30 ms可能包含那。这是因为图像和缓冲区分配和空闲调用是同步的,而命令队列功能是异步的,并且驱动程序不是最佳的。如果你在测试之前放了一个clFinish,时间是否会改变?你使用什么运行时?