使用 oneAPI 图像处理库进行可移植的、加速的图像处理





5.00/5 (2投票s)
在本文中,我们将讨论如何使用 SYCL 和 oneIPL 将高斯图像滤波卸载到加速器。
Sanjiv Shah(英特尔副总裁兼开发者软件工程总经理)宣布,oneAPI 图像处理库 (oneIPL) 是 oneAPI v1.2 临时规范中的一个新元素。
顾名思义,oneIPL 包含图像处理功能——滤波器、几何变换、颜色和类型转换以及各种 3D 操作——允许开发人员通过 SYCL* API 利用各种计算设备,而无需更改他们的代码。oneIPL 规范 是一个顶级 API(类似于 oneAPI Math Kernel Library [oneMKL] 规范),它描述了图像数据抽象和处理管道以及编程、运行和内存模型。(oneIPL 技术咨询委员会的会议记录在 GitHub* 上。最近讨论的概述在此 演示文稿 中。)
持续的高性能和 API 支持
即将推出的 Intel® oneAPI 图像处理库产品(Intel 的 oneIPL 规范实现)具有来自 Intel® Integrated Performance Primitives (Intel® IPP) 的图像处理能力,该产品数十年来一直提供高性能。它继续
- 支持 C API
- 提供新的 SYCL* API,以可移植、高性能的方式将图像计算卸载到加速器设备
oneIPL 规范(临时版本 0.8)包括一组针对深度学习的图像预处理的初始功能
- 基本几何变换
- RGBA 和 RGB 图像到灰度、NV12、i420 或 RGBP 的颜色转换
- 基本固定滤波器
与 oneMKL 和 oneAPI Data Analytics Library 的 API 类似,oneIPL
- 使用 SYCL 队列来构建异构并行操作的流水线
- 具有旨在处理线性设备内存和支持的格式和数据类型的硬件加速平铺图像内存的 API
- 包括一个新的数据抽象(用于表示图像),该抽象处理多种类型的内存
- 通过分配器控制内存分配
- 支持已处理图像的感兴趣区域部分
示例:卸载到加速器
让我们讨论如何使用 SYCL 和 oneIPL 将高斯图像滤波卸载到加速器。
高斯滤波通常用于模糊图像、去除噪声和去除细节。高斯函数用于计算图像中每个像素的变换。
模糊的半径定义了高斯函数的标准偏差值(换句话说,在混合操作中使用多少像素来计算每个新像素)。半径越大,模糊程度越高。
- 请注意如何使用 SYCL 队列来指定图像的初始化位置(主机或设备内存)以及计算发生的位置(主机或设备)。
- 高斯函数是非阻塞的(异步的),因此主机可以在设备上运行计算时继续运行。
#include <oneapi/ipl.hpp>
using namespace oneapi::ipl;
const sycl::range<2> size{1920, 1080};
// Create device queue
sycl::queue queue;
// Create images on device associated with queue
image<layouts::channel4, std::uint8_t> src_image{queue, src_image_pointer, size};
image<layouts::channel4, std::uint8_t> dst_image{queue, size};
// Set the radius of the filter
const std::size_t radius = 20;
// Apply Gaussian filter on the device associated with queue
const gaussian_spec spec{radius};
gaussian(queue, src_image, dst_image, spec);
源图像 | 半径 = 20 | 半径 = 50 |
![]() | ![]() | ![]() |
跨架构性能
oneIPL 提供了跨 CPU 和各种加速器的高性能可移植性。
对于已经使用 Intel IPP 图像处理的人员,C 和 C++ API 继续具有与 oneIPL 一致的开发人员易用性。
Beta 机会
部分用户可以在 2022 年参与 oneIPL Beta。要参与,请通过 Intel IPP 下的 支持 联系我们。