インテル® FPGA SDK for OpenCL™プロ・エディション: プログラミング・ガイド

ID 683846
日付 4/01/2019
Public
ドキュメント目次

A.1.1. OpenCL1.0 Cプログラミング言語の実装

OpenCL™は一部制限をともなうかたちでC99に基づいています。OpenCL Specification version 1.0のSection 6は、OpenCL Cプログラミング言語について説明しています。 インテル® FPGA SDK for OpenCL™ は、明確化された内容と例外をともないOpenCL Cプログラミング言語に準拠しています。 次の表は、OpenCLプログラミング言語の実装における、機能に対するサポート状況の概要です。内容を明確化することなくサポートしているOpenCLプログラミング言語の実装に関しては記載していません。

サポート状況の表の見方

シンボル 説明
この機能はサポートされており、備考欄にてサポートされている内容を明確にしています。
この機能は備考欄で特定されている内容を除きサポートされています。
X この機能はサポートされていません。
セクション 機能 サポート状況 備考
6.1.1 組み込みスカラーデータ型
倍精度浮動小数点 倍精度浮動小数点の組み込みスカラーデータ型すべてに対する暫定サポートです。この機能は、OpenCL Specification version 1.0に準拠していない可能性があります。

現在、次の倍精度浮動小数点関数は、OpenCL Specification version 1.0に準拠すると考えられています。

add / subtract / multiply / divide / ceil / floor / rint / trunc / fabs / fmax / fmin / sqrt / rsqrt / exp / exp2 / exp10 / log / log2 / log10 / sin / cos / asin / acos / sinh / cosh / tanh / asinh / acosh / atanh / pow / pown / powr / tanh / atan / atan2 / ldexp / log1p / sincos

半精度浮動小数点 スカラーの加算、減算、乗算に対するサポートです。単精度浮動小数点との変換をサポートします。この機能は、OpenCL Specification version 1.0に準拠していない可能性があります。

この機能はエミュレーターでサポートされています。

6.1.2 組み込みベクトルデータ型

3要素のベクトルに対する暫定サポートです。3要素ベクトルのサポートは、OpenCL Specification version 1.0を補うものです。

6.1.3 その他の組み込みデータ型 SDKはイメージをサポートしていないため、イメージ型またはサンプラー型をサポートしていません。
6.2.1 暗黙的な変換 スカラー型とベクトル型の暗黙的な変換に関する重要な説明については、OpenCL Specification version 1.2のSection 6.2.6、Usual Arithmetic Conversionsを参照してください。
6.2.2 明示的なキャスト SDKでは、スカラーを異なる要素型のベクトルにキャストできます。
6.5 アドレス空間修飾子 関数スコープ__constant変数はサポートされていません。
6.6 イメージアクセス修飾子 X SDKはイメージをサポートしていません。
6.7 関数修飾子
6.7.2 オプションの属性修飾子 カーネルのパフォーマンス向上に向けたreqd_work_group_sizeの使用方法に関するヒントは、 インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドを参照ください。

SDKvec_type_hintwork_group_size_hint属性修飾子の解析は行いますが、それらを無視します。

6.9 プリプロセッサー・ディレクティブとマクロ
#pragmaディレクティブ (#pragma unroll) インテル® FPGA SDK for OpenCL™オフライン・コンパイラー#pragma unrollのみサポートしています。整数引数をアンロール・ディレクティブに割り当て、ループ展開の範囲を制御することができます。

例えば#pragma unroll 4は、ループの4つの反復を展開します。

展開係数のないアンロール・ディレクティブの場合、デフォルトでオフライン・コンパイラーはループを完全に展開しようと試みます。

カーネルのパフォーマンス向上に向けた#pragma unrollの使用方法に関するヒントは、 インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドを参照ください。

1に定義された__ENDIAN_LITTLE__ ターゲットFPGAはリトル・エンディアンです。
__IMAGE_SUPPORT__ X __IMAGE_SUPPORT__は未定義です。SDKはイメージをサポートしていません。
6.10 Attribute Qualifiers—オフライン・コンパイラーは以下ように属性修飾子を解析します。
6.10.3 変数の属性を指定する (endian) X  
6.10.4 ブロック属性と制御フロー・ステートメント属性の指定 X  
6.10.5 属性修飾子の拡張 オフライン・コンパイラーは、さまざまな構文構造の属性を解析することができます。また、内部使用のためにいくつかの属性名を予約しています。

これらのカーネル属性を使用し、カーネルのパフォーマンスを最適化する方法については、 インテル® FPGA SDK for OpenCL™ ベスト・プラクティス・ガイドを参照ください。

6.11.2 数学関数
組み込み数学関数 倍精度浮動小数点の組み込み数学関数に対する暫定サポートです。OpenCL Specification version 1.0に準拠していない可能性があります。
組み込み数学関数のhalf_native_ 倍精度浮動小数点の組み込み数学関数half_およびnative_に対する暫定サポートです。OpenCL Specification version 1.0に準拠していない可能性があります。
6.11.5 ジオメトリック関数 倍精度浮動小数点の組み込みジオメトリック関数に対する暫定サポートです。この関数はOpenCL Specification version 1.0に準拠していない可能性があります。

SDKでサポートされる組み込みのジオメトリック関数のリストについては、組み込みジオメトリック関数の引数型 を参照してください。

6.11.8 イメージ読み取りおよび書き込み機能 X SDKはイメージをサポートしていません。
6.11.9 Synchronization Functions— バリアー同期機能 内容の明確化と例外
  • カーネルがreqd_work_group_sizeまたはmax_work_group_size属性を指定している場合、バリアーは対応するワークアイテム数をサポートします。
  • どちらの属性も指定されていない場合、バリアーはデフォルトの制限である256ワークアイテムでインスタンス化されます。

ワークアイテムの制限は、カーネルにサポートされているワークグループの最大サイズであり、この制限はランタイムに強制されます。

6.11.11 グローバルメモリーからローカルメモリー、ローカルメモリーからグローバルメモリーの非同期コピーおよびプリフェッチ 実装は単純なものです。

ワークアイテム (0,0,0) はコピーを実行し、wait_group_eventsがバリアーとして実装されます。

  • カーネルがreqd_work_group_sizeまたはmax_work_group_size属性を指定している場合、wait_group_eventsは対応するワークアイテム数をサポートします。
  • どちらの属性も指定されていない場合、wait_group_eventsはデフォルトの制限である256ワークアイテムでインスタンス化されます。