一、OpenCL的背景和概述 OpenCL是一个开放的、免费的标准框架,用于异构系统中的跨平台并行编程。它的设计方式可以帮助开发人员最大程度利用现代异构系统中可用的计算能力,并极大地促进跨平台应用程序开发。 这个异构系统主要分成三个部分:
二、OpenCL标准 OpenCL标准主要包括两个部分,OpenCL运行时API和OpenCL C语言。运行时API用于在host端进行资源管理、内核调度和许多其他任务的函数;而OpenCL C语言用于编写在OpenCL设备上执行的kernel。 1 OpenCL API函数 OpenCL的API函数可以分为平台层和运行时两类,表1和表2分别总结平台层和运行时的高级API。 2 OpenCL C语言 作为C99标准的一个子集,OpenCL C语言被用来编写可以在设备上编译和执行的kernel。但是C99标准和OpenCL C语言之间的存在一些差异,以下是两个关键的区别。
三、OpenCL的可移植性和向后兼容性 1 代码可移植性 OpenCL作为一个严格定义的计算标准,具有良好的代码可移植性。为一个供应商的平台编写的OpenCL应用程序应该可以在其他供应商的平台上很好地运行,如果它们没有使用任何供应商专有的或特定于平台的扩展或特性。 2 性能可移植性 与程序可移植性不同,OpenCL的性能通常是不可移植的。作为一种高级计算标准,OpenCL的硬件实现依赖于供应商。不同的硬件供应商有不同的设备架构,每种设备都有其优缺点。因此,为一个供应商的平台编写和优化的OpenCL应用程序不太可能具有与其他供应商的平台相同的性能。 即使是同一家厂商,其不同代的GPU硬件也可能在微架构和特性上存在差异,这可能导致OpenCL程序的性能存在显著差异。因此,为老一代硬件优化的应用程序通常需要进行微调,以充分利用新一代硬件的全部容量。 3 向后兼容性 OpenCL完全支持向后兼容,以确保在旧代码上的工作可以在OpenCL的新版本上毫无问题地运行。但注意有一些API函数可能在新版本中被弃用。OpenCL扩展并不能保证毫无更改的转移到新设备,所以应用程序需要检查新设备是否支持它们的特性。 |
|