初始化时,主机应用需要识别由一个或多个赛灵思器件组成的平台。以下代码片段显示了识别赛灵思平台的常用方法。
cl_platform_id platform_id; // platform id
err = clGetPlatformIDs(16, platforms, &platform_count);
// Find Xilinx Platform
for (unsigned int iplat=0; iplat<platform_count; iplat++) {
err = clGetPlatformInfo(platforms[iplat],
CL_PLATFORM_VENDOR,
1000,
(void *)cl_platform_vendor,
NULL);
if (strcmp(cl_platform_vendor, "Xilinx") == 0) {
// Xilinx Platform found
platform_id = platforms[iplat];
}
}
OpenCL API 调用
clGetPlatformIDs
用于发现给定系统的可用 OpenCL 平台组合。随后,
clGetPlatformInfo
用于识别基于赛灵思器件的平台,方法是将 cl_platform_vendor
与字符串 "Xilinx"
相匹配。
建议: 虽然在前述代码或者本章全文所使用的其它主机代码示例中并未明确显示,但最好在每次 OpenCL API 调用后使用纠错功能,这是规范的编码实践。这样有助于调试,并且在仿真流程中或者硬件执行期间,当您执行主机与内核代码调试时,这也有助于提升效率。以下代码片段演示的正是
clGetPlatformIDs
命令的纠错代码示例。err = clGetPlatformIDs(16, platforms, &platform_count);
if (err != CL_SUCCESS) {
printf("Error: Failed to find an OpenCL platform!\n");
printf("Test failed\n");
exit(1);
}