この記事は、HPCwire に公開されている「Portable, Accelerated Image Processing with the oneAPI Image Processing Library」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
インテル コーポレーションの副社長兼ソフトウェア開発製品事業本部長の Sanjiv Shah は、oneAPI v1.2 暫定仕様の新しい機能として oneAPI Image Processing Library (oneIPL) (英語) を発表しました。
oneIPL は、その名の通り、画像処理機能 (フィルター、幾何学変換、色/型変換、各種 3D 操作) を備えており、開発者はコードを変更せずに SYCL* API を介して多様な計算デバイスを活用できるようになります。oneIPL 仕様 (https://spec.oneapi.io/oneipl/latest/index.html) は、画像データの抽象化と処理パイプラインに加え、プログラミング、実行、およびメモリーモデルを定義するトップレベルの API (oneAPI マス・カーネル・ライブラリー [oneMKL] 仕様と同様) です (GitHub* で公開されている oneIPL Technical Advisory Board の議事録 (https://github.com/oneapi-src/oneAPI-tab/tree/main/tab-oneiplf) と最近の討議の概要 (https://github.com/oneapi-src/oneAPI-tab/blob/main/tab-oneipl/presentations/2021-12-16_Slides.pdf))。
継続的なハイパフォーマンスと API サポート
インテル® oneAPI Image Processing Library 製品 (インテルによる oneIPL 仕様の実装) には、数十年にわたって高いパフォーマンスを発揮してきたインテル® インテグレーテッド・パフォーマンス・プリミティブ (インテル® IPP) の画像処理機能が導入されています。次の機能が含まれます。
- C API サポート
- ポータブルでハイパフォーマンスな方法で画像計算をアクセラレーター・デバイスにオフロードする新しい SYCL* API
oneIPL 仕様 (暫定バージョン 0.8) には、ディープラーニングの画像前処理向けの初期機能セットが含まれています。
- 基本的な幾何学変換
- RGBA および RGB 画像からグレースケール、NV12、i420、RGBP への色変換
- 基本的な固定フィルター
oneMKL や oneDAL の API と同様に、oneIPL は以下を提供します。
- SYCL* キューを使用したヘテロジニアス並列操作のパイプライン構築
- リニア・デバイス・メモリーとハードウェア・アクセラレーションのタイル・イメージ・メモリーにおいてサポートされる形式とデータ型で動作する API
- 複数のメモリータイプ上で動作する新しい (画像を表現する) データ抽象化
- アロケーターによるメモリー割り当ての制御
- 処理画像の対象領域のサポート
例: アクセラレーターへのオフロード
ここでは、SYCL* と oneIPL を使用して、ガウスフィルターをアクセラレーターにオフロードする方法を説明します。
ガウスフィルターは、画像のぼかし、ノイズの除去、細部の除去によく使用されます。ガウス関数を使って画像の各ピクセルの変換を行います。
ぼかしの半径は、ガウス関数の標準偏差の値 (つまり、ブレンド操作で新しい各ピクセルを計算するため、いくつのピクセルが使用されるか) を定義します。半径が大きいほど、ぼかしは強くなります。
- SYCL* キューを使用して、画像を初期化する場所 (ホストまたはデバイスメモリー) と計算を行う場所 (ホストまたはデバイス) を指定していることに注目してください。
- ガウス関数はノンブロッキング (非同期) なので、デバイス上で計算が実行されている間、ホストは処理を続けることができます。
#include <oneapi/ipl.hpp> using namespace oneapi::ipl; const sycl::range<2> size{1920, 1080}; // デバイスキューを作成 sycl::queue queue; // キューに関連付けられたデバイス上で画像を作成 image<layouts::channel4, std::uint8_t> src_image{queue, src_image_pointer, size}; image<layouts::channel4, std::uint8_t> dst_image{queue, size}; // フィルターの半径を設定 const std::size_t radius = 20; // キューに関連付けられたデバイス上でガウスフィルターを適用 const gaussian_spec spec{radius}; gaussian(queue, src_image, dst_image, spec);
元の画像 |
半径 = 20 |
半径 = 50 |
クロスアーキテクチャー・パフォーマンス
oneIPL は、CPU やさまざまなアクセラレーターに対応したパフォーマンスの高いポータビリティーを提供します。
すでにインテル® IPP 画像処理を使用しているユーザーにとって、C/C++ API は引き続き oneIPL で一貫した使いやすさを開発者に提供します。
ベータ版
2022 年に提供される oneIPL ベータ版は、一般に公開されていません。参加をご希望の方は、インテル® IPP のサポート (英語) までお問い合わせください。
関連ウェビナー
GROMACS クロスアーキテクチャー開発を強化するインテル® oneAPI ツール
ウェビナーを見る (英語)
関連ポッドキャスト
さまざまなアーキテクチャーでパフォーマンスの移植性を実現
ポッドキャストを聴く
関連記事
SYCL* と C++ を補完するオープンなデータ並列 C++ (DPC++) 拡張
記事を読む
チュートリアル: DPC++ プログラミング
記事を読む (英語)
ソフトウェアを入手
インテル® oneAPI ベース・ツールキット
ハイパフォーマンスなデータセントリックのアプリケーションを多様なアーキテクチャー向けに開発してデプロイするのに必要なツールとライブラリーの基本セットを提供します。
今すぐ入手 (英語)
すべてのツールを見る (英語)