取引におけるOpenCL - ページ 8

 

36. CPU データパスで命令を実行する



36. CPU データパスで命令を実行する

このビデオでは、累算演算を実行する例を使用して、CPU データパスで計算がどのように実行されるかを説明します。データパスには、アドレスを使用してデータをメモリにロードおよび保存するロードおよびストア ユニットと、演算を実行する ALU などの機能ユニットが含まれます。このビデオでは、メモリからのデータのロード、操作の実行、結果のメモリへの保存など、プロセスを段階的に説明しています。講演者はまた、同じ機能を実装するために FPGA を利用し、ハードウェアで利用可能なリソースを最大限に活用する方法についても説明します。

  • 00:00:00 このセクションでは、累積演算の実行例を使用して、計算が PGA にどのようにマッピングされるかをビデオで説明します。まず、CPU 命令を使用して高級コードがアセンブリ言語に変換され、中間値がレジスタに格納されます。 CPU は、アドレスを使用してメモリにデータをロードおよび保存するロードおよびストア ユニットなどの機能ユニットをデータパスに備えたパイプライン CPU です。データ パスは、固定データ幅と演算数内であらゆる種類の命令を実行できるように汎用的に設計されており、ALU を介して定数値をレジスタにロードできます。このビデオでは、CPU で 6 つの命令がどのように実行されるかという例も提供されており、プロセスが段階的に示されています。

  • 00:05:00 このセクションでは、講演者がいくつかの命令を取り上げ、メモリからレジスタ ファイルへのデータのロード、データパス内のさまざまな機能ユニットを使用した乗算や加算などの演算の実行など、それらの命令が CPU データパスでどのように実行されるかを説明します。 、結果をメモリに保存し直します。講演者は続けて、CPU ハードウェアを展開し、機能に必要な正確なリソースを使用して、FPGA ハードウェアで利用可能なリソースを最大限に活用することで、FPGA を使用して同じカーネル機能を実装する方法を説明しました。
Execute Instructions on CPU Datapath
Execute Instructions on CPU Datapath
  • 2020.07.04
  • www.youtube.com
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...
 

37. FPGA 上のカスタマイズされたデータパス


37. FPGA 上のカスタマイズされたデータパス

このビデオでは、FPGA を使用してカーネル機能を実装し、CPU ハードウェアを展開し、FPGA 上のデータパスをカスタマイズすることでパフォーマンスを向上させる方法について説明しています。使用されていないユニットを削除し、定数とワイヤをロードし、一部の操作を再スケジュールすることにより、ロード操作を同時に実行してパフォーマンスを向上させることができます。カスタマイズされたデータパスの設計では、特定の機能に必要な操作とデータを選択することで、スループットを向上させ、待ち時間と消費電力を削減できます。このビデオでは、2 つのベクトルのデマンドワイズ加算の例を示しています。ステージ間のレジスタを使用して結果がメモリに戻され、効率的なパイプラインと連続加算用の 8 つのワークアイテムの起動が可能になります。

  • 00:00:00 このセクションでは、FPGA を使用してパフォーマンスとリソース使用率を向上させたカーネル機能を実装する概念について説明します。このアイデアは、CPU ハードウェアを展開し、FPGA リソースを使用して、実行の各ステップで使用されないリソースを使用しながら、必要な機能を実装するデザインを作成することです。特定の未使用のユニット、ロード定数、およびワイヤを削除し、一部の操作を再スケジュールすることにより、ロード操作を同時に実行でき、パフォーマンスが向上します。 FPGA 上のデータ パスをカスタマイズすると、専用の専用リソースを使用して同じ結果を達成できます。

  • 00:05:00 このセクションでは、講演者は、スループットを向上させ、レイテンシと電力を削減できる方法で、特定の機能、メモリ サイズ、構成に必要な演算とデータを選択することにより、FPGA 上でカスタマイズされたデータパスの設計について説明します。 2 つのベクトルに対して要求に応じた加算を実行し、結果をメモリに戻すカーネル関数を使用して消費します。ステージ間のレジスタを利用することで、データパスは効率的なパイプラインを使用し、8 つのワークアイテムを連続して追加することにより起動し、アイドル状態のユニットを回避するために各サイクルが異なるスレッドを処理できるようにします。
