Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencl 使用clGetEventProfilingInfo分析clEnqueueWriteBuffer_Opencl - Fatal编程技术网

Opencl 使用clGetEventProfilingInfo分析clEnqueueWriteBuffer

Opencl 使用clGetEventProfilingInfo分析clEnqueueWriteBuffer,opencl,Opencl,是否可以使用clGetEventProfilingInfo函数获取clEnqueueWriteBuffer函数所用的时间。我试着使用它,得到了与CL_PROFILING_COMMAND_START和CL_PROFILING_COMMAND_END相同的值。我想知道这是因为我的代码中出现了一些错误,还是因为分析对clEnqueueWriteBuffer不起作用 我的代码片段是: //写入输入缓冲区 clEnqueueWriteBuffer(队列[0],buf_A,CL_TRUE,0,分区大小*si

是否可以使用clGetEventProfilingInfo函数获取clEnqueueWriteBuffer函数所用的时间。我试着使用它,得到了与CL_PROFILING_COMMAND_START和CL_PROFILING_COMMAND_END相同的值。我想知道这是因为我的代码中出现了一些错误,还是因为分析对clEnqueueWriteBuffer不起作用

我的代码片段是:

//写入输入缓冲区

clEnqueueWriteBuffer(队列[0],buf_A,CL_TRUE,0,分区大小*sizeof(int),输入大小+(分区大小*j),0,NULL,&事件列表[0])

支票(cl_err,“clEnqueueWriteBuffer:buf_A”)

clWaitForEvents(1,事件列表);
clGetEventProfilingInfo(事件列表[0],CL_PROFILING_命令_排队,sizeof(time_start_排队),time_start_排队,NULL);
clGetEventProfilingInfo(事件列表[0],CL_PROFILING_命令_START,sizeof(time_START),&time_START,NULL);
clGetEventProfilingInfo(事件列表[0],CL_PROFILING_命令_END,sizeof(time_END),&time_END,NULL);
总时间=((双倍)时间结束-时间开始)/1000000;
总排队时间=((双倍)时间结束-时间开始排队)/1000000;
最终时间数据+=总时间;
最终排队时间数据+=总排队时间;

coutYes,这个评测API应该适用于任何
clEnqueue*
命令,因此OpenCL运行时中可能存在错误,或者代码有问题。如果您提供代码片段,我们可能会提供帮助。您要传输多少数据?可能是因为数据太小,传输过程中没有时间。此外,如果时间在计时器精度范围内,则可能导致结果为0。使用CL_DEVICE_PROFILING_timer_RESOLUTION检查计时器精度,通常值介于1和500nsAlso之间,请确保您的命令队列是使用CL_queue_PROFILING_ENABLE标志创建的。我在创建命令队列时已启用该标志。我正在尝试传输4MB的数据。此外,我使用的是ARM A10 APU。我的理解是,APU的GPU和CPU有一个统一的内存。那么,数据是否可能只是被映射到GPU区域而没有被复制?我以为clEnqueueWriteBuffer总是复制数据。我不确定。如果你对此有任何想法,请告诉我。提前谢谢
    clWaitForEvents(1, eventList);
    clGetEventProfilingInfo(eventList[0], CL_PROFILING_COMMAND_QUEUED, sizeof(time_start_queued), &time_start_queued, NULL);
    clGetEventProfilingInfo(eventList[0], CL_PROFILING_COMMAND_START, sizeof(time_start), &time_start, NULL);
    clGetEventProfilingInfo(eventList[0], CL_PROFILING_COMMAND_END, sizeof(time_end), &time_end, NULL);
    total_time = ((double)time_end - time_start)/1000000;
    total_time_queued = ((double)time_end - time_start_queued)/1000000;
    final_time_data += total_time;
    final_time_queued_data += total_time_queued;
    cout<<"\nTime: "<<final_time_data<<" "<<final_time_queued_data;