Intel が SPMD 拡張機能を備えた C 言語用に開発した ISPC 1.26 コンパイラのリリース

Intel は、SPMD (Single Program, Multiple Data) 並列プログラミング拡張機能を使用して C コードをアセンブルするように設計された ISPC 1.26 (Implicit SPMD Program Compiler) を公開しました。これにより、異なる入力データ セットを持つ同じプログラムの複数のインスタンスを並列実行できます。プロジェクト コードは C++ で記述され、BSD ライセンスに基づいて配布されます。 Linux、Windows、macOS、FreeBSD での動作をサポートします。

SPMD 拡張機能を備えた C プログラムは、CPU および GPU によって提供される SIMD 計算ユニット上で実行できるようにコンパイルされます。これにより、低レベルの最適化やコード内で SIMD 命令を明示的に使用することなく、SIMD ベクトル化メカニズムを使用できるようになります。並列化可能な関数を記述するには、C 言語の使い慣れた構文とイディオムが使用されます。SPMD 関数は、C/C++ で記述された関数および構造と直接対話します。既存のデバッガを使用してプログラムをデバッグできます。

ISPC は、コード生成と最適化のバックエンドとして LLVM インフラストラクチャを使用します。 x86 (SSE2、SSE4、AVX、AVX2、AVX512) および ARM (NEON) ベクトル命令がサポートされているほか、GPU 側 (Intel Gen9 および Xe) への計算のオフロードもサポートされています。一度に 4 要素を処理する SSE ベクトル ブロックを備えたアーキテクチャでは、ISPC を使用することでプログラム実行の高速化を 3 倍以上達成できます。また、一度に 8 要素を処理する AVX ベクトル ブロックを備えたアーキテクチャでは、加速は 5 倍に達します。 6回。さらに、ベクター ブロックのサイズに加えて、異なるプロセッサ コアでの実行によってスケーリングも確保されます。

ISPC バージョン 1.26 で追加された主な革新:

  • ARM アーキテクチャのサポートが改善しました:
    • 「--arch=arm」フラグの動作が変更され、ARMv8 ではなく ARMv32 (7 ビット) アーキテクチャに関連付けられるようになりました (8 ビット モードの ARMv64 の場合は、「--arch=aarch64」フラグを引き続き使用する必要があります)。
    • ARMv7 Cortex-a9 および Cortex-a15 プロセッサのサポートは廃止されました。
    • Cortex-a55、Cortex-a78、Cortex-a510、Cortex-a520 プロセッサ、および新しい Apple ARM プロセッサのサポートが追加されました。
    • 新しいビルド ターゲットが追加されました: neon-i16x16 および neon-i8x32。
    • ARM SDOT および UDOT ベクトル命令に基づく操作のサポートが追加されました。
    • 最適化が行われ、ARMv8 のパフォーマンスが平均で 13% 向上しました。
  • 新しいタイプのビルド ターゲット「ジェネリック」が追加されました。これにより、コンパイラの内部アーキテクチャを最適化し、新しいビルド ターゲットの追加を簡素化できます。アイデアは、特定のハードウェア機能の基本ターゲットをサポートし、その上に特定の最適化を備えたターゲットを簡単に構築できるようにすることです。 ARM アーキテクチャのサポートは、汎用ターゲットを使用するように切り替えられました。
  • コード ジェネレーターのループと関数の展開が調整され、「-O1」最適化モードで生成されるコードのサイズが縮小されました。組み込み関数 count_leading_zeros および count_trailing_zeros のコード生成が改善されました。また、関数から構造体を返すときや、int8/int16 型のデータを保存または読み込むときのコード生成も改善されました。
  • LLVM 組み込み関数のサポートが拡張され、「--enable-llvm-intrinsics」フラグを指定することで有効になります。
  • LLVM ツールチェーンがパッチを適用してバージョン 18.1.8 に更新されました。 ISPC で使用される LLVM バージョンを検出するためのマクロを追加しました。
  • 関数が呼び出されたときに警告を出力するために、関数に「__attribute__((deprecated))」属性を適用できるようになりました。
  • ビルド ターゲット avx512knl-x16 (KNL) を削除しました。
  • macOS および iOS のターゲット プラットフォームでサポートされる最小バージョンを指定するための "--darwin-version-min" オプションが追加されました。

出所: オープンネット.ru

コメントを追加します