分享

OpenCL优化:OpenCL简介

 开花结果 2023-05-04 发布于北京

一、OpenCL的背景和概述

OpenCL是一个开放的、免费的标准框架,用于异构系统中的跨平台并行编程。它的设计方式可以帮助开发人员最大程度利用现代异构系统中可用的计算能力,并极大地促进跨平台应用程序开发。

Fig 1 Heterogeneous system using OpenCL

这个异构系统主要分成三个部分:

  • 主机CPU用于管理和控制应用程序。

  • 拥有多个OpenCL设备,包括GPU、DSP、FPGA和硬件加速器。

  • 由主机编译并加载到OpenCL设备上执行的内核代码。

二、OpenCL标准

OpenCL标准主要包括两个部分,OpenCL运行时API和OpenCL C语言。运行时API用于在host端进行资源管理、内核调度和许多其他任务的函数;而OpenCL C语言用于编写在OpenCL设备上执行的kernel。

1 OpenCL API函数

OpenCL的API函数可以分为平台层和运行时两类,表1和表2分别总结平台层和运行时的高级API。

Tabel 1 OpenCL platform layer functionality

Tabel 2 OpenCL run time layer functionality

2 OpenCL C语言

作为C99标准的一个子集,OpenCL C语言被用来编写可以在设备上编译和执行的kernel。但是C99标准和OpenCL C语言之间的存在一些差异,以下是两个关键的区别。

  • 由于硬件资源和OpenCL执行模型的限制,C99中的一些特性不被OpenCL C语言支持。例如函数指针和动态内存分配(malloc/calloc等)。

  • OpenCL C语言在几个方面对C99标准进行了扩展,使其能够更好地服务于其编程模型并促进开发。主要是两个方面:

    • 增加内置函数来查询OpenCL内核执行参数。

    • 在硬件GPU上具有图像加载/存储功能。

三、OpenCL的可移植性和向后兼容性

1 代码可移植性

OpenCL作为一个严格定义的计算标准,具有良好的代码可移植性。为一个供应商的平台编写的OpenCL应用程序应该可以在其他供应商的平台上很好地运行,如果它们没有使用任何供应商专有的或特定于平台的扩展或特性。

2 性能可移植性

与程序可移植性不同,OpenCL的性能通常是不可移植的。作为一种高级计算标准,OpenCL的硬件实现依赖于供应商。不同的硬件供应商有不同的设备架构,每种设备都有其优缺点。因此,为一个供应商的平台编写和优化的OpenCL应用程序不太可能具有与其他供应商的平台相同的性能。

即使是同一家厂商,其不同代的GPU硬件也可能在微架构和特性上存在差异,这可能导致OpenCL程序的性能存在显著差异。因此,为老一代硬件优化的应用程序通常需要进行微调,以充分利用新一代硬件的全部容量。

3 向后兼容性

OpenCL完全支持向后兼容,以确保在旧代码上的工作可以在OpenCL的新版本上毫无问题地运行。但注意有一些API函数可能在新版本中被弃用。OpenCL扩展并不能保证毫无更改的转移到新设备,所以应用程序需要检查新设备是否支持它们的特性。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多