Amazon ec2 在OpenCL中使用PCIe吞吐量时的奇怪行为
使用OpenCL测试PCIe的吞吐量,我得到了奇怪的结果 我正在使用PCIe 3,x16。 数据大小=2097152(整数) 数据大小字节=8.388608 MB 代码如下:Amazon ec2 在OpenCL中使用PCIe吞吐量时的奇怪行为,amazon-ec2,opencl,fpga,pci-e,Amazon Ec2,Opencl,Fpga,Pci E,使用OpenCL测试PCIe的吞吐量,我得到了奇怪的结果 我正在使用PCIe 3,x16。 数据大小=2097152(整数) 数据大小字节=8.388608 MB 代码如下: struct timeval tv1, tv2; gettimeofday(&tv1, NULL); err=clEnqueueWriteBuffer(the_queue, dev_buffer, CL_TRUE, 0, (size_t)sizeof(int)*DATA_SIZE, (void *)host_b
struct timeval tv1, tv2;
gettimeofday(&tv1, NULL);
err=clEnqueueWriteBuffer(the_queue, dev_buffer, CL_TRUE, 0, (size_t)sizeof(int)*DATA_SIZE, (void *)host_buffer, 0, NULL, &event);
if (err != CL_SUCCESS) {
printf("Error:clEnqueueWriteBuffer:dbuff_in(code %d)\n\n", err );
exit(0);
}
clFinish(the_queue);
gettimeofday(&tv2, NULL);
printf ("Total time = %f seconds\n",
(double) (tv2.tv_usec - tv1.tv_usec) / 1000000 +
(double) (tv2.tv_sec - tv1.tv_sec));
err=clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END,sizeof(cl_ulong), &end, NULL);
if (err != CL_SUCCESS) {
printf("Error in profiling !!!Err code %d\n\n", err );
exit(0);
}
err=clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_START,sizeof(cl_ulong), &start, NULL);
if (err != CL_SUCCESS) {
printf("Error in profiling !!!Err code %d\n\n", err );
exit(0);
}
transfertime=transfertime+(end - start) * 1.0e-6f;
printf("%f ",transfertime/1000);
运行此代码时,我得到以下结果:
总时间=11.2毫秒
传输时间=0.02毫秒
注意:我使用了两种不同的方法来测量传输时间,一种是使用OpenCL评测信息,另一种只是测量代码的开始和结束
考虑到PCIe3 x16的吞吐量为15.62884615 GB,传输数据的理论时间为~0.54毫秒
使用基准点轮廓,我得到的结果比PCIe3的理论最大值快25倍左右,使用标准基准点(代码的起始端)时,我得到的结果比理论速度低约20倍
你能分享一下你的经验吗。
什么是基准测试的正确方法?总的来说,为什么这种行为如此奇怪
PS.该设备为FPGA(VU9P)