Customized Datapath on FPGA
Customized Datapath on FPGA
  • 2020.07.04
  • www.youtube.com
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...
 

38. FPGA およびデータ パラレル カーネル用の OpenCL



38. FPGA およびデータ パラレル カーネル用の OpenCL

このビデオでは、OpenCL により、FPGA エンジニアがソフトウェア エンジニアリング リソースを使用して、FPGA 上の並列コンピューティング リソースを活用して FPGA アプリケーション開発者の数を拡大できる方法について説明しています。 OpenCL のプログラミング モデルでは、カーネルと呼ばれるデータ並列関数を使用して並列処理を指定できます。各カーネルは、「グローバル ID の取得」で指定された識別子に依存して、独立したデータ セグメントに対して並列計算を実行します。スレッドとワーク グループの概念が導入され、スレッドはデータ セットのさまざまな部分にアクセスし、ワーク グループに分割され、同じワーク グループ内のスレッドのみがローカル メモリを共有できます。このプログラミング モデルにより、OpenCL は効率的なデータの並列処理を可能にします。

  • 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 とローカル サイズを使用して計算できます。このシステムにより、効率的なデータの並列処理が可能になります。
OpenCL for FPGA and Data Parallel Kernel
OpenCL for FPGA and Data Parallel Kernel
  • 2020.04.19
  • www.youtube.com
A recap of OpenCL for FPGA, how kernels identify data partition
 

39. OpenCL ホスト側プログラミング: コンテキスト、キュー、メモリ オブジェクトなど。



39. OpenCL ホスト側プログラミング: コンテキスト、キュー、メモリ オブジェクトなど。

