このビデオでは、行列乗算を例として並列プログラミングについて説明します。この計算では、複数の行と列を個別に計算できるという並列処理が強調されています。行列 C の単一要素計算の実装は、並列計算を可能にするカーネル関数を使用して示されています。アクセサー、レンジ、並列カーネル関数の使用法について詳しく説明します。範囲値をカーネル関数に渡す手順について説明します。 Intel FPGA dev Cloud を使用した行列乗算のデモも行われます。
00:00:00 このセクションでは、ビデオでは、並列プログラミングを教えるために一般的に使用される例として行列の乗算を紹介します。このビデオでは、行列の乗算では、ある行列から行を取得し、別の行列から列を取得して、要素ごとの乗算と累算を実行して結果の行列を生成することが説明されています。このビデオでは、さまざまな行と列を互いに独立して計算できるため、この計算では多くの並列処理が行われることが説明されています。行列乗算の簡単な実装は、要素ごとの乗算と累積を実行するネストされた for ループを備えた通常の C または C++ 言語を使用して示されています。
00:05:00 このセクションでは、行列 C の単一要素計算の実装について学習します。これは、並列計算を可能にする 1 つのカーネル関数として実装されます。重要な点は、すべての行と列の計算は同じであり、唯一の違いは行と列の番号であるということです。アクセサーは、行列 A および B には読み取り専用アクセス、行列 C には書き込みアクセスを使用してカーネル内のバッファーにアクセスするのに役立ちます。範囲は複数の次元を宣言するための抽象化として使用され、H.Parallel4 は並列カーネル関数の定義に役立ちます。 。カーネル関数にはラムダ関数が含まれており、引数は両方の次元のすべての値を反復処理するための変数です。
00:10:00 このセクションでは、講演者が層流関数であるカーネル関数に範囲値を渡す手順を説明します。変数の 2 つの次元と、各変数を識別する方法について説明します。講演者は、ラムダ関数がどのように機能するかを説明し、カーネル関数を実行する行と列の数によって問題のサイズがどのように定義されるかを示します。行列の乗算の例、伝統的な C プラス表記法、および最も内側の for ループで行われる要素ごとの乗算と累積を使用します。最後に、インテル FPGA 開発クラウドを使用した行列乗算の簡単なデモを示します。
YouTube ビデオ「OpenCL Examples (I)」では、C プログラミングでのネストされたループを使用した行列乗算の実装と、OpenCL カーネルとしてのその実装について説明しています。講師は、行列の結果の要素の内積計算に 2 レベルのネストされたループを使用する方法と、行列 C の各出力要素が OpenCL で個別のワークアイテムとして扱われる方法を説明します。このビデオでは、OpenCL カーネルの実行準備と、結果のマトリックスをデバイスからホストに取得するために必要な手順、さらにワーク グループ サイズの設定、変更されたカーネル引数を使用したカーネルの実行についても説明しています。さらに、行列乗算のサンプル コードが提供され、講演者は Mac OS 上でデバイス ID とプラットフォーム ID を取得し、さまざまなプラットフォーム上でプログラム オブジェクトを作成するプロセスを実演します。最後に、ビデオではバッファ管理について説明し、ホスト側で割り当てられたリソースと使用される OpenCL リソースを追跡し、簡単な乗算カーネルの例を示します。
このビデオでは、行列の乗算、画像の回転、画像のフィルタリングなど、OpenCL のさまざまな使用例を取り上げています。画像の回転について、講演者は入力分解を使用して問題を分解する方法を説明し、各ピクセルの元の位置と新しい位置を識別するために使用されるカーネル関数を実演します。画像フィルタリングについて、講演者は、デバイス側で画像オブジェクトを作成する概念と、画像へのアクセス方法を定義するための OpenCL サンプラーの使用について説明します。また、2 つのネストされた for ループを使用した画像畳み込み関数のサンプル実装も示します。このビデオは、OpenCL を使用して画像に畳み込みフィルターを実行し、結果を検証するデモンストレーションで終わります。
00:00:00 このセクションでは、講師が古典的なコンピューティングの例である行列乗算を紹介し、C プログラミングのネストされたループによってそれを実装する方法を説明します。また、行列 A の行と行列 B の列の積である、行列の結果の要素の内積計算についても説明します。この講義では、2 つのレベルのネストされたループが独立して実行でき、実行できることについて説明します。ランダムな方法で。
00:05:00 このセクションでは、ワークアイテムの概念と、それを OpenCL カーネルで行列乗算の実装に適用する方法について説明します。行列 C の各出力要素は個別の作業項目として扱われ、FPGA または GPU 処理要素を利用して、2 次元範囲の作業項目をハードウェア実装内の他の for ループにマッピングできます。行列の乗算を実装するには、引数のリストを持つ「simple multiply」という名前のカーネル関数が定義されます。これには、必要なすべての入力行列とその次元が必要です。カーネル関数の本体は、グローバル ID を使用してワークアイテムの 2 次元位置を計算し、合計を初期化して行列 C の結果の要素を計算します。
00:10:00 このセクションでは、OpenCL プログラミング フレームワークを使用した行列乗算のカーネル関数について講演者が説明します。カーネル関数は、ドット積演算と for ループを利用して、a からの行ベクトルと B からの列ベクトルの要素を反復処理します。 2 次元入力行列のインデックスは、行番号と列番号を使用して計算され、行ベクトルと列ベクトルの右側の要素。ドット積が計算されると、結果の要素が C の対応する要素に割り当てられます。計算環境についても説明します。これはプラットフォームに依存し、プラットフォームで利用可能なリソースと重要なパラメーターを理解する必要があります。
00:20:00 このセクションでは、ビデオで OpenCL プログラミングの環境をセットアップする方法について説明します。最初のステップでは、プラットフォーム ID を取得します。これは、システムで使用可能なプラットフォームの数を返す CL のプラットフォーム ID 取得関数を使用して行われます。次に、ビデオでは、ユーザーの好みに基づいてプラットフォーム内で特定のデバイスを取得する方法と、コマンド キューやバッファーなどのすべてのリソースを格納する OpenCL コンテキストを作成する方法について説明します。チュートリアルでは、操作が成功したことを確認するために戻り値をチェックすることを推奨しています。
00:25:00 このセクションでは、バッファーを宣言し、OpenCL API 関数を使用して、入力行列 B と C、および出力行列 C からデータを作成および移動する方法をビデオで説明します。彼らは、行列 A、B、および C がすでに float 型配列として宣言されており、データを物理メモリの線形アドレス空間に格納していると想定しています。このビデオでは、CL 作成バッファー関数を使用して行列 A および B のバッファーを宣言する方法と、CL Inc you write バッファー関数を使用して行列 A および B からデバイス上に作成されたバッファーに初期データをコピーする方法を示します。次のステップは、行列 C にスペースを割り当てることです。行列 C は、デバイスが計算結果を書き込むため、CL メモリ書き込み専用バッファとして宣言されます。
00:30:00 YouTube ビデオ「OpenCL Examples (I)」のこのセクションでは、スピーカーがデバイスから結果を取得し、結果の行列をバッファ C からホストにコピーするプロセスを説明しています。 API C の定義が示されており、コンテキスト、フラグ、サイズ、ホスト ポインター、戻り値など、バッファーを作成するための 5 つの引数の説明が示されています。次に講演者は、OpenCL プログラムの 3 番目の主要なステップであるカーネル コンパイルについて、FPGA デバイスの簡単なコンパイル プロセスを使用して説明します。このプロセスには、プログラムの作成と構築、およびソース コードから適切なカーネル関数の選択が含まれます。最後に、スピーカーは、CL set kernel argument OpenCL API を使用して、カーネル プログラムを実行する前にカーネル引数を初期化する方法について説明します。
00:45:00 ビデオのこのセクションでは、プレゼンターが Mac OS 上で OpenCL のデバイス ID とプラットフォーム ID を取得する方法を示します。プラットフォーム ID の取得やコマンド キューの作成など、さまざまな OpenCL 関数を呼び出すことで、スピーカーは OpenCL コンテキストを作成し、プログラムをコンパイルします。また、示されているコードは Mac OS と OpenCL SDK の両方をサポートしており、別のプラットフォームで実行するとエラーが報告されることも説明されています。
00:50:00 このセクションでは、さまざまなプラットフォームで OpenCL を使用してプログラム オブジェクトを作成する方法をビデオで説明します。 Mac OS では、プログラム オブジェクトはカーネル ソース コード ファイルから作成されますが、アルテラ FPGA OpenCL SDK では、コンパイルによって生成されたバイナリ ファイルから作成されます。プログラム オブジェクトが作成されると、カーネル プログラムを構築でき、そのプログラム オブジェクトから特定のカーネル関数を選択できます。このセクションが終わるまでに、必要なオブジェクトと関数がプログラムの次のセクションで使用できるようになります。
01:05:00 このセクションでは、講演者が入力分解を使用して画像回転の問題をより小さな問題に分解する方法について説明します。彼らは、画像のピクセル情報が、x 次元と y 次元の独立した計算を通じて新しい場所にコピーされると説明しています。ワーク グループは、グローバル ID を使用して各ピクセルの新しい位置を計算するために割り当てられます。講演者は、作業項目のグループとディメンション、およびこの操作を完了するために必要なカーネル関数を決定する方法についても詳しく説明します。目標は、画像回転計算のためのより効率的でスケーラブルな方法を作成することです。
01:10:00 このセクションでは、ビデオ プレゼンターが OpenCL を使用して画像を回転する方法を説明します。カーネル関数は、ピクセルの元の位置を特定し、回転パラメータを使用してピクセルの新しい位置を計算し、境界チェックをチェックして新しい座標が元の画像サイズ内に収まることを確認し、元の位置からピクセル情報をコピーするために使用されます。新しい場所へ。このコードには、OpenCL API の C++ バインディングと、プラットフォームのクエリ、デバイスの取得、ホスト メモリからデバイス バッファにデータを移動するバッファの宣言の手順も含まれています。元のデータのセキュリティを確保するために、読み取り専用バッファも作成されます。
OpenCL allows a programmer to offload a sequence of commands to a heterogeneous accelerator, such as a GPU. For embedded devices the overhead of building a command sequence can be expensive, and many applications require the same pipeline of commands to be repeatedly enqueued in a loop. For example, in computer vision where the same command...
Presented at: IWOCL / SYCLcon 2022.Additional Information and Slides: https://www.iwocl.org/iwocl-2022/programIWOCL NewsletterSignup to receive regular updat...
00:35:00 このセクションでは、hipSYCL が CPU、ビデオ GPU、および AMD GPU 用の SICL の実装であることについて説明します。これは、低レベルのベンダー API ヒップおよび CUDA の上に構築されているため、ソース コード レベルで相互運用可能です。これにより、開発者は Hip と CUDA を組み合わせて使用できるため、最新の低レベルのハードウェア最適化やベンダー最適化ライブラリへのアクセスを必要とするさまざまな HPC やその他のユースケースに適しています。さらに、特定のハードウェア向けに高度に最適化されたコード パスの作成が可能になり、カーネルのパフォーマンスは通常の Hip または CUDA と同等になることが期待されます。オープンソース プロジェクトとして、貢献者はいつでも歓迎されており、興味のある人は GitHub ページで詳細を学ぶことができます。
This video was presented at the online version of IWOCL / SYCLcon 2020.Authors: Aksel Alpay and Vincent Heuveline (Heidelberg University) Additional Informat...
00:00:00 このセクションでは、生産性を向上させ、より多くの開発者を引き付けるために抽象化レベルを上げる必要性について講演者が説明します。モデルがより複雑になるにつれて、計算能力の需要が急速に増加します。講演者は忍者ギャップについて言及しており、これはアセンブリや Cuda 開発者などの下位レベルの専門家を見つけて雇用することの難しさを指します。抽象化レベルを上げるとパフォーマンスの低下につながるため、増大する計算能力の需要を満たすために GPU や GAUDI などの AI アクセラレータが必要になります。
This lecture introduces PyOpenCL and PyCUDA to define and run functions on General Purpose Graphics Processing Units (GPUs). The running example is a basic ...
This video was presented as part of the panel discussion at the online version of IWOCL / SYCLcon 2020, and was presented by Neil Trevett, Khronos Group Pres...
45. 並行して考えるには?
45. 並行して考えるには?
このビデオでは、行列乗算を例として並列プログラミングについて説明します。この計算では、複数の行と列を個別に計算できるという並列処理が強調されています。行列 C の単一要素計算の実装は、並列計算を可能にするカーネル関数を使用して示されています。アクセサー、レンジ、並列カーネル関数の使用法について詳しく説明します。範囲値をカーネル関数に渡す手順について説明します。 Intel FPGA dev Cloud を使用した行列乗算のデモも行われます。
47. 設計解析 (I): FPGA の初期イメージを解析する
47. 設計解析 (I): FPGA の初期イメージを解析する
ビデオのこのセクションでは、DPC++ デザインの FPGA 初期イメージを分析するプロセスに焦点を当てています。講演者は、プログラムのコンパイル、FPGA バイナリの生成、プロファイリングの実行など、関連する手順を説明します。このビデオには、レポートを生成する方法と、レポートで提供されるさまざまな情報パネルを解釈する方法のデモが含まれています。講演者はまた、b2 モジュールの FPGA 初期イメージを分析し、さまざまな論理ブロック、ループ、ロード ユニット、およびアンロール ファクターについて説明します。また、カーネル関数の設計が FPGA の内部設計にどのように大きな影響を与える可能性があるかについても説明し、内部ループと外部ループを展開してスループットを向上させる方法の例を示します。これらの例は、FPGA のハードウェア リソースに影響を与える高級言語プログラミングの柔軟性を示しています。
48. DPC++ FPGA デザイン解析 (II): ランタイム プロファイリング
48. DPC++ FPGA デザイン解析 (II): ランタイム プロファイリング
このビデオでは、FPGA ビット ストリームにプロファイリング計測器のレジスタを追加してパフォーマンス データを収集するツールを使用して、プログラムのランタイム パフォーマンスを分析するプロセスについて説明します。ユーザーが追加したパフォーマンス カウンターを備えたインテル FPGA ダイナミック プロファイラーを使用して、プロファイリング用にコンパイルし、集合的なプロファイリング結果を解釈する方法を示します。これらは、ランタイム プロファイリング結果の分析に使用されるカーネル関数と実行可能ファイルを V2 プロファイラーが表示する方法と、パーティションのボトルネックを特定して最適化する方法を示しています。使用された例は、グローバル メモリへのメモリ アクセスが多かった行列修正カーネルです。このカーネルは、ローカル メモリを使用して最適化され、グローバル メモリとの通信を減らし、設計効率を向上させました。
EECE.6540 ヘテロジニアス コンピューティング (マサチューセッツ大学ローウェル校) - 49. OpenCL の例
49. OpenCL の例 (I)
YouTube ビデオ「OpenCL Examples (I)」では、C プログラミングでのネストされたループを使用した行列乗算の実装と、OpenCL カーネルとしてのその実装について説明しています。講師は、行列の結果の要素の内積計算に 2 レベルのネストされたループを使用する方法と、行列 C の各出力要素が OpenCL で個別のワークアイテムとして扱われる方法を説明します。このビデオでは、OpenCL カーネルの実行準備と、結果のマトリックスをデバイスからホストに取得するために必要な手順、さらにワーク グループ サイズの設定、変更されたカーネル引数を使用したカーネルの実行についても説明しています。さらに、行列乗算のサンプル コードが提供され、講演者は Mac OS 上でデバイス ID とプラットフォーム ID を取得し、さまざまなプラットフォーム上でプログラム オブジェクトを作成するプロセスを実演します。最後に、ビデオではバッファ管理について説明し、ホスト側で割り当てられたリソースと使用される OpenCL リソースを追跡し、簡単な乗算カーネルの例を示します。
このビデオでは、行列の乗算、画像の回転、画像のフィルタリングなど、OpenCL のさまざまな使用例を取り上げています。画像の回転について、講演者は入力分解を使用して問題を分解する方法を説明し、各ピクセルの元の位置と新しい位置を識別するために使用されるカーネル関数を実演します。画像フィルタリングについて、講演者は、デバイス側で画像オブジェクトを作成する概念と、画像へのアクセス方法を定義するための OpenCL サンプラーの使用について説明します。また、2 つのネストされた for ループを使用した画像畳み込み関数のサンプル実装も示します。このビデオは、OpenCL を使用して画像に畳み込みフィルターを実行し、結果を検証するデモンストレーションで終わります。
大並列サポート ベクター分類のための SYCL、OpenCL、CUDA、および OpenMP の比較 ( WOCL / SYCLcon 2022 )
大並列サポート ベクター分類のための SYCL、OpenCL、CUDA、および OpenMP の比較
このビデオでは、大規模並列サポート ベクター マシン分類について、さまざまなハードウェア プラットフォーム上での SYCL、OpenCL、CUDA、および OpenMP のパフォーマンスを比較しています。講演者は、Parallel Fibonacci と呼ばれる実装による行列ベクトル乗算の並列化について説明します。これは、マルチGPU 実行をサポートしますが、バイナリ分類と密な計算のみをサポートします。テストに使用されるハードウェアには、Nvidia A100 および RTX 380 GPU、AMD Radeon Pro 7 GPU、Intel Core E9-10-09020X CPU が含まれます。結果は、CUDA が Nvidia GPU の最速のバックエンドであるのに対し、OpenCL が CPU の最速のバックエンドであることを示しています。 SYCL はユーザーフレンドリーですが、Hipsicle は DPC++ や OpenCL よりも高速で安価に使用できます。さらに、講演者は、FPGA でのパフォーマンスの調査、MPI を介した分散システムのサポートの追加、混合精度計算と NVIDIA のテンソル コアのような特殊な機械学習ハードウェアの使用など、将来の作業についても説明します。
libclcxx を使用して OpenCL カーネルでさらにリッチな C++ を実現する ( WOCL / SYCLcon 2022 )
libclcxx を使用して OpenCL カーネルでさらにリッチな C++ を実現
このビデオでは、オープンソース カーネル開発への C++ ライブラリの統合を可能にする libclcxx の使用について説明します。このプロジェクトは、より多くの C++ 機能を開発者に公開することを目的として、C++ でのメタ プログラミングに不可欠なライブラリである型特性を統合します。このビデオでは、型特性ライブラリがアドレス空間とベクトル型を操作する機能を通じて OpenCL カーネルのパフォーマンスを最適化する方法を紹介します。このビデオでは、開発者がライブラリを試して、C++ との互換性を最大限に高めながら開発サイクルの短縮に貢献することを奨励しています。このライブラリは、C++ リファレンス ページと同様のスタイルで酸素のドキュメントを提供し、開発者が新しい機能を簡単にナビゲートできるようにします。
OpenCL を超えた SYCL: hipSYCL のアーキテクチャ、現状、将来の方向性 (IWOCL / SYCLcon 2020)
OpenCL を超えた SYCL: hipSYCL のアーキテクチャ、現状、将来の方向性
hipSYCL プロジェクトは、OpenCL ではなく HIP プログラミング モデルを通じて GPU をターゲットとする SYCL のオープンソース実装です。これは、コンパイラ コンポーネント、シックル インターフェイス、および安全なランタイムで構成されます。セキュア コンパイラはカーネルを識別し、ローカル メモリ割り当てを処理し、シグナリング メカニズムを実装します。ディスパッチ関数は、ユーザーが提供したカーネルに基づいて特定のアイテムを作成し、最適化された関数をrock primで定義できます。将来の方向性は、複数のバックエンドを許可し、静的コンパイル モデルの制限を取り除くことです。操作送信モデルは、より高いタスク スループットを実現するためにバッチ送信に移行しており、hipSYCL はソース コード レベルで相互運用可能であり、hip および CUDA との混合と一致が可能です。オープンソース プロジェクトとして、貢献者を歓迎します。
SYCL: 未来はオープン、並列、異種混合 (Core C++ 2022 )
SYCL: 未来はオープン、パラレル、異種混合です
SYCL プログラミングに関するこのビデオでは、複雑なモデルにはアクセラレータ システムによって処理能力の向上が必要となるため、生産性を向上させ、より多くの開発者を引きつけるために抽象化レベルを上げる必要性を強調しています。ソフトウェアのポータビリティと OneAPI は、デバイスが CPU、GPU、およびその他のデバイスで動作できるようにするため、その重要性が強調されています。オープン、並列、異種混合プログラミング モデルである SYCL の利点についても説明し、講演者はコードを最適化しパフォーマンスを向上させるために利用できる多数のオンライン リソースとツールを強調しました。講演者は視聴者に、oneapi.io とその YouTube チャンネルにアクセスしてリソースやサポートを求めるよう勧めています。
Python での GPU アクセラレーション
Python での GPU アクセラレーション
このビデオでは、グラフィックス プロセッシング ユニットの能力を活用して Python プログラミングで GPU アクセラレーションを実現する方法を説明しています。これにより、データ並列処理により最大 10 倍の速度向上が可能になります。 GPU コンピューティングの 2 つの標準である OpenCL と CUDA が簡単に紹介され、ビデオでは Python での行列乗算に Pi OpenCL と CUDA を使用する方法が示されています。講演者は、行列乗算のためのグローバル メモリとカーネルの使用法を説明し、行列と行列の積の 1 つの要素を計算するために使用されるアルゴリズムについても説明します。 C と Python による GPU アクセラレーションのコードについて、行列の内部表現とメモリ割り当ての理解に重点を置いて説明します。講義の演習は、GPU コンピューティングをさらに探求するための基礎を提供します。
OpenCL 3.0 発表プレゼンテーション (IWOCL / SYCLcon 2020)
OpenCL 3.0 発表プレゼンテーション
このビデオでは、業界における低レベルの並列プログラミングにおける OpenCL 3.0 の重要性に焦点を当てて、OpenCL 3.0 のリリースについて説明します。 OpenCL 3.0 は API に新しい機能を追加しませんが、OpenCL がより多くの開発者やデバイスに利用できるようにするためのエコシステムの再調整を提供します。発表者は、DSP ライト プロセッサの拡張機能の追加、将来の機能のロードマップ、OpenCL Vulcan のスピリット カーネルを生成できるオープンソース カーネル言語コンパイラの成長するエコシステムについても説明します。作業グループが今後数か月にわたる実装の第一波に向けて準備を進める中、仕様を最終決定するためにユーザーからのフィードバックが奨励されています。