oneAPI Image Processing Library によるポータブルな高速画像処理

インテル® IPPインテル® oneAPI

この記事は、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 仕様 (英語) は、画像データの抽象化と処理パイプラインに加え、プログラミング、実行、およびメモリーモデルを定義するトップレベルの 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 ベース・ツールキット
ハイパフォーマンスなデータセントリックのアプリケーションを多様なアーキテクチャー向けに開発してデプロイするのに必要なツールとライブラリーの基本セットを提供します。

今すぐ入手 (英語)
すべてのツールを見る (英語)

タイトルとURLをコピーしました