通用的opencl platform id 获取方法通常是
cl_int clGetPlatformIDs(cl_uint num_entries,
cl_platform_id *platforms,
cl_uint *num_platforms)
这个命令会得到可用的OpenCL平台的列表。这个函数的platforms 和 num_platforms都可以设定为NULL,以获取到不同的信息。 如果参数platforms为NULL,clGetPlatformIDs会返回可用平台数。返回的平台数可以用num_entries来限制,这个参数要大于0并小于或等于可用平台数。可以将num_entries和platforms分别设置为0和NULL来查询可用的平台个数。
如果想要给没有平台都分配一个platformID,则可以调用clGetPlatformIDs两次,第一次把Platform 参数设定为NULL,通过num_platforms参数获取当前的platform个数,再为每个platform分配一个cl_platform_id数据结构。然后再次调用clGetPlatformIDs函数为每个platform分配对应的cl_platform_id。
举一个简单的例子说明如何查询和选择平台,下面使用clGetPlatformIDs()得到一个平台ID列表:
cl_int errNum;
cl_uint numPlatforms;
cl_platform_id * platformIDs;
errNum=clGetPlatformIDs(0,NULL,&numPlatforms);
platformIDs=(cl_platform_id*)malloc(sizeof(cl_platform_id)*numPlatforms);
errNum=clGetPlatformIDs(numPlatforms,platformIDs,NULL);
然而对于Intel FPGA 平台的时候,针对这个方法进行了进一步的封装
platformid=findPlatform("Intel(R) FPGA");
其中可以指定的字符串为:
“Intel(R) FPGA SDK for OpenCL”,
“Intel(R) FPGA SDK”, 或者 “Intel(R) FPGA”.
之前使用的Altera 字样会报错。ERROR: Unable to find Altera OpenCL Platform