This video reviews how instructions are executed on a traditional CPU data path, which will be contrasted with the mapping to a customized FPGA design. Ackno...
This video explains how to map OpenCL program onto a customized design in FPGA.Acknowledgement: the slides are from Intel's "OpenCL for FPGA" tutorial at ISC...
00:00:00 このセクションでは、講演者が OpenCL と、FPGA ベースのアプリケーションの設計におけるその重要性を紹介します。 FPGA のプログラマの数は標準の CPU よりも少ないですが、高水準プログラミング言語としての OpenCL を使用すると、FPGA エンジニアがソフトウェア エンジニアリング リソースを使用して FPGA 上の並列コンピューティング リソースを活用できるようになり、FPGA アプリケーション開発者の数が増加します。 OpenCL はヘテロジニアス コンピューティングの業界標準であり、プログラマは使い慣れた C または C++ API を使用して、マルチコア プロセッサ、GPU、FPGA などのハードウェア アクセラレータで複雑なワークロードを実行するプログラムを作成できます。 OpenCL の背後にある大きなアイデアは、並列処理を明示的に指定できる実行モデルです。
00:05:00 このセクションでは、FPGA およびデータ並列カーネル用の OpenCL のプログラミング モデルについて説明します。このビデオでは、ホストと、別のハードウェア ドメインで実行されるアクセラレータまたはデバイスを備えた OpenCL フレームワークの構造について説明します。ホストはデバイスとカーネルを準備し、これらのデバイスに送信するために必要なコマンドを作成します。アクセラレータ コードは OpenCLC で記述され、ホストは一連の OpenCL API 呼び出しを通じてアクセラレータ コードと通信し、ホスト プロセッサとデバイス上で実行されるカーネル間の通信を抽象化できます。 OpenCL カーネルは、複数の並列実行スレッドを定義するために使用されるデータ並列関数であり、各スレッドは「get global ID」で指定された識別子に依存します。これらの ID は、カーネルが処理するデータのセグメントまたはパーティションを指定し、独立したデータのペアに対して並列計算を実行できるようにします。
00:10:00 このセクションでは、スレッドとワーク グループの概念が導入されます。スレッドはデータ セットのさまざまな部分にアクセスでき、ワーク グループに分割されます。同じワークグループ内のスレッドのみがローカル メモリを共有できます。各スレッドにはローカル ID とグローバル ID があり、グローバル ID はグループ ID とローカル サイズを使用して計算できます。このシステムにより、効率的なデータの並列処理が可能になります。
このビデオでは、フィールド プログラマブル ゲート アレイ (FPGA) の基本概念を説明します。 CPU とは異なり、FPGA は特定のハードウェア リソースに合わせてプログラムできるため、高度にカスタマイズ可能です。このビデオでは、回路設計におけるレイテンシの重要性と、f max を最大化することでレイテンシのバランスをとる方法について説明しています。回路内のデータ パスと制御パスについて説明するとともに、計算を実行できる周波数を高めるためのパイプライン設計の概念を紹介します。最後に、ビデオでは FPGA の回路占有率と、バブルの減少と占有率の増加によって f max がどのように増加するかについて説明します。
00:05:00 このセクションでは、レイテンシーの概念と回路設計におけるその重要性について説明します。レイテンシは、回路が 1 つ以上の操作を完了するのにかかる時間であり、時間またはクロック サイクルで測定できます。通常、レイテンシを下げることが目標ですが、f max を最大化することとのバランスを慎重にとる必要があります。レイテンシーに関して最適化された設計と、パイプラインの使用を通じて f max に関して最適化された設計の例が示されています。長いクリティカル パスを分割し、速度を向上させるためのパイプライン レジスタの重要性が強調されています。
36. CPU データパスで命令を実行する
36. CPU データパスで命令を実行する
このビデオでは、累算演算を実行する例を使用して、CPU データパスで計算がどのように実行されるかを説明します。データパスには、アドレスを使用してデータをメモリにロードおよび保存するロードおよびストア ユニットと、演算を実行する ALU などの機能ユニットが含まれます。このビデオでは、メモリからのデータのロード、操作の実行、結果のメモリへの保存など、プロセスを段階的に説明しています。講演者はまた、同じ機能を実装するために FPGA を利用し、ハードウェアで利用可能なリソースを最大限に活用する方法についても説明します。
37. FPGA 上のカスタマイズされたデータパス
37. FPGA 上のカスタマイズされたデータパス
このビデオでは、FPGA を使用してカーネル機能を実装し、CPU ハードウェアを展開し、FPGA 上のデータパスをカスタマイズすることでパフォーマンスを向上させる方法について説明しています。使用されていないユニットを削除し、定数とワイヤをロードし、一部の操作を再スケジュールすることにより、ロード操作を同時に実行してパフォーマンスを向上させることができます。カスタマイズされたデータパスの設計では、特定の機能に必要な操作とデータを選択することで、スループットを向上させ、待ち時間と消費電力を削減できます。このビデオでは、2 つのベクトルのデマンドワイズ加算の例を示しています。ステージ間のレジスタを使用して結果がメモリに戻され、効率的なパイプラインと連続加算用の 8 つのワークアイテムの起動が可能になります。
38. FPGA およびデータ パラレル カーネル用の OpenCL
38. FPGA およびデータ パラレル カーネル用の OpenCL
このビデオでは、OpenCL により、FPGA エンジニアがソフトウェア エンジニアリング リソースを使用して、FPGA 上の並列コンピューティング リソースを活用して FPGA アプリケーション開発者の数を拡大できる方法について説明しています。 OpenCL のプログラミング モデルでは、カーネルと呼ばれるデータ並列関数を使用して並列処理を指定できます。各カーネルは、「グローバル ID の取得」で指定された識別子に依存して、独立したデータ セグメントに対して並列計算を実行します。スレッドとワーク グループの概念が導入され、スレッドはデータ セットのさまざまな部分にアクセスし、ワーク グループに分割され、同じワーク グループ内のスレッドのみがローカル メモリを共有できます。このプログラミング モデルにより、OpenCL は効率的なデータの並列処理を可能にします。
39. OpenCL ホスト側プログラミング: コンテキスト、キュー、メモリ オブジェクトなど。
39. OpenCL ホスト側プログラミング: コンテキスト、キュー、メモリ オブジェクトなど。
このビデオ チュートリアルでは、コンテキスト、キュー、メモリ オブジェクトに焦点を当てて、OpenCL のさまざまなホスト側プログラミングの概念を説明します。 OpenCL の 2 つの新しい API、clCreateKernelsInProgram と clSetKernelArg について説明します。これらは、カーネル オブジェクトを作成し、カーネル関数に引数を渡すために使用されます。このチュートリアルでは、clCreateImage API を使用して画像オブジェクトを作成すること、およびチャネル順序とチャネル タイプを使用して画像ピクセルをメモリに保存する方法についても説明します。ここでは、OpenCL が 2D および 3D 画像を処理する方法、開発者が clGetMemoryObjectInfo などの API を使用してメモリ オブジェクトに関する情報を収集する方法、および読み取りおよび書き込みバッファのREC、メモリ オブジェクトのマッピング、メモリ オブジェクト間のデータのコピーなどのメモリ オブジェクト操作を実行する方法について説明します。
40. FPGA の HDL デザイン フロー
40. FPGA の HDL デザイン フロー
このビデオでは、Quartus デザイン ソフトウェアを使用してフィールド プログラマブル ゲート アレイ (FPGA) を開発するプロセスを説明します。
FPGA開発のための設計手法とソフトウェアツールについて説明します。一般的なプログラマブル ロジックのデザイン フローは、デザイン仕様から始まり、RTL コーディング、RTL 機能シミュレーションに進み、その後、デザインをデバイス固有のプリミティブに変換するための合成が続きます。次に、エンジニアはこれらのプリミティブを特定の FPGA 内の特定の場所にマッピングし、タイミング解析を通じてパフォーマンス仕様を検証します。最後に、デザインは FPGA カードにロードされ、デバッグ ツールを使用してハードウェア上でテストできます。インテル FPGA の場合、Quartus デザイン ソフトウェアを使用してデザイン フローを実行します。システム記述から始まり、論理合成、配置配線、タイミングと電力解析、実際の FPGA へのデザインのプログラミングに進みます。
41. OpenCL データ型とデバイスメモリ
41. OpenCL データ型とデバイスメモリ
このビデオでは、OpenCL データ型とデバイス メモリについて説明します。ブール型、整数型、浮動小数点型について説明し、int-ptr、uint-ptr、ptrdiff-t などのメモリ アドレスの操作に使用される特定のデータ型について説明します。また、演算子をすべての要素に同時に適用できるようにする、同じ型の複数の要素を含む配列であるベクトル データ型とその使用方法についても説明します。このビデオでは、文字と数値インデックス、高低、偶数-奇数の使用など、ベクター内の要素を初期化してアクセスする方法のさまざまな例を示しています。また、メモリ アライメントと、セット カーネル引数およびプライベート カーネル引数の使用方法についても説明します。
42. OpenCL ベクトル関係演算
42. OpenCL ベクトル関係演算
このビデオでは、OpenCL カーネル プログラミングとその演算子、組み込み関数について説明します。関係演算子と、関係演算子がスカラー値とベクトル値をどのように扱うかに焦点を当てています。カーネル関数の例「op test」は、定数とプライベート ベクトルの間で要素ごとの AND 演算を実行します。このビデオでは、論理演算を使用して特定のベクトル要素をスカラーと比較することにより、OpenCL でリレーショナル演算を使用してベクトルを実装する方法を説明します。結果のベクトルを while ループで使用して、出力メモリ オブジェクトに割り当てられる最終出力ベクトルを作成できます。
43. OpenCL 組み込み関数: vloadn、select
43. OpenCL 組み込み関数: vloadn、select
このビデオでは、vloadn と select という 2 つの主要な OpenCL 組み込み関数について説明します。 Vloadn を使用すると、スカラー配列の値を使用してバッチを初期化でき、オフセットとスカラー配列へのポインターの 2 つの引数を受け取ります。一方、選択では、2 つのバッチから特定の要素を選択し、それらを使用して新しいベクトルを作成できます。符号付きまたは符号なしの整数値を含めることができ、マスク要素の最上位ビットのみが重要です。このチュートリアルでは、これらの関数が実際にどのように機能するかを示します。
44. DPC++ の概要
44. DPC++ の概要
このビデオでは、複雑なコンピューティングを FPGA や GPU などのアクセラレータにオフロードするデータ並列プログラミング用の高級言語であり、OneAPI フレームワークの一部である DPC++ を紹介します。 DPC++ は、最新の C++ とアーキテクチャ指向のパフォーマンス最適化を使用して、データ並列ワークロードを高速化することを目的としています。講師は、データ管理変数を宣言し、コマンドとアクセサーを使用してデバイス上でカーネル関数を実行する方法を示す簡単な DPC++ の例を提供します。このビデオでは、ラムダ関数が外部で宣言された変数から引数と参照を取得する方法についても説明しています。
EECE.6540 ヘテロジニアス コンピューティング (マサチューセッツ大学ローウェル校) - 46. FPGA の基本概念
46. FPGAの基本概念
このビデオでは、フィールド プログラマブル ゲート アレイ (FPGA) の基本概念を説明します。 CPU とは異なり、FPGA は特定のハードウェア リソースに合わせてプログラムできるため、高度にカスタマイズ可能です。このビデオでは、回路設計におけるレイテンシの重要性と、f max を最大化することでレイテンシのバランスをとる方法について説明しています。回路内のデータ パスと制御パスについて説明するとともに、計算を実行できる周波数を高めるためのパイプライン設計の概念を紹介します。最後に、ビデオでは FPGA の回路占有率と、バブルの減少と占有率の増加によって f max がどのように増加するかについて説明します。