是否可以从Linux内核模块运行CUDA或OpenCL应用程序? 我发现了一个提供此功能的项目,但它需要一个用户空间帮助程序才能运行CUDA程序。 (https://code.google.com/p/kgpu/)内核模式GPGPU使用情况
虽然这个项目已经避免了用户和内核空间之间的冗余存储器复制,但我想知道是否有可能完全避免用户空间?
编辑: 让我扩大我的问题。我知道内核组件只能调用内核和其他内核组件提供的API。所以我不打算直接调用OpenCL或CUDA API。 CUDA或OpenCL API最终必须调用图形驱动程序才能使其发生奇迹。很可能这个接口是完全非标准的,随着每个版本的变化而变化,等等......
但是假设你有一个编译好的OpenCL或CUDA内核,你想运行。 OpenCL/CUDA用户空间库在实际运行内核之前是否做了一些繁重的工作,或者它们只是驱动程序接口的轻量级包装?
我也知道,用户空间助手可能是因为用于调用驱动程序直接将最有可能得到一个新的驱动程序版本打破这样做是最好的选择...
通过OpenCL,您可以轻松地生成ptx文件(必须将其拼接到最终的GPU架构),但使用CUDA时,您可以在生成Cubin或fatbin时使用编译器选项,要么是产生必须被激发的代码的虚拟架构,要么是真正的“金属”架构)。也许有一种“简单”的方式发送一个cubin到驱动程序...... – Jaka
@Jaka:大约有10个不同的CUDA驱动程序API调用需要从一个Cubin获取代码到一个可以启动内核的状态。如果您在驱动程序API应用程序上运行strace,那么这10个API调用的初始化阶段可能会执行* 50 *个用户空间系统调用。简单是一个非常主观的术语,但它不是我会选择.... – talonmies