このビデオ チュートリアルでは、コンテキスト、キュー、メモリ オブジェクトに焦点を当てて、OpenCL のさまざまなホスト側プログラミングの概念を説明します。 OpenCL の 2 つの新しい API、clCreateKernelsInProgram と clSetKernelArg について説明します。これらは、カーネル オブジェクトを作成し、カーネル関数に引数を渡すために使用されます。このチュートリアルでは、clCreateImage API を使用して画像オブジェクトを作成すること、およびチャネル順序とチャネル タイプを使用して画像ピクセルをメモリに保存する方法についても説明します。ここでは、OpenCL が 2D および 3D 画像を処理する方法、開発者が clGetMemoryObjectInfo などの API を使用してメモリ オブジェクトに関する情報を収集する方法、および読み取りおよび書き込みバッファのREC、メモリ オブジェクトのマッピング、メモリ オブジェクト間のデータのコピーなどのメモリ オブジェクト操作を実行する方法について説明します。

  • 00:00:00 このセクションでは、OpenCL のホスト側プログラミング概念を再検討します。このセクションでは、コンテキスト、キュー、メモリ オブジェクトに焦点を当てます。物理プラットフォームが異なるベンダーのデバイスで構成されている場合でも、複数のコンテキストを物理プラットフォーム上に構築できます。グローバル メモリ内のメモリ オブジェクトは複数のキューで共有できますが、ホスト側のアプリケーションで適切な同期を実行する必要があります。 1 つのコンテキスト内に複数のコンテキストと複数のコマンド キューを含めることができます。ベンダーが提供するさまざまな OpenCL プラットフォームは必ずしも互換性があるわけではないため、同じコンテキストに置くことはできません。

  • 00:05:00 このセクションでは、ビデオで OpenCL の 2 つの新しい API について説明します。最初の API では、clCreateKernelsInProgram 関数を使用して、OpenCL プログラム内のすべての関数のカーネルを作成できます。これにより、clGetKernelInfo 関数を使用してカーネル関数名およびその他の関連情報を検証するために使用できるカーネル オブジェクトの配列が作成されます。 2 番目の API clSetKernelArg は、カーネル引数をインスタンス化するために使用され、カーネル オブジェクトと引数のインデックスを引数として受け取ります。ビデオでは、これらの API の使用方法と、使用後にカーネル オブジェクトを解放する方法について説明します。

  • 00:10:00 このセクションでは、API が引数値をカーネル関数に渡す方法について学びます。プリミティブ データ型をカーネル関数へのポインタとして渡すことも、メモリ オブジェクトや複雑なデータを含むサンプル オブジェクトへのポインタを渡すこともできます。画像オブジェクトは、ピクセル データを保持するために使用される特別なタイプのメモリ オブジェクトです。バッファ オブジェクトと同じ構成フラグを使用し、画像形式のリストから定義された形式で画像オブジェクトを作成できます。 clCreateImage API はイメージ オブジェクトの作成に使用され、そのパラメーターはバッファ オブジェクトの作成に使用されるものと似ています。 3 番目の引数は、割り当てられる画像データの形式プロパティを指定し、4 番目の引数は画像のタイプとサイズを記述します。

  • 00:15:00 このセクションでは、イメージ ピクセルがメモリにどのように格納されるかを識別するための clCreateImage() API の使用法を紹介します。画像オブジェクト形式は、画像をメモリに保存するように設計されており、チャネル順序とチャネル タイプの 2 つの要素で構成されます。チャネル順序は、各ピクセルのチャネル情報がどのように格納されるかを識別し、基本色とアルファ情報を含む列挙型です。対照的に、チャネル タイプは、画像チャネルをバイナリでエンコードする方法を指定し、さまざまな値を使用して色情報の表現を決定します。ビット レベルは、チャネル内のカラー値を表すために使用するビット数を指定するのに不可欠です。さらに、各ピクセルの RGBA シーケンスがメモリに保存され、1 バイトを使用して各カラー チャネルの色情報をエンコードする、画像フォーマットのメモリ レイアウトが示されています。

  • 00:20:00 このセクションでは、OpenCL が 2D および 3D 画像を処理する方法について説明します。これらの画像は、別の次元で積み重ねられた複数のスライスで構成される場合があります。 CL 画像記述子は、画像オブジェクトがどのようにレイアウトされるかを記述するために使用され、画像の幅、高さ、深さ (ピクセル単位) や走査線ピッチ (バイト単位) などのパラメータが含まれます。さらに、 clCreateImage() API は、画像を記述するために必要なバイト数を識別するために使用されます。これには、行とスライス内のパディングと位置合わせの調整が必要になる場合があります。

  • 00:25:00 このセクションでは、講演者が、clGetImageInfo や clGetMemoryObjectInfo などの API を使用して、OpenCL でイメージおよびメモリ オブジェクトに関する情報を収集する方法を説明します。これらの API を使用すると、開発者は、メモリ オブジェクトの画像形式、ピクセル サイズ、ピクセル幅、ピクセル高さ、深さ、その他のプロパティなどの情報を取得できます。さらに、EnqueueReadBuffer/EnqueueWriteBuffer を使用してバッファ オブジェクトにデータを読み書きしたり、EnqueueReadImage/EnqueueWriteImage を使用してイメージ オブジェクト データにアクセスしたりできます。原点、領域、行ピッチ、およびスライス ピッチの使用も、行、スライス、およびピクチャの観点から編成されるイメージ オブジェクトに固有です。開発者はこれらの API を使用して、アクセスまたはコピー操作を実行する領域の正確な場所を指定したり、CL イベント引数を使用してイベントを生成したりできます。

  • 00:30:00 このセクションでは、ビデオで OpenCL の 2 つのメモリ オブジェクト操作、読み取りおよび書き込みバッファの記録、およびメモリ オブジェクトのマッピングについて説明します。読み取りおよび書き込みバッファーREC を使用すると、ユーザーは原点とサイズ情報を指定して、特定のポイントでデータを取得または書き込むことができます。メモリ オブジェクトをマッピングすると、デバイス上のメモリ オブジェクトをホスト上のメモリ領域にマッピングできます。マッピングが完了すると、メモリ マッピング API を通じて取得したポインタを使用して、ホスト側でメモリ オブジェクトを読み取り、変更できます。このビデオでは、メモリー オブジェクト間でデータをコピーするために OpenCL で使用できるメモリー オブジェクト操作のリストも説明し、ホスト側のプログラミングを簡素化し、読み取りおよび書き込み操作のパフォーマンスを向上させます。

  • 00:35:00 このセクションでは、講演者が OpenCL のさまざまなメモリ オブジェクトと、それらを使用してある場所から別の場所にデータをコピーする方法について説明します。コピー機能には、コピー バッファ、コピー イメージ、コピー バッファ長方形などが含まれます。講演者はホストデバイスシステムを示し、CL in queue コピーバッファ機能を使用してあるバッファから別のバッファにデータをコピーする方法を実演します。 cl enqueu マップ バッファーを使用してバッファーをメモリー空間にマップし、次にメモリー・コピーを使用してマップされた領域をそれ自体にコピーする方法について説明します。
