我的显卡是GTX970m支持opencl不支持opengl怎么处理 50
1个回答
展开全部
让不支持OpenCL的显卡支持OpenCL有点难度,这要求显卡本身开放一定程度的对底层硬件的支持。
不过也不是完全不可能。
比如目前有一个库叫做POCL,pocl - Portable Computing Language。想法是将OpenCL程序编译为系统支持的已有的并行计算语言,然后在相应的设备上执行。目前POCL主要在CPU上运行,它可以将OpenCL程序转换为类似PThread的多线程并行程序,然后在不支持OpenCL的设备上运行。其原理就有点像软件模拟了一个OpenCL的runtime。
借助类似的想法,我们就可以尝试创建一个中间层runtime,来进行代码的运行时编译和转换。将系统不支持的OpenCL代码转换到系统支持的某种API上去。
试想, 我们可以在一个NVIDIA显卡上,编写相应的编译器或runtime,将OpenCL程序转换为CUDA的二进制代码, 然后就可以在N卡上执行了。(当然,N卡本身支持OpenCL1.1, 最新的beta驱动支持OpenCL 1.2, 我们这里只是讨论一种可行性)。
更进一步, 我们甚至可以将OpenCL转换为OpenGL的shader kernel,然后在不支持OpenCL的显卡上运行。其实早年的GPGPU的研究,大部分都是借助pixel shader来进行并行计算的。后来才出现了针对通用并行计算的API。 对于较老的GPU,我们转换为Pixel shader。 对于新的GPU,我们可以借助Compute shader。
当然了,设计这样一个软件模拟的解决方案,无疑是巨大的工作量,难度也不低,需要对底层有很好的理解。同时,由于系统本身支持的API的一些限制,我们不可能支持所有的OpenCL的特性,必然会对性能有所影响。
但是单就可能性来说, 题主的问题的答案应当是:可行。
不过也不是完全不可能。
比如目前有一个库叫做POCL,pocl - Portable Computing Language。想法是将OpenCL程序编译为系统支持的已有的并行计算语言,然后在相应的设备上执行。目前POCL主要在CPU上运行,它可以将OpenCL程序转换为类似PThread的多线程并行程序,然后在不支持OpenCL的设备上运行。其原理就有点像软件模拟了一个OpenCL的runtime。
借助类似的想法,我们就可以尝试创建一个中间层runtime,来进行代码的运行时编译和转换。将系统不支持的OpenCL代码转换到系统支持的某种API上去。
试想, 我们可以在一个NVIDIA显卡上,编写相应的编译器或runtime,将OpenCL程序转换为CUDA的二进制代码, 然后就可以在N卡上执行了。(当然,N卡本身支持OpenCL1.1, 最新的beta驱动支持OpenCL 1.2, 我们这里只是讨论一种可行性)。
更进一步, 我们甚至可以将OpenCL转换为OpenGL的shader kernel,然后在不支持OpenCL的显卡上运行。其实早年的GPGPU的研究,大部分都是借助pixel shader来进行并行计算的。后来才出现了针对通用并行计算的API。 对于较老的GPU,我们转换为Pixel shader。 对于新的GPU,我们可以借助Compute shader。
当然了,设计这样一个软件模拟的解决方案,无疑是巨大的工作量,难度也不低,需要对底层有很好的理解。同时,由于系统本身支持的API的一些限制,我们不可能支持所有的OpenCL的特性,必然会对性能有所影响。
但是单就可能性来说, 题主的问题的答案应当是:可行。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询