一个包含多个OpenCL内核的程序相对于多个分别包含一个内核的程序的优势
Advantages of a program containing several OpenCL kernels versus several programs with one kernel each?
这个问题源于我希望在运行时从各种内核构建一个OpenCL程序。所以,想象一下,我有各种内核,我想在给定的上下文中用相同的内存对象集执行它们。
如果我提前知道我想组合成一个程序的所有内核,我就没有问题了——只需创建一个包含所有内核源代码或二进制文件的程序。
然而,考虑到我不知道我想提前组合哪些内核,我正在考虑为每个内核源创建一个程序。这是否等同于原始情况(假设编译时选项都相同)?调用驻留在不同程序中的内核会对性能造成影响吗?
问题可能是我不理解"程序"的抽象。它是什么?它不仅仅是内核和一些编译时选项的集合吗?
将OpenCL内核分组到一个程序中有几个好处:
-
通过多个
clBuildProgram()
调用多次调用编译器的(轻微)开销。这可以通过将一个源字符串编译到一个程序中,然后从中创建多个内核来避免。但是,在获得内核对象后,它所来自的程序的性能应该没有差异。 -
更显著的好处是:在程序中将内核分组在一起,使它们能够引用并使用彼此和/或其他相关的辅助函数。
示例:一个程序可以定义一个函数来在球面坐标和笛卡尔坐标之间转换,然后可以由多个内核使用,而无需复制其源。
相关文章:
- 码头化的C++应用程序是否向后兼容早期的内核版本
- Visual Studio 如何在内核模式驱动程序项目中使用C++标准库?
- 内核模式驱动程序可以在任何进程上执行读取进程内存吗?
- 将统一的内存指针传递给内核会减慢程序的速度
- 内核模块或用户空间应用程序
- 简单的内核模式驱动程序
- 如何开发仅使用一个内核的程序
- 如何修复在 Linux 内核 SPI 驱动程序中始终无法验证的 SPI 驱动程序
- 用户土地访问内核土地驱动程序系统通知
- Ubuntu,如何找到内核工作繁重的程序热点?似乎kernel.kallsyms上的函数没有标记为用户空间函数的子级
- 一个包含多个OpenCL内核的程序相对于多个分别包含一个内核的程序的优势
- 用户空间和内核空间进程中的信号处理程序集
- Visual Studio 在调试内核驱动程序时无法启动调试会话
- 内核模块定期调用用户空间程序
- 如何在 C/C++ 程序中加载内核模块
- 内核驱动程序读取内存未发送整个字符串
- OpenMPI 上的线程应用程序仅在节点上使用 1 个内核
- C# 应用程序是否可以与内核驱动程序通信
- CUDA 程序比 CPU 程序慢,但内核更快
- 是否有等效的RegQueryInfoKey用于Windows内核模式驱动程序