OpenCL Host Side Programming: Context, queues, memory objects, etc.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
  • 2020.03.27
  • www.youtube.com
OpenCL Host Side Programming: Context, queues, memory objects, etc.
 

40. FPGA の HDL デザイン フロー



40. FPGA の HDL デザイン フロー

このビデオでは、Quartus デザイン ソフトウェアを使用してフィールド プログラマブル ゲート アレイ (FPGA) を開発するプロセスを説明します。

FPGA開発のための設計手法とソフトウェアツールについて説明します。一般的なプログラマブル ロジックのデザイン フローは、デザイン仕様から始まり、RTL コーディング、RTL 機能シミュレーションに進み、その後、デザインをデバイス固有のプリミティブに変換するための合成が続きます。次に、エンジニアはこれらのプリミティブを特定の FPGA 内の特定の場所にマッピングし、タイミング解析を通じてパフォーマンス仕様を検証します。最後に、デザインは FPGA カードにロードされ、デバッグ ツールを使用してハードウェア上でテストできます。インテル FPGA の場合、Quartus デザイン ソフトウェアを使用してデザイン フローを実行します。システム記述から始まり、論理合成、配置配線、タイミングと電力解析、実際の FPGA へのデザインのプログラミングに進みます。

HDL Design Flow for FPGA
HDL Design Flow for FPGA
  • 2020.04.18
  • www.youtube.com
(Intel) FPGA Design Flow using HDL
 

41. OpenCL データ型とデバイスメモリ



41. OpenCL データ型とデバイスメモリ

