IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 韓國電子通信研究院の特許一覧

特開2024-126002並列演算作業オフローディング装置および方法
<>
  • 特開-並列演算作業オフローディング装置および方法 図1
  • 特開-並列演算作業オフローディング装置および方法 図2
  • 特開-並列演算作業オフローディング装置および方法 図3
  • 特開-並列演算作業オフローディング装置および方法 図4
  • 特開-並列演算作業オフローディング装置および方法 図5
  • 特開-並列演算作業オフローディング装置および方法 図6
  • 特開-並列演算作業オフローディング装置および方法 図7
  • 特開-並列演算作業オフローディング装置および方法 図8
  • 特開-並列演算作業オフローディング装置および方法 図9
  • 特開-並列演算作業オフローディング装置および方法 図10
  • 特開-並列演算作業オフローディング装置および方法 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024126002
(43)【公開日】2024-09-19
(54)【発明の名称】並列演算作業オフローディング装置および方法
(51)【国際特許分類】
   G06F 9/50 20060101AFI20240911BHJP
   G06F 9/46 20060101ALI20240911BHJP
   G06F 9/38 20180101ALI20240911BHJP
【FI】
G06F9/50 120B
G06F9/46 410
G06F9/38 370C
【審査請求】有
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2024008199
(22)【出願日】2024-01-23
(31)【優先権主張番号】10-2023-0029137
(32)【優先日】2023-03-06
(33)【優先権主張国・地域又は機関】KR
(71)【出願人】
【識別番号】596180076
【氏名又は名称】韓國電子通信研究院
【氏名又は名称原語表記】Electronics and Telecommunications Research Institute
【住所又は居所原語表記】218,Gajeong-ro Yuseong-gu Daejeon 34129,Republic of Korea
(74)【代理人】
【識別番号】100120031
【弁理士】
【氏名又は名称】宮嶋 学
(74)【代理人】
【識別番号】100107582
【弁理士】
【氏名又は名称】関根 毅
(74)【代理人】
【識別番号】100152205
【弁理士】
【氏名又は名称】吉田 昌司
(72)【発明者】
【氏名】アン、シン-ヨン
(72)【発明者】
【氏名】キム、ヨン-ホ
(72)【発明者】
【氏名】イム、ウン-ジ
(72)【発明者】
【氏名】ハン、ウ-ジョン
(72)【発明者】
【氏名】パク、ユ-ミ
(72)【発明者】
【氏名】ジュン、ソン-イク
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013DD02
5B013DD03
(57)【要約】      (修正有)
【課題】並列演算作業オフローディング装置および方法を提供する。
【解決手段】並列演算作業は、複数の並列スレッドグループ13の実行要請を少なくとも一つ以上の並列スレッドグループキューに挿入する。実行要求は既に設定された優先順位が存在する場合、既に設定された優先順位によって優先順位に対応する少なくとも一つ以上の並列スレッドグループキューに挿入される。優先順位によって並列スレッドグループキューから抽出した並列スレッドグループ実行要請エントリーを用いて並列スレッドグループの並列スレッド12を実行し、実行スタートアップルチンコードにスケジューリングされた実行手順によって並列スレッドの実行が終了すると、実行結果を実行結果キューに挿入し、実行結果キューを確認して、並列スレッドグループの実行終了状態を確認する。
【選択図】図1
【特許請求の範囲】
【請求項1】
一つ以上のプロセッサと、
前記一つ以上のプロセッサによって実行される少なくとも一つ以上のプログラムを保存するメモリーと、を含み、
前記少なくとも一つ以上のプログラムは、
複数の並列スレッドグループの実行要請を少なくとも一つ以上の並列スレッドグループキューに挿入し、前記実行要求は既に設定された優先順位が存在する場合、前記既に設定された優先順位によって前記優先順位に対応する前記少なくとも一つ以上の並列スレッドグループキューに挿入される、
前記優先順位によって並列スレッドグループキューから抽出した並列スレッドグループ実行要請エントリーを用いて並列スレッドグループの並列スレッドを実行し、
前記並列スレッドの実行が終了すると、実行結果を実行結果キューに挿入し、
前記実行結果キューで報告される前記実行結果を確認して前記並列スレッドグループの実行終了状態を確認し、
前記実行終了状態に対応する並列スレッドグループの並列スレッドを実行することを特徴とする、並列演算作業オフローディング装置。
【請求項2】
前記少なくとも一つ以上のプログラムは、
前記優先順位に対応する並列スレッドグループキューでプログラマブルタイマーを用いて、既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を見つけることを特徴とする、請求項1に記載の並列演算作業オフローディング装置。
【請求項3】
前記少なくとも一つ以上のプログラムは、
前記既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を見つけた場合、前記既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を、次上位の優先順位の並列スレッドグループキューの最後実行要請エントリーに移動させることを特徴とする、請求項2に記載の並列演算作業オフローディング装置。
【請求項4】
前記少なくとも一つ以上のプログラムは、
前記並列スレッドグループの各並列スレッド別に実行スタートアップルチンコードを実行して実行状態情報から並列演算カーネルコードの実行に必要な情報を加速コアのレジスターに先にロードし、並列演算カーネルコードを実行することを特徴とする、請求項1に記載の並列演算作業オフローディング装置。
【請求項5】
前記実行状態情報は、
前記並列スレッドグループを識別するための共通状態情報、および前記並列スレッドグループが含む並列スレッドを識別するための個別の並列スレッド状態情報を含むことを特徴とする、請求項4に記載の並列演算作業オフローディング装置。
【請求項6】
前記少なくとも一つ以上のプログラムは、
スレッドスイチングロジッグを用いて、前記並列スレッドグループのうち、並列スレッドの総個数が加速コアグループに含まれたハードウェアスレッドの個数よりも大きい場合、停止された並列スレッドのコンテキストブロックをスクラッチメモリーでスイチングすることを特徴とする、請求項1に記載の並列演算作業オフローディング装置。
【請求項7】
前記少なくとも一つ以上のプログラムは、
前記並列スレッドのうち、前記並列スレッドグループに含まれる並列スレッドの中で事前に設定された代表並列スレッドが、前記並列スレッドグループ実行結果を前記実行結果キューに挿入することを特徴とする、請求項1に記載の並列演算作業オフローディング装置。
【請求項8】
前記少なくとも一つ以上のプログラムは、
複数の並列スレッドグループのいずれか一つの一番目の並列スレッドグループをいずれか一つの加速コアグループに実行するステップを含むことを特徴とする、請求項1に記載の並列演算作業オフローディング装置。
【請求項9】
前記少なくとも一つ以上のプログラムは、
前記加速コアグループのIDLE状態レジスターの値を読み出し、前記加速コアグループがIDLE状態であることを確認すると、前記いずれか一つの一番目の並列スレッドグループに含まれた全ての並列スレッドを実行することを特徴とする、請求項8に記載の並列演算作業オフローディング装置。
【請求項10】
前記少なくとも一つ以上のプログラムは、
前記いずれか一つの一番目の並列スレッドグループに含まれた全ての並列スレッドが実行されると、前記IDLE状態レジスターの値をIDLEからBUSYに変更し、前記全ての並列スレッドの実行が終了すると、前記IDLE状態レジスターの値をBUSYからIDLEに変更することを特徴とする、請求項9に記載の並列演算作業オフローディング装置。
【請求項11】
並列演算作業オフローディング装置の並列演算作業オフローディング方法において、
複数の並列スレッドグループの実行要請を少なくとも一つ以上の並列スレッドグループキューのいずれか一つに挿入するステップと、前記実行要求は既に設定された優先順位が存在する場合、前記既に設定された優先順位によって前記優先順位に対応する前記少なくとも一つ以上の並列スレッドグループキューに挿入される、
前記優先順位によって並列スレッドグループキューから抽出した並列スレッドグループ実行要請エントリーを用いて並列スレッドグループの並列スレッドを実行するステップと、
前記並列スレッドの実行が終了すると、実行結果を実行結果キューに挿入するステップと、
前記実行結果キューで報告される前記実行結果を確認して前記並列スレッドグループの実行終了状態を確認するステップと、
前記実行終了状態に対応する並列スレッドグループの並列スレッドを実行するステップと、
を含むことを特徴とする、並列演算作業オフローディング方法。
【請求項12】
前記実行するステップは、
前記優先順位に対応する並列スレッドグループキューでプログラマブルタイマーを用いて、既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を見つけることを特徴とする、請求項11に記載の並列演算作業オフローディング方法。
【請求項13】
前記実行するステップは、
前記既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を見つけた場合、前記既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を、次上位の優先順位の並列スレッドグループキューの最後実行要請エントリーに移動させることを特徴とする、請求項12に記載の並列演算作業オフローディング方法。
【請求項14】
前記実行するステップは、
前記並列スレッドグループの各並列スレッド別に実行スタートアップルチンコードを実行して実行状態情報から並列演算カーネルコードの実行に必要な情報を加速コアのレジスターに先にロードし、並列演算カーネルコードを実行することを特徴とする、請求項11に記載の並列演算作業オフローディング方法。
【請求項15】
前記実行状態情報は、
前記並列スレッドグループを識別するための共通状態情報、および前記並列スレッドグループが含む並列スレッドを識別するための個別の並列スレッド状態情報を含むことを特徴とする、請求項11に記載の並列演算作業オフローディング方法。
【請求項16】
前記実行するステップは、
スレッドスイチングロジッグを用いて、前記並列スレッドグループのうち、並列スレッドの総個数が加速コアグループに含まれたハードウェアスレッドの個数よりも大きい場合、停止された並列スレッドのコンテキストブロックをスクラッチメモリーでスイチングすることを特徴とする、請求項11に記載の並列演算作業オフローディング方法。
【請求項17】
前記挿入するステップは、
前記並列スレッドグループに含まれる並列スレッドの中で事前に設定された代表並列スレッドが、前記並列スレッドグループ実行結果を前記実行結果キューに挿入することを特徴とする、請求項11に記載の並列演算作業オフローディング方法。
【請求項18】
前記並列演算作業オフローディング方法は、
前記並列スレッドグループキューのいずれか一つに挿入するステップ以前に、
複数の並列スレッドグループのいずれか一つの一番目の並列スレッドグループをいずれか一つの加速コアグループに実行するステップを含むことを特徴とする、請求項11に記載の並列演算作業オフローディング方法。
【請求項19】
前記いずれか一つに加速コアグループに実行するステップは、
前記加速コアグループのIDLE状態レジスターの値を読み出し、前記加速コアグループがIDLE状態であることを確認すると、前記いずれか一つの一番目の並列スレッドグループに含まれた全ての並列スレッドを実行することを特徴とする、請求項18に記載の並列演算作業オフローディング方法。
【請求項20】
前記いずれか一つに加速コアグループに実行するステップは、
前記いずれか一つの一番目の並列スレッドグループに含まれた全ての並列スレッドが実行されると、前記IDLE状態レジスターの値をIDLEからBUSYに変更し、前記全ての並列スレッドの実行が終了すると、前記IDLE状態レジスターの値をBUSYからIDLEに変更することを特徴とする、請求項19に記載の並列演算作業オフローディング方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、並列演算作業技術に関するものであって、より詳細には、並列演算作業オフローディング技術に関するものである。
【背景技術】
【0002】
コンピューティング装置の中央処理装置であるCPU(Central Processing Unit)は、益々増大する高性能コンピューティング要求に応えるために、マルチコア(Multicore)、またはメニーコア(manycore)プロセッサに進化した。しかし、CPUのコアを増やす方法だけでは要求される高性能コンピューティング要求を満たすことができない。コンピューティングシステムは、GPU(Graphic Processing Unit)、FPGA(Field-Programmable Gate Array)、DSP(Digital Signal Processor)、NPU(Neural Processing Unit)、APU(Accelerated Processing Unit)など多様なタイプの並列処理に特化した一つ以上のプロセッサをさらに有する方向に発展した。このような並列処理特化プロセッサを一般的にアクセラレータ(Accelerator)と呼ぶ。アクセラレータは、CPUで実行される演算の中で並列性が非常に高い演算を委任(offload)され、より迅速に処理するために用いられる。CPUとアクセラレータとは別途のSoC(System on Chip)で作られていたが、一つのSoCにCPUのコアとアクセラレータのコアとを統合する異種メニーコアプロセッサが出現した。このような異種アーキテクチャーの結合は、ホストコアと異種加速コア間の物理的距離の減少および帯域幅の増加を通じて通信費用を減少させ、全域メモリーの共有が可能になるので、並列演算作業のオフローディングオーバーヘッドを節減して高性能を達成できるようにする。
【0003】
前記のようなアクセラレータに並列演算作業をオフローディングするために、CUDA(Compute Unified Device Architecture)、HIP(Heterogeneous-Compute Interface for Portability)のような装置固有の私設(private)プログラミングモデルや、OpenCL、OpenMP、OpenACCなどのような産業界の開放型標準プログラミングモデルが用いられる。
【0004】
そのうち、普遍的に多く用いられる業界標準プログラミングモデルであるOpenCL(Open Computing Language)を用いると、多様なアクセラレータプラットホームで動作可能な互換性に優れたプログラムを作成することができる。その上、OpenCLプログラムは、CPUでも実行可能であり、GPU、FPGAなど多様なアクセラレータプラットホームでユーザーの演算を加速することができるデータ並列スレッドを大量で実行する方法を提供する。OpenCLは、Cと類似のプログラミングモデルであり、アクセラレータで実行可能な並列演算カーネルプログラムの作成を支援し、またOpenCLランタイムを通じてOpenCL APIを提供してホストプログラムの作成も支援する。このように作成されたOpenCLプログラムは、コンパイラーによってホスト実行コードとアクセラレータ実行コードにコンパイルされ、OpenCLランタイムライブラリおよびアクセラレータドライバーの助けを借りてホストとアクセラレータで実行可能である。
【0005】
CPUとアクセラレータとは、多様なハードウェアアーキテクチャーに設計される。例えば、最近のCPUは、一般的にSMT(Simultaneous Multi-Threading)デザインパターンを有し、アクセラレータは、SIMD(Single Instruction、Multiple Data)、SIMT(Single Instruction、Multiple Threads)、MIMD(Multiple Instructions、Multiple Threads)のような多様なデータレベル並列性(Data Level Parallelism)またはスレッドレベル並列性(Thread Level Parallelism)を支援するハードウェアデザインパターンを有してもよい。MIMDは、非常に多くの単一コア(Scalar core)または多重スレッドコア(Multi-threaded core)を有し、このコアにデータ並列タスクを柔軟にマッピングすることができるが、SIMDに比べてデータレベル並列性の効率が落ちるというデメリットを有する。逆にSIMDは、データレベル並列性に優れているが、不正規的な(irregular)データ並列性が弱い。SIMTは、SIMDとMIMDの中間特性を有するデザインパターンであり、プログラマビリティと演算効率性との間の代案を提示する方式でNvidia GPGPUに適用され、その効用性を証明した。
【0006】
前記のように、アクセラレータは、アーキテクチャーデザインパターン別に多様な形態のコアと多様な形態の制御構造を有し、その外にも多様なメモリー階層構造を有することができる。したがって、多様な形態のアクセラレータハードウェアデザインに適するように並列演算作業(例、OpenCLカーネル)を効果的に実行する方法が必要となる。
【0007】
NvidiaおよびAMDのGPUは、前記並列演算作業の効率的な実行および管理のために、多様なレベルのハードウェアスケジューラを備えている。Nvidiaは、ハードウェアとして構成されるスレッドグループスケジューラを提供しており、また各Streaming Multiprocessor(OpenCLコンピュートユニットに該当)にスケジューリングされたスレッドグループのスレッドをWarpというSIMD演算単位でスケジューリングするWarp Schedulerを含む。
【0008】
一方、韓国公開特許第10-2018-0076051号の「OpenCLカーネルを処理する方法と、これを行うコンピュータ装置」は、メニーコアに並列演算作業を実行するための階層的な制御コア構造に関して開示している。
【0009】
しかし、韓国公開特許第10-2018-0076051号は、専用のHWを通じるスケジューリングメカニズムを開示しているが、アクセラレータHW構造とこのため制御構造が複雑となり、新しいスケジューリング方法を柔軟に開発して適用し難いというデメリットがある。
【発明の概要】
【発明が解決しようとする課題】
【0010】
本発明は、ハードウェアスケジューラがない異種加速コアを有する異種コアプロセッサシステムで並列演算作業を迅速に実行させることを目的とする。
【0011】
また、本発明は、大規模の並列処理環境で効果的に実現できるHWおよびSW実行支援構造とフローを提供することを目的とする。
【0012】
また、本発明は、大規模の並列処理演算器の実行性能と多様なワークロードに対応する柔軟性を同時に提供することを目的とする。
【0013】
また、本発明は、SWの介入なしに低い優先順位のスケジューリング項目が、無限待機状態(starvation)に陷ることを防止することを目的とする。
【課題を解決するための手段】
【0014】
前記の目的を達成するための本発明の一実施例に係る並列演算作業オフローディング装置は、一つ以上のプロセッサと、前記一つ以上のプロセッサによって実行される少なくとも一つ以上のプログラムを保存するメモリーと、を含み、前記少なくとも一つ以上のプログラムは、複数の並列スレッドグループの実行要請を少なくとも一つ以上の並列スレッドグループキューに挿入し、前記実行要求は既に設定された優先順位が存在する場合、前記既に設定された優先順位によって前記優先順位に対応する前記少なくとも一つ以上の並列スレッドグループキューに挿入される、前記優先順位によって並列スレッドグループキューから抽出した並列スレッドグループ実行要請エントリーを用いて並列スレッドグループの並列スレッドを実行し、前記並列スレッドの実行が終了すると、実行結果を実行結果キューに挿入し、前記実行結果キューで報告される前記実行結果を確認して前記並列スレッドグループの実行終了状態を確認し、前記実行終了状態に対応する並列スレッドグループの並列スレッドを実行することができる。
【0015】
このとき、前記少なくとも一つ以上のプログラムは、前記優先順位に対応する並列スレッドグループキューでプログラマブルタイマーを用いて、既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を見つけることができる。
【0016】
このとき、前記少なくとも一つ以上のプログラムは、前記既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を見つけた場合、前記既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を、次上位の優先順位の並列スレッドグループキューの最後実行要請エントリーに移動させることができる。
【0017】
このとき、前記少なくとも一つ以上のプログラムは、前記並列スレッドグループの各並列スレッド別に実行スタートアップルチンコードを実行して実行状態情報から並列演算カーネルコードの実行に必要な情報を加速コアのレジスターに先にロードし、並列演算カーネルコードを実行することができる。
【0018】
このとき、前記実行状態情報は、前記並列スレッドグループを識別するための共通状態情報、および前記並列スレッドグループが含む並列スレッドを識別するための個別の並列スレッド状態情報を含むことができる。
【0019】
このとき、前記少なくとも一つ以上のプログラムは、スレッドスイチングロジッグを用いて、前記並列スレッドグループのうち、並列スレッドの総個数が加速コアグループに含まれたハードウェアスレッドの個数よりも大きい場合、停止された並列スレッドのコンテキストブロックをスクラッチメモリーでスイチングすることができる。
【0020】
このとき、前記少なくとも一つ以上のプログラムは、前記並列スレッドグループに含まれる並列スレッドの中で事前に設定された代表並列スレッドが、前記並列スレッドグループ実行結果を前記実行結果キューに挿入することができる。
【0021】
このとき、前記少なくとも一つ以上のプログラムは、複数の並列スレッドグループのいずれか一つの一番目の並列スレッドグループをいずれか一つの加速コアグループに実行するステップを含むことができる。
【0022】
このとき、前記少なくとも一つ以上のプログラムは、前記加速コアグループのIDLE状態レジスターの値を読み出し、前記加速コアグループがIDLE状態であることを確認すると、前記いずれか一つの一番目の並列スレッドグループに含まれた全ての並列スレッドを実行することができる。
【0023】
このとき、前記少なくとも一つ以上のプログラムは、前記いずれか一つの一番目の並列スレッドグループに含まれた全ての並列スレッドが実行されると、前記IDLE状態レジスターの値をIDLEからBUSYに変更し、前記全ての並列スレッドの実行が終了すると、前記IDLE状態レジスターの値をBUSYからIDLEに変更することができる。
【0024】
また、前記の目的を達成するための本発明の一実施例に係る並列演算作業オフローディング方法は、並列演算作業オフローディング装置の並列演算作業オフローディング方法において、複数の並列スレッドグループの実行要請を少なくとも一つ以上の並列スレッドグループキューのいずれか一つに挿入するステップと、前記実行要求は既に設定された優先順位が存在する場合、前記既に設定された優先順位によって前記優先順位に対応する前記少なくとも一つ以上の並列スレッドグループキューに挿入される、前記優先順位によって並列スレッドグループキューから抽出した並列スレッドグループ実行要請エントリーを用いて並列スレッドグループの並列スレッドを実行するステップと、前記並列スレッドの実行が終了すると、実行結果を実行結果キューに挿入するステップと、前記実行結果キューで報告される前記実行結果を確認して前記並列スレッドグループの実行終了状態を確認するステップと、前記実行終了状態に対応する並列スレッドグループの並列スレッドを実行するステップと、を含む。
【0025】
このとき、前記実行するステップは、前記優先順位に対応する並列スレッドグループキューでプログラマブルタイマーを用いて、既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を見つけることができる。
【0026】
このとき、前記実行するステップは、前記既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を見つけた場合、前記既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を、次上位の優先順位の並列スレッドグループキューの最後実行要請エントリーに移動させることができる。
【0027】
このとき、前記実行するステップは、前記並列スレッドグループの各並列スレッド別に実行スタートアップルチンコードを実行して実行状態情報から並列演算カーネルコードの実行に必要な情報を加速コアのレジスターに先にロードし、並列演算カーネルコードを実行することができる。
【0028】
このとき、前記実行状態情報は、前記並列スレッドグループを識別するための共通状態情報、および前記並列スレッドグループが含む並列スレッドを識別するための個別の並列スレッド状態情報を含むことができる。
【0029】
このとき、前記実行するステップは、スレッドスイチングロジッグを用いて、前記並列スレッドグループのうち、並列スレッドの総個数が加速コアグループに含まれたハードウェアスレッドの個数よりも大きい場合、停止された並列スレッドのコンテキストブロックをスクラッチメモリーでスイチングすることができる。
【0030】
このとき、前記挿入するステップは、前記前記並列スレッドグループに含まれる並列スレッドの中で事前に設定された代表並列スレッドが、前記並列スレッドグループ実行結果を前記実行結果キューに挿入することができる。
【0031】
このとき、前記並列演算作業オフローディング方法は、前記並列スレッドグループキューのいずれか一つに挿入するステップ以前に、複数の並列スレッドグループのいずれか一つの一番目の並列スレッドグループをいずれか一つの加速コアグループに実行するステップを含むことができる。
【0032】
このとき、前記いずれか一つに加速コアグループに実行するステップは、前記加速コアグループのIDLE状態レジスターの値を読み出し、前記加速コアグループがIDLE状態であることを確認すると、前記いずれか一つの一番目の並列スレッドグループに含まれた全ての並列スレッドを実行することができる。
【0033】
このとき、前記いずれか一つに加速コアグループに実行するステップは、前記いずれか一つの一番目の並列スレッドグループに含まれた全ての並列スレッドが実行されると、前記IDLE状態レジスターの値をIDLEからBUSYに変更し、前記全ての並列スレッドの実行が終了すると、前記IDLE状態レジスターの値をBUSYからIDLEに変更することができる。
【発明の効果】
【0034】
本発明は、ハードウェアスケジューラがない異種加速コアを有する異種コアプロセッサシステムで並列演算作業を迅速に実行させることができる。
【0035】
また、本発明は、大規模の並列処理環境で効果的に実現可能なHWおよびSW実行支援構造とフローを提供することができる。
【0036】
また、本発明は、大規模の並列処理演算器の実行性能と多様なワークロードに対応する柔軟性を同時に提供することができる。
【0037】
また、本発明は、SWの介入なしに低い優先順位項目が無限待機状態(starvation)に陷ることを防止できる。
【図面の簡単な説明】
【0038】
図1図1は、本発明の一実施例に係る並列演算作業を示した図である。
図2図2は、本発明の一実施例に係る並列演算作業オフローディング装置を示したブロック図である。
図3図3は、本発明の一実施例に係るホストコアの装置ドライバーと加速コアグループ(ACG)間の一つの並列スレッドグループ実行過程を示した図である。
図4図4は、本発明の一実施例に係るホストコアの装置ドライバーとACG間の連続的な並列スレッドグループスケジューリング過程を示した図である。
図5図5は、本発明の一実施例に係るホストコアの装置ドライバーとACG間の優先順位が適用された多数の並列スレッドグループスケジューリング過程を示した図である。
図6図6は、本発明の一実施例に係る装置ドライバーと実行スタートアップルチン間の並列スレッドグループ実行要請と実行結果報告パイプライニングを示した図である。
図7図7は、本発明の一実施例に係る並列演算作業コンテキストを示した図である。
図8図8は、本発明の一実施例に係る一つの並列スレッドグループを実行する並列演算作業オフローディング方法を示した動作フローチャートである。
図9図9は、本発明の一実施例に係る多数の並列スレッドグループ(PTG)に対する並列演算作業オフローディング方法を示した動作フローチャートである。
図10図10は、図9に示されたPTGQにPTG実行要請を挿入するステップの一例を細部的に示した動作フローチャートである。
図11図11は、本発明の一実施例に係るコンピューターシステムを示した図である。
【発明を実施するための形態】
【0039】
本発明を添付の図面を参照して詳しく説明すると、次の通りである。ここで、繰り返される説明、本発明の要旨を不要に曖昧にすることができる公知機能、および構成に関する詳細な説明は省略する。本発明の実施形態は、当業界で平均的な知識を有した者に本発明をより完全に説明するために提供されるものである。したがって、図面での要素の形象および大きさなどはより明確な説明のために誇張することがある。
【0040】
明細書全体で、ある部分がある構成要素を「含む」とするとき、これは特に反対される記載がない限り、他の構成要素を除くものではなく、他の構成要素をさらに含んでもよいことを意味する。
【0041】
以下、本発明に係る好ましい実施例を添付の図面を参照して詳細に説明する。
【0042】
本発明では、GPGPUに対して相対的にコア当たり少数のマルチスレッドを支援するMIMDスタイルの異種メニーコアを含む異種コアプロセッサで、並列演算作業(例、OpenCLカーネル)の非常に多くのスレッドを、前記異種メニーコアに効果的にマッピングして迅速に並列演算作業を実行する方法を提示する。
【0043】
図1は、本発明の一実施例に係る並列演算作業(Parallel Computation Tasks:PCT)を示した図である。
【0044】
図1を参照すると、並列演算作業は、CUDAまたはOpenCLのオフローディング作業と類似の概念で、スレッドレベル並列性を基盤にした演算作業を意味する。OpenMPのようなマルチスレッド基盤プログラミングモデルは、一つのスレッドがルーフを用いて繰り返しデータを順次処理する方式で比較的多い演算を行うことができる。
【0045】
本発明で開示する並列演算作業は、図1に示された並列演算カーネル11の一実施例のように、比較的小規模の演算を行うカーネル関数を行うことが分かる。並列演算作業(Parallel Computation Task、PCT)は、OpenCL NDRagngeを例として挙げることができる。
【0046】
非常に多くの並列スレッド(Parallel Threads、PT)12は、並列演算カーネル11コードを実行して並列演算作業を行うことができる。前記並列スレッド12は、OpenCL work-itemを例として挙げることができる。
【0047】
並列演算作業の並列スレッド12は、MIMDコアを対象にするので、各スレッドの制御フローを発散することができ、不正規的な(irregular)データ並列性を要求する作業により効果的である。
【0048】
並列スレッド12を個別の的に異種のMIMDコアに実行することは非常に多くのオーバーヘッドを誘発させ得る。
【0049】
したがって、並列スレッド12を並列スレッドグループ(Parallel ThreadGroup、PTG)13に束ねてスレッドグループ単位の集合スケジューリングが必要となる。並列スレッドグループ13は、OpenCL work-groupを例として挙げることができる。
【0050】
並列演算作業(PCT)の実行モデルは、CUDAまたはOpenCL実行モデルのように二つの部分に分けられる。PCTカーネル(kernels)は異種加速コアで実行され、ホストプログラム(PCT App.)はホストコアで実行される。ホストプログラムは、アクセラレータ装置ドライバー(Accelerator Device Driver)と連動して、PCTカーネルのためのPCTコンテキストをメモリーに構成し、異種加速コアにPCTカーネルの実行を要請して管理する。このとき、PCTカーネルスレッドは、アクセラレータの並列処理構造を最大限に活用して並列実行され、これら並列スレッドの個数が大きくなるにつれて、増加するスケジューリングオーバーヘッドを減少させるために、多数のPTを束ねて並列スレッドグループを形成することができる。一般的にPCTカーネルには、PTが特定のアクセラレータ演算コアで実行開始するように管理する実行スタートアップルチン(Execution Startup Routine、crt0と類似)が含まれてもよい。
【0051】
図2は、本発明の一実施例に係る並列演算作業オフローディング装置を示したブロック図である。
【0052】
図2を参照すると、本発明の一実施例に係る並列演算作業オフローディング装置は、並列演算作業をオフローディングする対象異種コアプロセッサシステムに対応することが分かる。
【0053】
このとき、異種コアは、OSが運用されるホストコアと区別される演算用コアに対応することができる。
【0054】
本発明の一実施例に係る並列演算作業オフローディング装置は、少なくとも一つ以上のホストコア110、少なくとも一つ以上の加速コアグループ(Accelerating Core Group、ACG)120、少なくとも一つ以上のアクセラレータメモリー管理ユニット(Accel.MMU)130およびメモリーコントローラー140を含むことができる。
【0055】
加速コアグループ120は、少なくとも一つ以上のハードウェアスレッド(Hardware Thread、HT)を同時に駆動させる並列スレッドグループスケジューリング支援レジスター(PTG Scheduling Registers、PSR)121、少なくとも一つ以上の加速コア122および実行効率を高めるためのスクラッチメモリー(Scratchpad Memory、SM)123を含むことができる。
【0056】
このとき、加速コアグループ120は、少なくとも一つ以上の加速コア122をグルーピングして構成されてもよい。
【0057】
前記加速コアは、少なくとも一つ以上のハードウェアスレッド(Hardware Thread、HT)を提供することができ、HT同士が共有する一つ以上のSIMD(Single Instruction Multiple Data)演算器を含むことができる。
【0058】
このとき、前記HTで実行された少なくとも一つのPTの実行が一時待機(stall)状態に入る場合、加速コアは、当該の加速コアに割り当てられた他のPTを行えるようにスレッドスイチング機能を提供することができる。
【0059】
一つ以上のACG120は、一つのアクセラレータメモリー管理ユニット(Accel.MMU)130を共有してもよい。前記Accel.MMU130は、ACG120の各ACで実行される並列スレッドを仮想アドレス空間で実行可能に仮想アドレスと物理アドレス間の変換機能を提供することができる。ホストコア110と加速コアグループ120とはメモリーを共有し、オペレーティングシステム、アクセラレータ装置ドライバーおよび並列演算作業実行に必要なコンテキストなどが必要に応じて配置されてもよい。
【0060】
ACG120は、ホストコア110で実行される並列演算作業ホストプログラム(PCT App.)から図1に開示されているように、一定の大きさの並列スレッドの個数が指定された並列スレッドグループ(PTG)の実行を要請されてもよい。
【0061】
一般的に、並列演算作業の並列スレッドの数字は、全体加速コアが特定の時点で同時に実行できる最大スレッドの数字よりも大きい。このように非常に多くの並列スレッドを個別の的に加速コア(AC)にスケジューリングすることになると、スケジューリングすべき並列スレッドの個数が非常に多くなって、スケジューリングの負荷および遅延によって、アクセラレータの計算性能が低下することがある。そのため、並列スレッドは、並列スレッドグループ(PTG)単位でACGにスケジューリングすることになる。このとき、前記スケジューリングは、ACにPTを実行するために、複数のPSRをセッティングすることに対応できる。
【0062】
本発明の一実施例に係る並列演算作業オフローディング装置は、複数のACのために、複数のPTを集合スケジューリング可能なデータ構造(PTG Scheduling Register、PSR)を用いて、スケジューリングを支援および実行し、管理レジスターを含むことができる。
【0063】
図3は、本発明の一実施例に係るホストの装置ドライバーとACG間の一つの並列スレッドグループ実行過程を示した図である。
【0064】
図3を参照すると、PCT Host Processは、装置ドライバーに並列演算作業を要請しながら並列スレッドのバイナリー実行コード(並列演算カーネル)をドライバーに伝達することができる。並列演算カーネルは、ユーザー定義演算コードと前記ユーザー定義演算コードが加速コアで並列スレッドとして実行できるように並列スレッドの開始および終了を管理し、後続の並列スデドグル-ムを加速コアグループにスケジューリングする実行スタートアップルチンで構成されてもよい。
【0065】
図3を参照すると、一つのPTGを一つのACGに行う過程を示したことが分かる。このために、PSRは、スケジューリング支援レジスター(Scheduling Support Registers、SSR)と、実行制御レジスター(Execution Control Registers、ECR)とを含むことが分かる。
【0066】
スケジューリング支援レジスター(SSR)は、スケジューリング関連多様なオプションを指定することができるスケジューリング制御レジスター(Scheduling Control Register、SCR)と、ACGの使用(並列スレッドによって占有中)の状態を指示するIDLE状態レジスターとを含むことができる。装置ドライバーは、スケジューリング制御レジスターを通じて実行スタートアップルチンが多様なスケジューリング政策を選択的に適用するようにすることができる。
【0067】
実行制御レジスター(ECR)は、実行される並列スレッドグループまたは実行中の並列スレッドグループを区別する識別子レジスター、PTG実行に必要なデータ構造レジスター、実行コードを指定するレジスターおよびPTGのPT同時実行レジスター、PTG終了状態を制御して報告するレジスターを含むことができる。
【0068】
実行制御レジスターの一部は、ACGの全ての加速コアに並列スレッドを同時実行するロジッグが連動されてもよい。
【0069】
1)先に、ホストコア110の装置ドライバーは、任意のACGのIDLE状態レジスターの値を読み出し、前記ACGがIDLE状態であることを確認することができる。
【0070】
このとき、2)装置ドライバーは、実行制御レジスターの中でPTG識別子、実行に必要なコードおよびデータ構造を指定するレジスターなどに有効な値を設定して前記PTG実行を準備することができる。
【0071】
このとき、3)装置ドライバーは、実行制御レジスターの中でPT同時実行レジスターに有効な値を設定してPTGの全てのPTを実行することができる。
【0072】
このとき、4)ACGは、実行制御レジスターのうち、PT同時実行レジスターの値が変わる瞬間、PT同時実行レジスターとHardwiredで連結されたIDLE状態レジスターの値をIDLEからBUSYに変更することができる。
【0073】
このとき、5)全てのAC122は、PTを実行してPCTカーネル関数を行うことができる。
【0074】
このとき、6)前記実行された全てのPTは、実行が終了すると、PTのうち、代表PTがPTG終了レジスターを通じて成功/失敗などの終了状態を報告することができる。代表PTは、事前に状態確認を担当するように設定されたスレッドあるいは最後に完了したスレッドに対応することができる。
【0075】
このとき、7)前記代表PTは、IDLE状態レジスターの値を更新してIDLE状態をBUSYからIDLEに変更することができる。
【0076】
このとき、8)装置ドライバーは、割り込みまたはIDLE状態レジスターのポーリングを通じてPTG実行終了を確認することができる。
【0077】
このとき、9)装置ドライバーは、PTG終了レジスターから実行されたPTGの実行結果を確認することができる。
【0078】
また、並列演算作業オフローディング過程は、前記手続きを繰り返して新しいPTGを実行することができる。
【0079】
図4は、本発明の一実施例に係るホストコアの装置ドライバーとACG間の連続的な並列スレッドグループスケジューリング過程を示した図である。
【0080】
図4を参照すると、多数のPTGを効果的にスケジューリングするために、連続的にPTGをACGにスケジューリングする過程を示したことが分かる。
【0081】
このために、装置ドライバーと代表PTとは、PSR121のキュー管理レジスター(Queue Management Registers)を用いて、スケジューリングを行うことができる。キュー管理レジスターは、キューのベースポインタレジスター、ヘッドオフセットレジスター、テールオフセットレジスターを含むことができる。
【0082】
このとき、装置ドライバーは、スケジューリング制御レジスターを通じて前記代表PTの実行スタートアップルチンコードに並列スレッドグループキュー(PTGQ)を用いて、連続的なPTGを実行させるように政策を設定することができる。
【0083】
先に、1)連続的なPTGの中で一番目のPTGの実行は、図3に開示したような過程に従うが、一番目のPTGの実行終了後、正確には終了結果を報告する方法から新しいPTGを実行する手続きは異に行われることもある。
【0084】
このとき、2)代表PTの実行スタートアップルチンコードは、一番目のPTGの実行終了後、IDLE状態レジスターの値は変更せず(引き続き「BUSY」の状態を維持)、終了レジスターではなく、実行結果キュー(ResultQ)を通じて実行結果を報告することができる。
【0085】
このとき、3)代表PTの実行スタートアップルチンコードは、終了したPTGの結果エントリーをResultQに挿入することができる。
【0086】
このとき、4)代表PTの実行スタートアップルチンコードは、PTGQが空いていない場合、一つのPTGの実行終了時に、PTGQから一つのPTG実行要請エントリーを抽出することができる。
【0087】
このとき、5)代表PTの実行スタートアップルチンコードは、実行制御レジスターを設定して抽出したPTG実行要請エントリーに対応するPTGを実行することができる。
【0088】
このとき、代表PTの実行スタートアップルチンコードは、PTGQがEMPTY状態であるかを確認し、EMPTY状態ではない場合、前記2)~5)の過程をPTGQがEMPTY状態になるまで繰り返すことができる。
【0089】
また、1-1)装置ドライバーは、一番目のPTGの実行を開始した後、直ちに複数のPTG実行要請(Execution Request、ER)をPTGQに挿入し、PTGQ管理レジスターに対する適切な状態監視を通じてPTGQに空いているスロットが発生すると、PTG実行要請をさらに挿入することができる。
【0090】
また、1-2)装置ドライバーは、ResultQ管理レジスターに対する適切な状態監視を通じてResultQをチェックし、できるだけ早くPTGの結果エントリーをキューから抽出して後続の処理を行うことができる。
【0091】
このとき、AC122は、スレッドスイチングロジッグを用いて、PTGのPTの総個数がACGの総HTの個数よりも大きい場合には、メモリーアクセスなどの原因でしばらく停止された(stall)並列スレッドのコンテキストブロック(Parallel Thread Context Block、PTCB)をスクラッチメモリー(Scratchpad Memory、SM)123でスイチング(In/Out)することができる。
【0092】
このとき、代表PTの実行スタートアップルチンコードは、PTGQにこれ以上行うPTG実行要請エントリーがないか、既に設定された割合以下に落ちると、スケジューリング制御レジスターの設定有無によって装置ドライバーが実行されるホストコア110に割り込みを伝達することができる。
【0093】
前記割り込みを受信したホストコア110の装置ドライバーは、追加的なPTG実行要請エントリーをPTGQに挿入することができる。
【0094】
このとき、代表PTの実行スタートアップルチンコードは、ResultQがFullであるか、一定の比率以上であるとき、ホストコア110に割り込みを伝達することができる。
【0095】
このとき、前記割り込みを受信したホストコア110の装置ドライバーは、PTG実行結果確認を含んだ後続の処理を直ちに行うことができる。
【0096】
図5は、本発明の一実施例に係るホストコアの装置ドライバーとACG間の優先順位が適用された多数の並列スレッドグループ実行過程を示した図である。
【0097】
図5を参照すると、ACG120ごとに多数の優先順位のPTGQに基盤したPTGスケジューリング過程を示したことが分かる。
【0098】
このとき、優先順位が適用されたPTGスケジューリング過程は、既に設定された優先順位によって他の優先順位のPTGを別途の優先順位キューを通じてスケジューリングすることができる。
【0099】
このとき、優先順位が適用されたPTGスケジューリング過程は、複数のPTGの実行要請を既に設定された優先順位によって前記優先順位に対応するPTGQのいずれか一つに挿入することができる。
【0100】
例えば、既に設定された優先順位は、PCTホストプロセスの優先順位、一つのPCTホストプロセスが実行する多数の並列演算作業間の優先順位などを例として挙げることができる。
【0101】
図5に示された複数のPTGQと一つのResultQは、SM123またはメモリーに構成されることが分かる。
【0102】
優先順位基盤のPTGQは、HW的にlinkを構成して維持することができる。
【0103】
各PTGQの有効エントリー数は、SWがプログラミングする別途のレジスター値によって可変することができる。
【0104】
装置ドライバーと代表PTの実行スタートアップルチンコードは、多数のPTGQ管理レジスターセットを用いて複数のPTGQを運営することができる。
【0105】
また、代表PTの実行スタートアップルチンコードは、PTGスケジューリング制御レジスター121の設定によって多重キューからPTG実行要請を抽出する多様なスケジューリング政策を選択することができる。
【0106】
また、各ACG120は、下位の優先順位のPTGQに存在する実行要請が無限待機状態(starvation)に陷らないように、優先順位のPTGQ別にプログラマブルタイマーを用いて、既に設定された時間の間スケジューリングされていないPTG実行要請を見つけることができる。
【0107】
このとき、各ACG120は、スケジューリングされていないPTG実行要請を見つけると、当該のPTG実行要請を、次上位の優先順位のPTGQの最後実行要請エントリーに移動させる自動PTGQ管理HWを含むことができる。
【0108】
図3に示された一つのPTG実行過程は、カーネルコードデバギングのように、ホストコアとインタラクティブにカーネルを実行する時に用いることができる。
【0109】
図4に示された連続的なPTGスケジューリング過程は、少ないHW費用で高性能を達成するために用いることができる。
【0110】
図6は、本発明の一実施例に係る装置ドライバーと代表PTの実行スタートアップルチン間のPTG実行要請と、実行結果報告パイプライニングを示した図である。
【0111】
図6を参照すると、図4および図5について、装置ドライバーと代表PTの実行スタートアップルチン間の並列スレッドグループ実行要請と、実行結果報告パイプライニングを示したことが分かる。
【0112】
装置ドライバーによってスケジューリング制御レジスターにPTGQを用いるように指定された場合、図4および図5のように、PTGの全ての並列スレッドの実行が完了すると、PTGの指定された代表PTは、実行スタートアップルチンコードを実行し、並列スレグル-ム実行完了情報(図6のPTGxRsltに該当)をResultQのエントリーに保存し、RequltQのキュー管理レジスター値を修正することができる。
【0113】
また、前記代表PTの実行スタートアップルチンコードは、前記PTGQで一つのPT実行要請情報(PTG Execution Reqeust、図6のPTGxERに該当)を読み出し、前記実行制御レジスターに設定することによって、低遅延で後続のPTGを前記ACGにスケジューリングすることができる。
【0114】
ホストコアの装置ドライバーは、PTG実行要請情報をPTGQに連続的に挿入することができる。
【0115】
このとき、加速コアの代表PTは、PTG実行完了情報をResultQに挿入することができる。
【0116】
このとき、加速コアの代表PTは、一つのPTG実行要請情報をPTGQから取り出して低遅延で自分が実行しているACGに後続のPTGを実行することができる。
【0117】
図7は、本発明の一実施例に係る並列演算作業コンテキストを示した図である。
【0118】
図7を参照すると、メモリーに構成されるPCTコンテキスト(Context)を示したことが分かる。PCT Contextは、メモリー上に個別のPCT別に生成されるデータ客体の集合であって、コンテキスト管理情報、ページテーブル、PCTカーネルバイナリー、PCTが用いるデータバッファーなどの客体と、PTGの個別のPT実行に必要な実行状態(Execution States)情報客体が含まれてもよい。前記のように、ACGに並列スレッドグループを実行するためには、装置ドライバーで各並列スレッドグループ別に並列スレッドの実行のための事前準備作業が必要となる。前記ACGのPTGスケジューリングレジスター設定だけで、前記PCTの並列スレッドを実行するため、各並列スレッドの個別のスレッドコンテキストに対応する実行状態(Execution States)情報がメモリーに予め準備されなければならない。
【0119】
実行状態情報は、並列スレッドグループ共通状態(parallel_thread_group_common_state)情報と、当該の並列スレッドグループに含まれる全ての並列スレッドに対する個別の並列スレッド状態(parallel_thread_state)情報を含むことができる。
【0120】
このとき、実行状態情報は、連続的なメモリー空間に割り当てられてもよい。
【0121】
並列スレッドグループ共通状態(parallel_thread_group_common_state)情報は、インデックス空間上で並列スレッドグループのID、並列スレッドグループの大きさ、並列演算作業(インデックス空間)の大きさ、全体並列スレッドグループの個数、カーネル因子情報などを含むことができる。
【0122】
個別の並列スレッド状態(parallel_thread_state)情報は、並列スレッドのローカルID、全域IDなどを含むことができる。
【0123】
このとき、実行状態情報は、各ACのハードウェアスレッド(HT)に一つの並列スレッド(PT)が実行されると、各ハードウェアスレッド(HT)の制御および状態(Control and Status)レジスターにロードされ、保存することができる。以後、PCTカーネルのユーザー関数コードが実行され、PCTカーネルのユーザー関数コードの実行が完了すると、実行スタートアップルチンによるホストコアへの割り込みを発行、またはIDLE状態レジスターのアップデート、または次の並列スレッドグループスケジューリングが実行されてもよい。実際にPCT Contextは、本発明のフローを支援する範囲で多様に用いることができる。
【0124】
図8は、本発明の一実施例に係る並列演算作業オフローディング方法を示した動作フローチャートである。
【0125】
図8を参照すると、本発明の一実施例に係る並列演算作業オフローディング方法は、図3に示されたホストの装置ドライバーとACG間の一つの並列スレッドグループの実行過程を動作フローチャートに示したことが分かる。
【0126】
本発明の一実施例に係る並列演算作業オフローディング方法は、IDLE状態を確認することができる(S210)。
【0127】
すなわち、ステップS210は、ホストコア110の装置ドライバーが任意のACGのIDLE状態レジスターの値を読み出し、前記ACGがIDLE状態であることを確認することができる。
【0128】
また、本発明の一実施例に係る並列演算作業オフローディング方法は、PTG実行を準備することができる(S220)。
【0129】
すなわち、ステップS220は、装置ドライバーが実行制御レジスターの中でPTG識別子、実行に必要なコードおよびデータ構造を指定するレジスターなどに有効な値を設定して前記PTG実行を準備することができる。
【0130】
また、本発明の一実施例に係る並列演算作業オフローディング方法は、PTGを実行することができる(S230)。
【0131】
すなわち、ステップS230は、ACGが実行制御レジスターの中でPT同時実行レジスターの値が変わる瞬間、PT同時実行レジスターとHardwiredで連結されたIDLE状態レジスターの値をIDLEからBUSYに変更することができる。
【0132】
このとき、ステップS230は、全てのAC122がPTを実行してPCTカーネル関数を行うことができる。
【0133】
また、本発明の一実施例に係る並列演算作業オフローディング方法は、PTG実行終了状態を報告することができる(S240)。
【0134】
すなわち、ステップS240は、前記実行された全てのPTは、実行が終了すると、PTの中で事前に設定された代表PTがPTG終了レジスターを通じて成功/失敗などの終了状態を報告することができる。代表PTは、事前に状態確認を担当するように設定されたスレッドあるいは最後に完了したスレッドに対応することができる。
【0135】
このとき、ステップS240は、代表PTがIDLE状態レジスターの値を更新してIDLE状態をBUSYからIDLEに変更することができる。
【0136】
また、本発明の一実施例に係る並列演算作業オフローディング方法は、PTG実行結果を確認することができる(S250)。
【0137】
すなわち、ステップS250は、装置ドライバーが割り込みまたはIDLE状態レジスターのポーリングを通じてPTG実行終了を確認することができる。
【0138】
このとき、ステップS250は、装置ドライバーがPTG終了レジスターから実行されたPTGの実行結果を確認することができる。
【0139】
また、本発明の一実施例に係る並列演算作業オフローディング方法は、前記手続きを繰り返して新しいPTGを実行することができる。
【0140】
図9は、本発明の一実施例に係る多数のPTGに対する並列演算作業オフローディング方法を示した動作フローチャートである。図10は、図9に示されたPTGQにPTG実行要請を挿入するステップの一例を細部的に示した動作フローチャートである。
【0141】
図9を参照すると、本発明の一実施例に係る多数のPTGに対する並列演算作業オフローディング方法は、図5に示されたホストコアの装置ドライバーとACG間の優先順位が適用された多数の並列スレッドグループスケジューリング過程を動作フローチャートに示したことが分かる。
【0142】
本発明の一実施例に係る並列演算作業オフローディング方法は、IDLE状態を確認することができる(S310)。
【0143】
すなわち、ステップS310は、ホストコア110の装置ドライバーが任意のACGのIDLE状態レジスターの値を読み出し、前記ACGがIDLE状態であることを確認することができる。
【0144】
また、本発明の一実施例に係る並列演算作業オフローディング方法は、PTG実行を準備することができる(S320)。
【0145】
すなわち、ステップS320は、装置ドライバーが実行制御レジスターの中でPTG識別子、実行に必要なコードおよびデータ構造を指定するレジスターなどに有効な値を設定して前記PTG実行を準備することができる。
【0146】
また、本発明の一実施例に係る多数のPTGに対する並列演算作業オフローディング方法は、一番目のPTGを実行することができる(S330)。
【0147】
すなわち、ステップS330は、ACGが実行制御レジスターの中でPT同時実行レジスターの値が変わる瞬間、PT同時実行レジスターとHardwiredで連結されたIDLE状態レジスターの値をIDLEからBUSYに変更することができる。
【0148】
このとき、ステップS330は、全てのACらがPTを実行してPCTカーネル関数を行うことができる。
【0149】
また、本発明の一実施例に係る多数のPTGに対する並列演算作業オフローディング方法は、PTGQにPTG実行要請を挿入することができる(S340)。
【0150】
図10を参照すると、ステップ340は、先にPTGのPTを実行することができる(S341)。
【0151】
すなわち、ステップS341は、代表PTの実行スタートアップルチンコードが一番目のPTGの実行終了後、IDLE状態レジスターの値は変更せず(引き続き「BUSY」状態を維持)、後続のPTGのPTを実行することができる。
【0152】
このとき、ステップS341は、AC122がスレッドスイチングロジッグを用いて、PTGの中でPTの総個数がACGに含まれた総HTの個数よりも大きい場合には、メモリーアクセスなどの原因でしばらく停止された(stall)並列スレッドのコンテキストブロック(Parallel Thread Context Block、PTCB)をスクラッチメモリー(Scratchpad Memory、SM)123でスイチング(In/Out)することができる。
【0153】
また、ステップS340は、ResultQに終了したPTG結果エントリーを挿入することができる(S342)。
【0154】
すなわち、ステップS342は、PTGの実行終了後、IDLE状態レジスターの値は変更せず、終了レジスターではなく、実行結果キュー(ResultQ)を通じて実行結果を報告することができる。
【0155】
このとき、ステップS342は、代表PTの実行スタートアップルチンコードが終了したPTGの結果エントリーをResultQに挿入することができる。
【0156】
このとき、ステップS342は、ResultQがFullであるか、一定の比率以上であるとき、ホストコア110に割り込みを伝達することができる。
【0157】
また、ステップS340は、PTGQが空いている(EMPTY)状態であるかを確認することができる(S343)。
【0158】
すなわち、ステップS343は、PTGQが空いていない場合、一つのPTGの実行終了時に、PTGQから一つのPTG実行要請エントリーを抽出および挿入することができ(S344)、PTGQが空いている場合、PTG実行手続きを終了してPTG実行結果を報告することができる(S350)。
【0159】
また、ステップS340は、PTGQでPTG実行要請を抽出および挿入することができる(S344)。
【0160】
すなわち、このとき、ステップS344は、キュー管理レジスターが、PTGQが空いていない場合、一つのPTGの実行終了時に、PTGQから一つのPTG実行要請エントリーを抽出することができる。
【0161】
このとき、ステップS344は、代表PTの実行スタートアップルチンコードがPTG実行要請エントリーを抽出することができる。
【0162】
このとき、ステップS344は、PTG実行要請を既に設定された優先順位によって前記優先順位に対応するPTGQのいずれか一つから抽出することができる。
【0163】
このとき、ステップS344は、ホストコア110が追加的なPTG実行要請エントリーをPTGQに挿入することができる。
【0164】
このとき、ステップS344は、装置ドライバーが複数のPTG実行要請(Execution Request、ER)をPTGQに挿入し、適切な状態監視を通じてPTGQに空いているスロットが発生すると、PTG実行要請をさらに挿入することができる。
【0165】
また、ステップS344は、各ACG120が下位の優先順位のPTGQに存在するPTG実行要請が無限待機状態(starvation)に陷らないように、優先順位のPTGQ別にプログラマブルタイマーを用いて、既に設定された時間の間スケジューリングされていないPTG実行要請を見つけることができる。
【0166】
このとき、ステップS344は、各ACG120が、スケジューリングされていないPTG実行要請を見つけると、当該のPTG実行要請を、次上位の優先順位のPTGQの最後実行要請エントリーに移動させることができる。
【0167】
このとき、ステップS344は、ACG120が並列スレッドグループキューにこれ以上行う実行要請エントリーがないか、PTGが既に設定された割合以下に落ちると、スケジューリング制御レジスターの設定有無によって装置ドライバーが実行されるホストコア110に割り込みを伝達することができる。
【0168】
また、ステップS345は抽出された後続のPTGスケジューリングを行うことができる。
【0169】
すなわち、ステップS345は、事前にメモリーに保存された並列演算作業コンテキストに含まれた並列スレッドグループ実行状態情報を用いて、PTGをスケジューリングすることができる。
【0170】
このとき、実行状態情報は、前記並列スレッドグループを識別するための共通状態情報、および前記並列スレッドグループが含む並列スレッドを識別するための個別の並列スレッド状態情報を含むことができる。
【0171】
また、ステップS345は、実行制御レジスターを通じてPTGを実行することができる。
【0172】
このとき、ステップS345は、前記実行スタートアップルチンコードがスケジューリングしたPTGのPTを実行することができる。
【0173】
このとき、ステップS345は、PTGQから代表PTの実行スタートアップルチンが抽出したPTG実行要請エントリーに対応するPTGを実行することができる。
【0174】
このとき、ステップS345は、スケジューリングされたPTGがPTを実行することができる。
【0175】
また、本発明の一実施例に係る多数のPTGに対する並列演算作業オフローディング方法は、PTG実行結果を確認することができる(S350)。
【0176】
このとき、ステップS350は、前記実行結果キューを確認して前記PTGの実行終了状態を確認することができる。
【0177】
このとき、ステップS350は、装置ドライバーが適切な状態監視を通じてResultQをチェックし、できるだけ早くPTGの実行結果エントリーをキューから抽出して後続の処理を行うことができる。
【0178】
また、本発明の一実施例に係る多数のPTGに対する並列演算作業オフローディング方法は、PCTで未実行のPTGが存在するかを確認することができる(S360)。
【0179】
すなわち、ステップS360は、PCTで未実行のPTGが存在するかを確認し、未実行のPTGが存在する場合、未実行のPTGに対してPTGQにPTG実行要請を挿入し(S340)、PGT実行結果を確認(S350)するステップをPCTに未実行のPTGが存在しないまで前記実行終了状態に対応する並列スレッドグループの並列スレッドの実行を繰り返すことができる。
【0180】
これを通じて、本発明は、異種加速コアグループの同時実行ロジッグと個別の並列演算スレッドを実行させる実行スタートアップルチンソフトウェアを用いて、一つのPTGの終了後に他のPTGを連続的に実行させるスケジューリングを行うことができる。
【0181】
前記実行スタートアップルチンソフトウェアは、PCT Host Processが装置ドライバーに提供する並列演算カーネルをコンパイルする時に並列演算カーネルの一部分として作成されてもよい。したがって、コンパイルタイムに追加的なスケジューリングアルゴリズムを、この実行スタートアップルチンコードとして追加することができ、これを通じて多様なワークロードに対応するスケジューリング柔軟性を確保することができる。
【0182】
図11は、本発明の一実施例に係るコンピューターシステムを示した図である。
【0183】
図11を参照すると、本発明の一実施例に係る並列演算作業オフローディング装置は、コンピューターで読み出し可能な記録媒体のようなコンピューターシステム1100で具現することができる。図11に示されたように、コンピュータ・システム1100は、バス1120を通じて互いに通信する一つ以上のプロセッサ1110、メモリー1130、ユーザーインターフェース入力装置1140、ユーザーインターフェース出力装置1150およびストレージ1160を含むことができる。また、コンピュータ・システム1100は、ネットワーク1180に連結されるネットワークインターフェース1170をさらに含むことができる。プロセッサ1110は、中央処理装置またはメモリー1130やストレージ1160に保存されたプロセッシングインストラクションを実行する半導体装置であってもよい。メモリー1130およびストレージ1160は、多様な形態の揮発性または非揮発性保存媒体であってもよい。例えば、メモリーは、ROM1131やRAM1132を含むことができる。
【0184】
本発明の一実施例に係る並列演算作業オフローディング装置は、一つ以上のプロセッサ1110と、前記一つ以上のプロセッサ1110によって実行される少なくとも一つ以上のプログラムを保存するメモリー1130とを含み、前記少なくとも一つ以上のプログラムは、複数の並列スレッドグループの実行要請を少なくとも一つ以上の並列スレッドグループキューに挿入し、前記実行要求は既に設定された優先順位が存在する場合、前記既に設定された優先順位によって前記優先順位に対応する前記少なくとも一つ以上の並列スレッドグループキューに挿入される、前記優先順位によって並列スレッドグループキューから抽出した並列スレッドグループ実行要請エントリーを用いて並列スレッドグループの並列スレッドを実行し、前記並列スレッドの実行が終了すると、実行結果を実行結果キューに挿入し、前記実行結果キューで報告される前記実行結果を確認して前記並列スレッドグループの実行終了状態を確認し、前記実行終了状態に対応する並列スレッドグループの並列スレッドを実行することができる。
【0185】
このとき、前記一つ以上のプロセッサ1110は、一つ以上のホストコア110、一つ以上の加速コア120、アクセラレータメモリー管理ユニット130およびメモリーコントローラー140を含むことができる。
【0186】
このとき、前記少なくとも一つ以上のプログラムは、前記優先順位に対応する並列スレッドグループキューでプログラマブルタイマーを用いて、既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を見つけることができる。
【0187】
このとき、前記少なくとも一つ以上のプログラムは、前記既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を見つけた場合、前記既に設定された時間の間スケジューリングされていない並列スレッドグループ実行要請を、次上位の優先順位の並列スレッドグループキューの最後実行要請エントリーに移動させることができる。
【0188】
このとき、前記少なくとも一つ以上のプログラムは、事前にメモリーに保存された並列演算作業コンテキストに含まれた並列スレッドグループ実行状態情報を用いて、前記優先順位によって実行手順をスケジューリングすることができる。
【0189】
このとき、前記実行状態情報は、前記並列スレッドグループを識別するための共通状態情報、および前記並列スレッドグループが含む並列スレッドを識別するための個別の並列スレッド状態情報を含むことができる。
【0190】
このとき、前記少なくとも一つ以上のプログラムは、スレッドスイチングロジッグを用いて、前記並列スレッドグループのうち、並列スレッドの総個数が加速コアグループに含まれたハードウェアスレッドの個数よりも大きい場合、停止された並列スレッドのコンテキストブロックをスクラッチメモリーでスイチングすることができる。
【0191】
このとき、前記少なくとも一つ以上のプログラムは、前記並列スレッドグループに含まれる並列スレッドの中で事前に設定された代表並列スレッドが、前記並列スレッドグループ実行結果を前記実行結果キューに挿入することができる。
【0192】
このとき、前記少なくとも一つ以上のプログラムは、複数の並列スレッドグループのいずれか一つの一番目の並列スレッドグループをいずれか一つの加速コアグループに実行するステップを含むことができる。
【0193】
このとき、前記少なくとも一つ以上のプログラムは、前記加速コアグループのIDLE状態レジスターの値を読み出し、前記加速コアグループがIDLE状態であることを確認すると、前記いずれか一つの一番目の並列スレッドグループに含まれた全ての並列スレッドを実行することができる。
【0194】
このとき、前記少なくとも一つ以上のプログラムは、前記いずれか一つの一番目の並列スレッドグループに含まれた全ての並列スレッドが実行されると、前記IDLE状態レジスターの値をIDLEからBUSYに変更し、前記全ての並列スレッドの実行が終了すると、前記IDLE状態レジスターの値をBUSYからIDLEに変更することができる。
【0195】
以上のように、本発明の一実施例に係る並列演算作業オフローディング装置および方法は、前記のように説明された実施例の構成と方法が限定的に適用されるものではなく、前記実施例は多様な変形が行われるように各実施例の全部または一部が選択的に組合されて構成されてもよい。
【符号の説明】
【0196】
11:並列演算カーネル
12:並列スレッド
13:並列スレッドグループ
110:ホストコア
120:加速コアグループ
130:アクセラレータメモリー管理ユニット
140:メモリーコントローラー
1100:コンピュータ・システム
1110:プロセッサ
1120:バス
1130:メモリー
1131:ロム
1132:ラム
1140:ユーザーインターフェース入力装置
1150:ユーザーインターフェース出力装置
1160:ストレージ
1170:ネットワークインターフェース
1180:ネットワーク
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11