例程描述
这个示例将演示在一个应用中用户在主机端(CPU)与FPGA交叠的运算,从而达到将数据传输隐藏在计算过程中,提高数据传输效率。其中包括异步操作和事件对象。
主要学习知识点
- Key Concepts
- OpenCL API
- Host 和 FPGA 同步 Synchronize Host and FPGA
- 处理过程异步 Asynchronous Processing
- 事件 Events
- 异步拷贝 Asynchronous memcpy
- Double Buffer 乒乓
- Burst Transfer 突发传输
- Keywords
- cl_event
- CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
- clEnqueueMigrateMemObjects
- clEnqueueMapBuffer
- clEnqueueReadBuffer VS clEnqueueWriteBuffer VS clEnqueueMapBuffer
- clEnqueueReadBuffer
- 从Cl_mem读回host mem(就算Cl_mem是直接使用host mem实现的,想读它的内容,还是要这样读回来,可以看做cl_mem是更高一层封装)
- clEnqueueWriteBuffer
- 使用host_mem的值写cl_mem
- clEnqueueMapBuffer
- 在Cl_mem和host mem之间做映射
- 这个函数比较特殊,在创建buf时有一种方法CL_MEM_USE_HOST_PTR,是直接让device使用host上已有的一块的mem(p1)做buf,但是这个产生的CL_mem(p2)经过计算后值会改变,p2改变后通常p1不会被改变,因为虽然用的一块物理空间,但是cl_mem是高层封装,和host上的mem还是不一样的,要想使p1同步到p2的最新值,就要调用这句map
- clEnqueueReadBuffer
主机端代码分析
1 | /* |
内核代码分析
内核源码
1 |
|
内核源码分析:
向量相加内核模块,采用burst 突发传输的形式,突发长度为BUFFER_SIZE。
需要学习的地方是,突发长度与数据导入过程需要进行比较,防止数据读入错误!
内核一次运算elements个数据。
综合报表
Performence图
关键理解概念描述
实验结果
1 | INFO: Importing xclbin/vector_addition.hw.xilinx_adm-pcie-7v3_1ddr.xclbin |