このビデオでは、OpenCL データ型とデバイス メモリについて説明します。ブール型、整数型、浮動小数点型について説明し、int-ptr、uint-ptr、ptrdiff-t などのメモリ アドレスの操作に使用される特定のデータ型について説明します。また、演算子をすべての要素に同時に適用できるようにする、同じ型の複数の要素を含む配列であるベクトル データ型とその使用方法についても説明します。このビデオでは、文字と数値インデックス、高低、偶数-奇数の使用など、ベクター内の要素を初期化してアクセスする方法のさまざまな例を示しています。また、メモリ アライメントと、セット カーネル引数およびプライベート カーネル引数の使用方法についても説明します。

  • 00:00:00 このセクションでは、OpenCL カーネル プログラミングで使用できるデータ型 (ブール型、整数型、浮動小数点型など) の概要をビデオで説明します。 int-ptr、uint-ptr、ptrdiff-t などの特定のデータ型は、メモリ アドレスの操作に使用されます。このビデオでは、対象のデバイスが CL Cronus 14-point-64 CLCronus FP 64 拡張機能をサポートしている場合にのみ double タイプがサポートされると説明しています。開発者は、OpenCL カーネル プログラムで double 型を使用する前に、この拡張機能を確認できます。このビデオでは、double 型拡張機能を有効にしてカーネル プログラムで使用する方法も説明しています。

  • 00:05:00 ビデオのこのセクションでは、OpenCL データ型とデバイス メモリについて説明します。 OpenCL 標準では、データ型のエンディアン順序は義務付けられていません。リトル エンディアンとビッグ エンディアンは、乗算された変数をメモリに格納する方法をコンピューター アーキテクチャが定義する方法に依存する 2 つのオプションのエンディアン タイプです。デバイスのエンディアン順序は、CR get device info ベクトル データ タイプを使用して確認できます。さらに、ベクトル データ型は、同じ型の複数の要素を含む配列として導入され、固定長であり、演算子がすべての要素に同時に適用できるようになります。ベクトル データ型を使用する利点は、配列を使用するよりも高速かつ簡単であることです。このビデオでは、ベクトル データ型を使用して複数の配列に対して要素ごとの加算を実行する方法を説明します。

  • 00:10:00 このセクションでは、OpenCL で使用できる、スカラー型によく似たさまざまなベクトル型について学びます。ただし、ベクトルの大きさとそれに含まれる要素の種類を示すために、ベクトルの末尾に数値が必要です。 OpenCL には、ダブル データ型とハーフ データ型という 2 つの特殊なデータ型もあり、デバイスによってサポートされる場合とサポートされない場合があります。さまざまなタイプの優先ベクトル サイズを知るために、OpenCL はデバイスの優先ベクトル幅をクエリするために使用できる API を提供します。これに基づいて、推奨サイズ 128 の浮動小数点ベクトルを定義したり、推奨ベクトル サイズが 256 の場合は浮動小数点 8 を定義したりするなど、プログラムを構築するためのオプションを設定できます。 ベクトルは、次の値に初期値を割り当てることで初期化できます。括弧。たとえば、サイズ 2 の 2 つのベクトル A と B があり、どちらもスカラー値で初期化されている場合、より小さなベクトルを使用してベクトルを初期化することもできます。

  • 00:15:00 このセクションでは、講演者が OpenCL ベクトル内の要素またはコンポーネントを初期化してアクセスする方法を説明します。ユーザーは、より小さいベクトル、スカラーとより小さい係数の組み合わせを使用するか、値をベクトル要素に直接割り当てることによって、ベクトルを初期化できます。数値インデックス、文字インデックス、および高-低偶数-奇数を使用してベクター内の要素にアクセスする方法を示す例が提供されています。さまざまな例で、ベクトルから要素のサブセットを取得し、これらの要素を他の変数に割り当てる方法を示します。

  • 00:20:00 このセクションでは、講演者は、ベクトルのさまざまな次元を表す数値インデックス、文字 (X、Y、Z、W など)、および組み合わせの使用を含む、ベクトル要素のインデックス付けおよび変更のためのさまざまな方法について説明します。文字と数値インデックスの組み合わせ。また、高-低および偶数-奇数を使用して、ベクトル内の位置に基づいてベクトル コンポーネントのサブセットを選択する方法についても説明します。これらのインデックス付けおよび変更方法は、さまざまな長さと次元のベクトルを扱う場合に役立ちます。

  • 00:25:00 このセクションでは、ベクトル内の要素の上位半分または下位半分を取得できる高低偶数インデックスなど、ベクトル内の要素にアクセスして変更するためのさまざまな方法について学びます。 -インデックス付きの要素。また、整数の最下位バイトが最上位バイトよりも低いアドレスに格納されるリトル エンディアン デバイスにベクトルがどのように格納されるかについても調査します。これは、符号なし整数のベクトルでは、各 32 ビット整数値の 4 バイトが最下位バイトから最上位バイトの順に格納され、ベクトルの完全な各要素が 16 バイトを占めることを意味します。

  • 00:30:00 このセクションでは、講演者が OpenCL データ型とデバイス メモリがリトル エンディアン デバイスとビッグ エンディアン デバイスにどのように格納されるかについて説明します。これらは、符号なし整数型の 4 要素ベクトルが両方のタイプのデバイスのメモリにどのように格納されるかを示しており、リトル エンディアンとビッグ エンディアンのデバイスが最下位と最上位を格納する方法によりバイトの順序が異なることに注意してください。バイト。講演者は、ポインタを使用してこのメモリから個々のバイトを取得する「ベクトル バイト」と呼ばれるカーネル関数も実演します。

  • 00:35:00 このセクションでは、OpenCL データ型のメモリ アライメントの概念について説明します。メモリは通常、常に 4 の倍数のメモリ アドレスに格納される整数や浮動小数点などの 32 ビット構造に基づいて調整されると説明されています。また、long や double などの 64 ビット構造は 8 の倍数のアドレスに格納され、データ サイズ以上の最小の 2 のべき乗がデータ構造のメモリ アライメントを設定することにも注意してください。さらに、OpenCL でローカルおよびプライベート カーネル引数を初期化するプロセスについて説明し、ローカルおよびプライベート空間のカーネル引数は SetKernelArg を使用して設定できるが、指定子がローカルの場合は最後のパラメータ値を設定できないことについて説明します。さらに、プライベート カーネル引数は整数や浮動小数点などの単純なプリミティブでなければならないことに注意してください。

  • 00:40:00 このセクションでは、OpenCL プログラムで set kernel 引数と private kernel 引数を使用する方法についてビデオで説明します。 set kernel argument を使用する場合、最初の引数は引数の整数サイズのインデックスであり、その後に変数へのポインタが続く必要があります。プライベート カーネル引数は、float 4 の配列などのベクトルにすることもできます。これはカーネル関数内でのみ使用でき、set kernel argument を使用して渡されます。
