我需要为我的开源项目1.2实现一个真正有效的平台版本筛选器:https://github.com/tugrul512bit/Cekirdekler。
目前,我没有150美元可以购买OpenCL2.0功能的显卡,所以我正在开发一个纯1.2版本的系统,不确定其他(新的)系统。
问题:当同一个系统中只有OpenCL2.0功能的gpus和1.2(max)和2.0(max)功能gpus时,平台的列表是什么样子的呢?
让我们假设我在用这个
clGetPlatformIDs()得到一份名单。我想它应该只给每个设备一个版本的平台,还是,
例如,GTX(OpenCL2.0功能?)可以列出两个平台:
同样的设备单独使用?还是只提供2.0版本?
和GT-640怎么样?
或
哪一种呢?
这种情况会随司机而改变吗?
那么OpenCL版本2.3GPU呢?在OpenCL API中,它们是否看起来是2.0,还是正确地将3作为次要版本?
如果有人能分享他/她的经历,我很感激。
目前,项目可以采用1.2或2.0版本(我安装的Intel驱动程序有一个带有bug的试验性版本2.1,因此,我不确定Nvidia或Amd是否可以在OpenCL-2.x功能卡中执行类似或相反的操作)。我也可以过滤平台名称“试验性”/“测试版”,以排除这类平台,但我不确定同一GPU是否有多个版本。
我假设2.0设备对1.2具有向后兼容,但我是否需要额外的东西来启用1.2规范?目前,我不会为1.2设备做任何额外的事情。也许2.0需要一些吗?
发布于 2017-04-08 13:36:15
每个平台独立于其他平台返回自己的版本号。您可以混合使用,例如,GPU为1.2,CPU驱动程序为2.0。
如果只发出OpenCL 1.2API调用,则可以使用这两种调用。如果进行OpenCL 2.0API调用,则只能使用2.0或更高版本的平台。
同样,平台中的设备可以返回它们自己的版本号,尽管我认为它们不能大于它们的父平台号。这方面的一个例子是一个较旧的GPU,它可能只是OpenCL 1.1,尽管平台是1.2。
与此不同的是每个设备所支持的OpenCL内核语言的版本。为了向后兼容,如果您不传递编译选项,您将得到OpenCL C1.x。如果您在2.x设备上,那么在编译内核以获得新的语言特性时,可以传递一个选项字符串。
https://stackoverflow.com/questions/43292748
复制相似问题