OpenCL 设计Host Application
1、程序设计要求
主机内存需求。
二进制需求。使用用x86-64(64位)或ARM®32位ARMV7-A。
多个主机线程。
乱序的命令队列。
多个命令队列同时执行内核的要求。要同时在同一个OpenCL程序中执行多个kernel,要为投股市运行的每个kernel实例化一个单独的有序命令队列,也可以通过使用单个乱序命令队列并排序各个独立的kernel(彼此没有依赖关系)来实现。
2、分配OpenCL buffer以对全局内存进行手动分区
手动分区global memory buffer可以控制跨buffer的内存访问,从而最大程度提高内存带宽。可以跨相同内存类型或不同内存类型的接口对buffer进行分区。
3、在kernel执行期间收集配置文件数据
如果主机应用程序完成后kernel执行完成,可以显示查询FPGA来手收集kernel执行期间的配置文件。对于绝大多数应用程序,内核执行完成后自动读取配置文件的默认行为已经足够了。而可以使用Intel dynamic profiler可以在设计执行时从硬件收集性能信息。
在编译期间对opencl kernel进行分析,会自动生成profile.mon文件,在FPGA上完成kernel执行后,将配置文件数据写入profile.mon。然而若kernel执行完成实在主机应用程序终止之后,那么profille.mon文件中没有关于kernel调用的分析信息,这种情况下可以修改host代码来获得kernel执行期间的性能分析信息。
在kernel执行过程中收集配置文件数据可能会增加kernel的延迟,从而增加执行kernel的开销,如果需要在kernel运行时查询FPGA配置信息,需要在host库中调用:
extern CL_API_ENTRY cl_int CL_API_CALL clGetProfileInfoIntelFPGA(cl_event);
未经允许,请勿转载