OpenCL data types and device memory
OpenCL data types and device memory
  • 2020.03.31
  • www.youtube.com
Data types specific to OpenCL kernel functions and their layout in device memory.
 

42. OpenCL ベクトル関係演算



42. OpenCL ベクトル関係演算

このビデオでは、OpenCL カーネル プログラミングとその演算子、組み込み関数について説明します。関係演算子と、関係演算子がスカラー値とベクトル値をどのように扱うかに焦点を当てています。カーネル関数の例「op test」は、定数とプライベート ベクトルの間で要素ごとの AND 演算を実行します。このビデオでは、論理演算を使用して特定のベクトル要素をスカラーと比較することにより、OpenCL でリレーショナル演算を使用してベクトルを実装する方法を説明します。結果のベクトルを while ループで使用して、出力メモリ オブジェクトに割り当てられる最終出力ベクトルを作成できます。

  • 00:00:00 このセクションでは、ビデオで OpenCL カーネル プログラミングを紹介し、この言語が他の高級言語から継承した演算子と組み込み関数について説明します。表示される演算子には、算術演算、比較と論理、ビット単位、および 3 項選択が含まれます。特に、このセクションでは関係演算子に焦点を当て、それがスカラー値とベクトル値の両方でどのように機能するかを説明します。このセグメントでは、「op test」と呼ばれるカーネル関数の例も提供します。これは、関係演算子を使用して、定数ベクトルと初期値で初期化されたプライベート ベクトルの間で要素ごとの AND 演算を実行します。

  • 00:05:00 このセクションでは、関係演算を伴うベクトルを OpenCL で実装する方法を講演者が説明します。講演者は、論理演算を使用してベクトルの特定の要素をスカラー値と比較する例を使用して、true 値と false 値をそれぞれ -1 と 0 で表す結果のベクトルを作成する方法を示します。結果のベクトルは while ループで使用でき、個々の要素がさらに論理演算を受けて、出力メモリ オブジェクトに割り当てられる最終出力ベクトルを作成します。
OpenCL vector relational operations
OpenCL vector relational operations
  • 2020.04.03
  • www.youtube.com
vector relational operations
 

43. OpenCL 組み込み関数: vloadn、select



43. OpenCL 組み込み関数: vloadn、select

このビデオでは、vloadn と select という 2 つの主要な OpenCL 組み込み関数について説明します。 Vloadn を使用すると、スカラー配列の値を使用してバッチを初期化でき、オフセットとスカラー配列へのポインターの 2 つの引数を受け取ります。一方、選択では、2 つのバッチから特定の要素を選択し、それらを使用して新しいベクトルを作成できます。符号付きまたは符号なしの整数値を含めることができ、マスク要素の最上位ビットのみが重要です。このチュートリアルでは、これらの関数が実際にどのように機能するかを示します。

  • 00:00:00 このセクションでは、スカラー配列の値を使用してバッチを初期化するために使用される組み込み関数である Vloadn について学びます。 Vloadn は、オフセットとスカラー配列へのポインターの 2 つの引数を取ります。 Offset は、ベクトルのサイズで指定され、配列のどの要素がバッチに配置されるかを決定します。さらに、2 つのバッチから特定の要素を選択し、それらを使用して新しいベクトルを構築するために使用できる Select 関数についても学習します。符号付きまたは符号なしの整数値を含めることができ、マスク要素の最上位ビットのみが重要です。 Select のマスク コンポーネントの最上位ビットによって、出力ベクトルの対応する要素にどのバッチを使用するかが決まります。

  • 00:05:00 このセクションでは、チュートリアルで 2 つの OpenCL 組み込み関数、vloadn と select について説明します。 Vloadn は、指定されたベクトルから要素を新しいベクトルにロードするために使用され、select は、マスクに基づいて最初または 2 番目の入力から要素を選択するために使用されます。このチュートリアルでは、vloadn がマスクに基づいて最初の入力ベクトルから値を選択する方法や、select が最初または 2 番目の入力ベクトルからビットを選択する方法など、これらの関数が実際にどのように動作するかの例を示します。
OpenCL built-in functions: vloadn , select
OpenCL built-in functions: vloadn , select
  • 2020.04.05
  • www.youtube.com
OpenCL built-in functions: vloadn , select
 

44. DPC++ の概要



44. DPC++ の概要

このビデオでは、複雑なコンピューティングを FPGA や GPU などのアクセラレータにオフロードするデータ並列プログラミング用の高級言語であり、OneAPI フレームワークの一部である DPC++ を紹介します。 DPC++ は、最新の C++ とアーキテクチャ指向のパフォーマンス最適化を使用して、データ並列ワークロードを高速化することを目的としています。講師は、データ管理変数を宣言し、コマンドとアクセサーを使用してデバイス上でカーネル関数を実行する方法を示す簡単な DPC++ の例を提供します。このビデオでは、ラムダ関数が外部で宣言された変数から引数と参照を取得する方法についても説明しています。

  • 00:00:00 このセクションでは、講師が DPC++ プログラミングを紹介します。DPC++ プログラミングは、複雑なコンピューティングを FPGA や GPU などのアクセラレータにオフロードするデータ並列プログラミング用の高級言語です。 DPC++ は最新の C++ を使用し、アルゴリズムを分析し、タスクまたはデータを分解し、アーキテクチャ指向のパフォーマンス最適化を使用することで、データ並列ワークロードを高速化することを目的としています。 DPC++ は OneAPI フレームワークの一部であり、その目標は、任意の CPU、FPGA、または GPU で実行できる単一言語によるプログラミングを可能にすることです。次に講師は、データ管理のための変数、バッファー、およびデバイス キューを宣言する簡単な DPC++ の例を提供します。

  • 00:05:00 このセクションでは、スピーカーは、デバイス上で実行されるカーネル関数を定義するコマンドとラムダ関数を作成する DPC++ プログラムの例を紹介します。プログラムは、アクセサーを使用してバッファーをコマンドに関連付け、別のアクセサーを使用して結果にアクセスします。最後に、プログラムには、結果アクセサーを使用してバッファー内のコンテンツにアクセスし、それを出力する for ループが含まれています。ラムダ関数では、関数の外で宣言された変数への参照を渡すなど、さまざまな方法で関数に引数を取り込むことができます。
Intro to DPC++
Intro to DPC++
  • 2021.04.07
  • www.youtube.com
This videos give a brief introduction to DPC++ and go through a simple DPC++ example source code.
 

EECE.6540 ヘテロジニアス コンピューティング (マサチューセッツ大学ローウェル校) - 46. FPGA の基本概念



46. FPGAの基本概念

このビデオでは、フィールド プログラマブル ゲート アレイ (FPGA) の基本概念を説明します。 CPU とは異なり、FPGA は特定のハードウェア リソースに合わせてプログラムできるため、高度にカスタマイズ可能です。このビデオでは、回路設計におけるレイテンシの重要性と、f max を最大化することでレイテンシのバランスをとる方法について説明しています。回路内のデータ パスと制御パスについて説明するとともに、計算を実行できる周波数を高めるためのパイプライン設計の概念を紹介します。最後に、ビデオでは FPGA の回路占有率と、バブルの減少と占有率の増加によって f max がどのように増加するかについて説明します。

  • 00:00:00 このセクションでは、フィールド プログラマブル ゲート アレイ (FPGA) の基本概念と、他のプロセッサ アーキテクチャとの違いについて学びます。 CPU とは異なり、FPGA には固定のデータパスがなく、特定のハードウェア リソースに合わせてプログラムして、さまざまな数のレジスタ、計算ロジック、およびそれらの接続に対応できるため、高度にカスタマイズできます。 FPGA には、アダプティブ ロジック、RAM ブロック、DSP ブロック、プログラマブル ルーティング スイッチなどのさまざまなコンポーネントが含まれており、これらを接続してさまざまな設計を実装できます。さらに、FPGA の最大動作周波数は組み合わせロジックの物理的な伝播遅延によって決まり、回路のレイテンシと動作速度に影響を与えます。

  • 00:05:00 このセクションでは、レイテンシーの概念と回路設計におけるその重要性について説明します。レイテンシは、回路が 1 つ以上の操作を完了するのにかかる時間であり、時間またはクロック サイクルで測定できます。通常、レイテンシを下げることが目標ですが、f max を最大化することとのバランスを慎重にとる必要があります。レイテンシーに関して最適化された設計と、パイプラインの使用を通じて f max に関して最適化された設計の例が示されています。長いクリティカル パスを分割し、速度を向上させるためのパイプライン レジスタの重要性が強調されています。

  • 00:10:00 このセクションでは、ビデオでパイプライン設計の概念と、それによって計算を実行できる頻度を高める方法について説明します。パイプライン レジスタを使用すると遅延が短縮され、クロック速度が向上し、スループットが向上します。次にビデオでは、回路内のデータ パスと制御パスの概念を紹介します。データ パスは、計算を実行するレジスタと組み合わせロジックのチェーンであり、制御パスは、回路の動作を制御するデータ パス以外のその他すべてです。 。制御パスには、ハンドシェイク フロー制御、ループ制御、分岐制御などのさまざまなロジックが追加され、占有率は回路内のデータ パスの初期化率を定義するために使用されます。

  • 00:15:00 このセクションでは、FPGA における回路占有の概念について講演者が説明します。この回路には複数のレジスタがあり、その 1 つは入力データが有効かどうかを決定する有効レジスタです。目標は、回路全体の気泡を最小限に抑えて回路内の気泡を減らし、占有率を高めることです。各サイクルはリソースがどのように使用されているかを確認するためにカウントされ、回路内の占有されていない部分はバブルと呼ばれます。気泡を減らし、占有率を増やすことにより、f max を高めることができます。
Basic FPGA concepts
Basic FPGA concepts
  • 2021.04.07
  • www.youtube.com
This video introduces basic concepts of FPGA and design for FPGA
理由: