(57)【要約】      （修正有）【課題】OpenＣＬカーネルを処理する方法を提供する。【解決手段】方法は、OpenＣＬ（open  computing  language）カーネルを実行するための作業グループを、下位階層のコントロールコア（control  core）及びプロセシングコア（processing  core）に割り当てるコントロールコアグループ及び少なくとも１つのプロセシングコアを含み、コントロールコアグループによって割り当てられた作業グループを処理し、作業グループの処理結果を出力する、プロセシングコアグループを含む。コントロールコアグループに含まれた複数個のコントロールコアは、コントロールコアにより作業グループが割り当てられるプロセシングコアの数により、階層的に分類される。【選択図】図３
2018106709.tif 000002
【特許請求の範囲】
【請求項１】
複数個のコアを含むコンピューティング装置において、
下位階層のコントロールコアを含み、OpenＣＬ（open  computing  language）カーネルを実行するための作業グループを、前記下位階層のコントロールコア及びプロセシングコアに割り当てるコントロールコアグループと、
少なくとも１つの前記プロセシングコアを含み、前記コントロールコアグループによって割り当てられた前記作業グループを処理し、前記作業グループの処理結果を出力する、プロセシングコアグループと、を含み、
前記コントロールコアグループに含まれた複数個のコントロールコアは、前記コントロールコアにより前記作業グループが割り当てられる前記プロセシングコアの数によって階層的に分類される、
コンピューティング装置。
【請求項２】
前記コントロールコアグループは、
前記OpenＣＬカーネルの実行情報が受信されることにより、前記作業グループを前記下位階層のコントロールコアに割り当て、前記割り当てられた作業グループについての情報を前記下位階層のコントロールコアに送信する最上位コントロールコアと、
前記コントロールコアグループの上位階層のコントロールコアによって割り当てられた作業グループについての情報を受信し、前記プロセシングコアに前記作業グループを割り当てる、少なくとも１つの最下位コントロールコアを含んだ最下位コントロールコアグループと、を含むことを特徴とする請求項１に記載のコンピューティング装置。
【請求項３】
前記コントロールコアグループは、
前記下位階層のコントロールコア及び前記プロセシングコアの前記作業グループの処理結果に従って、前記コントロールコアグループの他の下位階層のコントロールコア、及び他のプロセシングコアに割り当てられた作業グループを再割り当てすることを特徴とする請求項２に記載のコンピューティング装置。
【請求項４】
前記コントロールコアグループは、
前記最上位コントロールコアによって割り当てられた作業グループに係わる情報を受信し、前記最下位コントロールコアグループに前記作業グループを割り当てる、複数個の中間コントロールコアを含んだ中間コントロールコアグループをさらに含み、
前記中間コントロールコアは、前記中間コントロールコアにより前記作業グループが割り当てられる前記プロセシングコアの数によって階層的に分類され、前記コントロールコアグループの上位階層の中間コントロールコアは、下位階層の中間コントロールコアに前記作業グループを割り当てることを特徴とする請求項２に記載のコンピューティング装置。
【請求項５】
前記最上位コントロールコアは、前記OpenＣＬカーネルが実行されることにより、ホストプロセッサによって生成された前記OpenＣＬカーネルの実行情報を受信することを特徴とする請求項２に記載のコンピューティング装置。
【請求項６】
前記最上位コントロールコアは、
前記OpenＣＬカーネルを実行するための作業グループを処理しているとき、前記ホストプロセッサから新たなOpenＣＬカーネルの実行情報が受信されることにより、前記プロセシングコアグループに割り当てられた前記作業グループを再割り当てすることを特徴とする請求項５に記載のコンピューティング装置。
【請求項７】
前記ホストプロセッサは、
前記コントロールコアグループによる前記プロセシングコアグループへの前記作業グループの割り当てが完了すると、前記OpenＣＬカーネルの実行を中断し、割り当て結果を収集して出力することを特徴とする請求項５に記載のコンピューティング装置。
【請求項８】
前記プロセシングコアは、
少なくとも１つのプロセシングエレメントを含み、
前記作業グループに含まれた作業アイテムの数より、前記プロセシングエレメントの数が少ないとき、前記プロセシングエレメントが前記作業アイテムを直列化し、順次に実行するように、前記OpenＣＬカーネルを変換することを特徴とする請求項１に記載のコンピューティング装置。
【請求項９】
前記作業グループについての情報を保存するバッファをさらに含むことを特徴とする請求項１に記載のコンピューティング装置。
【請求項１０】
前記作業グループについての情報は、
前記下位階層のコントロールコア及び前記プロセシングコアに割り当てられた作業グループの数と、前記割り当てられた作業グループのＩＤとのうち少なくとも一つを含むことを特徴とする請求項９に記載のコンピューティング装置。
【請求項１１】
下位階層のコントロールコアを含むコントロールコアグループにより、OpenＣＬ（open  computing  language）カーネルを実行するための作業グループを、前記下位階層のコントロールコア及びプロセシングコアに割り当てる段階と、
少なくとも１つの前記プロセシングコアが含まれたプロセシングコアグループにより、前記割り当てられた前記作業グループを処理する段階と、
前記プロセシングコアグループにより、前記作業グループの処理結果を出力する段階と、を含み、
前記コントロールコアグループに含まれた複数個のコントロールコアは、前記コントロールコアにより前記作業グループが割り当てられる前記プロセシングコアの数によって階層的に分類される、
OpenＣＬカーネルを処理する方法。
【請求項１２】
前記コントロールコアグループは、
前記OpenＣＬカーネルの実行情報が受信されることにより、前記作業グループを前記下位階層のコントロールコアに割り当て、前記割り当てられた作業グループについての情報を前記下位階層のコントロールコアに送信する最上位コントロールコアと、
前記コントロールコアグループの上位階層のコントロールコアによって割り当てられた作業グループについての情報を受信し、前記プロセシングコアに前記作業グループを割り当てる、少なくとも１つの最下位コントロールコアを含んだ最下位コントロールコアグループと、を含むことを特徴とする請求項１１に記載のOpenＣＬカーネルを処理する方法。
【請求項１３】
前記コントロールコアグループにより、前記出力された前記作業グループの処理結果に従って、前記コントロールコアグループの下位階層の他のコントロールコア、及び他のプロセシングコアに割り当てられた作業グループを再割り当てする段階をさらに含むことを特徴とする請求項１２に記載のOpenＣＬカーネルを処理する方法。
【請求項１４】
前記コントロールコアグループは、
前記最上位コントロールコアによって割り当てられた作業グループに係わる情報を受信し、前記最下位コントロールコアグループに前記作業グループを割り当てる、複数個の中間コントロールコアを含んだ中間コントロールコアグループをさらに含み、
前記中間コントロールコアが、前記中間コントロールコアにより前記作業グループが割り当てられる前記プロセシングコアの数によって階層的に分類されるとき、
前記作業グループを割り当てる段階は、
前記コントロールコアグループの上位階層の中間コントロールコアにより、前記コントロールコアグループの下位階層の中間コントロールコアに前記作業グループを割り当てる段階を含むことを特徴とする請求項１２に記載のOpenＣＬカーネルを処理する方法。
【請求項１５】
前記OpenＣＬカーネルが実行されることにより、ホストプロセッサによって生成された前記OpenＣＬカーネルの実行情報を、前記最上位コントロールコアにより受信する段階をさらに含むことを特徴とする請求項１２に記載のOpenＣＬカーネルを処理する方法。
【請求項１６】
前記OpenＣＬカーネルを実行するための作業グループを処理しているとき、前記ホストプロセッサから新たなOpenＣＬカーネルの実行情報が受信されることにより、前記最上位コントロールコアにより、前記プロセシングコアグループに割り当てられた前記作業グループを再割り当てする段階をさらに含むことを特徴とする請求項１５に記載のOpenＣＬカーネルを処理する方法。
【請求項１７】
前記作業グループを処理する段階は、
前記プロセシングコアが少なくとも１つのプロセシングエレメントを含み、前記作業グループに含まれた作業アイテムの数より前記プロセシングエレメントの数が少ないとき、前記プロセシングエレメントが前記作業アイテムを直列化し、順次に実行するように前記OpenＣＬカーネルを変換する段階をさらに含むことを特徴とする請求項１１に記載のOpenＣＬカーネルを処理する方法。
【請求項１８】
前記作業グループについての情報をバッファに保存する段階を含むことを特徴とする請求項１１に記載のOpenＣＬカーネルを処理する方法。
【請求項１９】
前記作業グループについての情報は、
前記下位階層のコントロールコア及び前記プロセシングコアに割り当てられた作業グループの数と、前記割り当てられた作業グループのＩＤとのうち少なくとも一つを含むことを特徴とする請求項１８に記載のOpenＣＬカーネルを処理する方法。
【請求項２０】
請求項１１ないし１９のうちいずれか１項に記載の方法をコンピュータで実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、OpenＣＬカーネルを処理する方法、及びそれを遂行するコンピューティング装置に関する。
【背景技術】
【０００２】
コンピューティング装置は、アプリケーションの性能条件を満足するために、単一集積回路に、さまざまなコアまたはプロセッサを統合する形態で発展している。例えば、マルチコアプロセッサ（multi  core  processor）は、演算機能を有した２個以上のコアが、１つのプロセッサに集積されたものを意味する。また、さらに多数（一般的に、１６個以上）のコアが１つのプロセッサに集積されたメニーコアプロセッサ（many  core  processor）も開発されている。マルチコアプロセッサとメニーコアプロセッサは、タブレットＰＣ（personal  computer）、携帯電話、ＰＤＡ（personal  digital  assistant）、ラップトップ、メディアプレーヤ、ＧＰＳ（global  position  system）装置、電子書籍端末機、ＭＰ３プレーヤ、デジタルカメラを含んだ携帯機器やＴＶ（television）に搭載されるマルチメディアチップを含んだ埋め込み装置に搭載される。
【０００３】
一方、OpenＣＬ（open  computing  language）は、複数のプラットフォームで動作するプログラムを作成可能にする。言い替えれば、OpenＣＬは、ＧＰＵ（graphics  processing  unit）だけではなく、汎用マルチコアＣＰＵ（central  processing  unit）、ＦＰＧＡ（field-programmable  gate  array）などの複数のプラットフォームにおいて、プログラム動作を可能にする開放型汎用並列コンピューティングフレームワークであり、グラフィック処理装置（ＧＰＵ）の力量を、グラフィック処理以外の領域（例えば、ＧＰＧＰＵ（general-purpose  computing  on  graphics  processing  unit））に拡張させる。それにより、複数個のコアが含まれたコンピューティング装置がOpenＣＬプログラムを効率的に処理するための多様な試みが進められている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、階層的に分類されたコントロールコアグループが、OpenＣＬカーネル（kernel）を実行するための作業グループをプロセシングコアグループに割り当てる、OpenＣＬカーネルを処理する方法、及びそれを遂行するコンピューティング装置を提供することである。本実施形態がなそうとする技術的課題は、前述のような技術的課題に限定されるものではなく、以下の実施形態から、他の技術的課題が類推されもする。
【課題を解決するための手段】
【０００５】
一側面によれば、OpenＣＬカーネルを実行するための作業グループを、下位階層のコントロールコア（control  core）及びプロセシングコア（processing  core）に割り当てるコントロールコアグループ；及び少なくとも１つの前記プロセシングコアを含み、前記コントロールコアグループによって割り当てられた前記作業グループを処理し、前記作業グループの処理結果を出力する、プロセシングコアグループ；を含み、前記コントロールコアグループに含まれた複数個のコントロールコアは、前記コントロールコアにより前記作業グループが割り当てられる前記プロセシングコアの数により、階層的に分類される。
【０００６】
他の側面によれば、OpenＣＬカーネルを処理する方法は、コントロールコアグループにより、OpenＣＬカーネルを実行するための作業グループを、下位階層のコントロールコア及びプロセシングコアに割り当てる段階；少なくとも１つの前記プロセシングコアが含まれたプロセシングコアグループにより、前記割り当てられた前記作業グループを処理する段階；及び前記プロセシングコアグループにより、前記作業グループの処理結果を出力する段階；を含み、前記コントロールコアグループに含まれた複数個のコントロールコアは、前記コントロールコアにより前記作業グループが割り当てられる前記プロセシングコアの数により、階層的に分類される。
【０００７】
さらに他の側面によれば、前記方法をコンピュータで実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体を提供する。
【発明の効果】
【０００８】
本発明によれば、プロセシングコアに作業グループを割り当てるコントロールコアが階層的に分類されているために、作業グループを効率的に分配することができる。
【図面の簡単な説明】
【０００９】
【図１】OpenＣＬプラットフォームについて説明するための図である。
【図２】一実施形態による、コンピューティング装置の構成を示したブロック図である。
【図３】他の一実施形態による、コンピューティング装置の構成を示したブロック図である。
【図４】一実施形態によって、コントロールコアによって作業グループが割り当てられたプロセシングコアの数について説明するための図である。
【図５】一実施形態による、OpenＣＬカーネルを実行するための作業グループを動的に割り当てる方法について説明するための図である。
【図６】一実施形態による、コンピューティング装置の構造について説明するための図である。
【図７】他の一実施形態による、最下位コントロールコア及びプロセシングコアについて説明するための図である。
【図８】一実施形態による、プロセシングコアで実行されるOpenＣＬカーネルコードである。
【図９】他の一実施形態によるコンピューティング装置について説明するための図である。
【図１０】一実施形態によるバッファについて説明するための図である。
【図１１】一実施形態による、バッファが追加された場合、プロセシングコアで実行されるOpenＣＬカーネルコードである。
【図１２】他の一実施形態による、バッファが追加された場合、OpenＣＬ作業グループを実行するOpenＣＬカーネルコードである。
【図１３】一実施形態によるコンピューティング装置の性能を検証するための実験環境を示した図である。
【図１４】一実施形態によるコンピューティング装置の性能を検証するための実験環境を示した図である。
【図１５】一実施形態によるコンピューティング装置の性能の検証結果について説明するための図である。
【図１６】一実施形態により、OpenＣＬカーネルを処理する方法を図示したフローチャートである。
【図１７】一実施形態により、OpenＣＬカーネルを処理する方法を図示した詳細フローチャートである。
【発明を実施するための形態】
【００１０】
本実施形態で使用される用語は、本実施形態での機能を考慮しながら、可能な限り、現在汎用される一般的な用語を選択したが、それは、当技術分野の当業者の意図、または判例、新技術の出現などによっても異なる。また、特定の場合、任意に選定された用語もあり、その場合、当該実施形態の説明部分において、詳細にその意味を記載する。従って、本実施形態で使用される用語は、単純な用語の名称ではない、その用語が有する意味と、本実施形態の全般にわたった内容とを基に定義されなければならない。
【００１１】
実施形態に係わる説明において、ある部分が他の部分と結合されているとするとき、それは、直接に結合されている場合だけではなく、その中間に、他の構成要素を挟んで電気的に結合されている場合も含む。また、ある部分がある構成要素を含むとするとき、それは、特別に反対となる記載がない限り、他の構成要素を除くものではなく、他の構成要素をさらに含むということを意味する。また、実施形態に記載された「…部」、「…モジュール」の用語は、少なくとも１つの機能や動作を処理する単位を意味し、それは、ハードウェアまたはソフトウェアによっても具現され、ハードウェアとソフトウェアとの結合によっても具現される。
【００１２】
本実施形態で使用される「構成される」または「含む」というような用語は、必ずしも、明細書上に記載されたさまざまな構成要素、またはさまざまな段階をいずれも含むと解釈されるものではなく、そのうち一部構成要素または一部段階が含まれないこともあり、または、追加的な構成要素または段階をさらに含んでもよいと解釈されなければならない。
【００１３】
下記実施形態に係わる説明は、権利範囲を限定すると解釈されるものではなく、当該技術分野の当業者が容易に類推することができることは、実施形態の権利範囲に属すると解釈されなければならないのである。以下、添付された図面を参照しつつ、ただ例示のための実施形態について詳細に説明する。
【００１４】
図１は、OpenＣＬ（open  computing  language）プラットフォームについて説明するための図である。
【００１５】
OpenＣＬは、互いに異なる形態のコンピューティングデバイスが同時に動作するように具現することができるプログラミング言語中の一つである。従って、OpenＣＬによって作成されたプログラムは、複数のプラットフォームで同時に動作することができる。
【００１６】
図１を参照すれば、OpenＣＬプラットフォーム１００は、ホストプロセッサ（host  processor）１１０と、少なくとも１つのコンピューティングデバイス（ＣＤ：computing  device）１２０ないし１４０を含んでもよい。
【００１７】
ホストプロセッサ１１０は、ホストプログラムが実行されるプロセッサであり、カーネル（kernel）を実行するための作業空間（work  space）を定義することができる。ここで、該作業空間はまた、作業グループ（work  group）に分割され、該作業グループは、複数個の作業アイテム（work  item）を含み得る。ここで、該作業アイテムは、作業空間の各ポイントに該当し、作業の最小単位になる。例えば、ホストプロセッサ１１０は、汎用ＣＰＵ（central  processing  unit）でもあるが、それに限定されるものではない。
【００１８】
コンピューティングデバイス１２０ないし１４０は、少なくとも１つのコンピュートユニット（ＣＵ：compute  unit）１２１ないし１２２を含み得る。また、コンピュートユニット１２１ないし１２２は、少なくとも１つのプロセシングエレメント（ＰＥ：processing  element）１０ないし４０を含み得る。ここで、コンピュートユニット１２１ないし１２２は、作業グループを処理する単位にもなり、プロセシングエレメント１０ないし４０は、作業アイテムを処理する単位にもなる。例えば、コンピュートユニット１２１ないし１２２は、ホストプロセッサ１１０から受信された１つの作業グループを処理することができ、プロセシングエレメント１０ないし４０は、作業グループに含まれた作業アイテムそれぞれを処理することができる。従って、該作業グループに含まれた作業アイテムは、プロセシングエレメント１０ないし４０によって並列的に処理される。一方、コンピューティングデバイス１２０ないし１４０は、メニーコアプロセッサ、マルチコアプロセッサでもあるが、少なくとも１つのコアを有するプロセッサであるならば、それらに限定されるものではない。
【００１９】
一方、OpenＣＬプログラムは、１つのホストプログラムと、少なくとも１つのカーネルとを含み得る。該ホストプログラムは、ホストプロセッサ１１０によって実行され、ホストプロセッサ１１０から、コマンド（command）を介して、コンピューティングデバイス１２０ないし１４０に計算を指示したり、コンピューティングデバイス１２０ないし１４０に装着されたメモリを管理したりすることができる。ここで、該カーネルは、コンピューティングデバイス１２０ないし１４０で実行されるプログラムを意味し、OpenＣＬカーネルまたはカーネルコードによっても表現される。
【００２０】
もし複数個のコアが含まれたコンピューティング装置においてカーネルが実行される場合、該コンピューティング装置は、コンピューティングデバイスと対応し、各コアは、コンピュートユニット１２１ないし１２２と対応する。言い替えれば、該コンピューティング装置のコアは、作業グループを割り当てられて処理することができ、コアに含まれたプロセシングエレメント１０ないし４０は、作業グループに含まれた各作業アイテムを処理することができる。
【００２１】
一方、コンピューティング装置１００は、ホストプロセッサ１１０から作業グループを受信することができる。
【００２２】
具体的には、ホストプロセッサ１１０は、各コアによって処理される作業グループの処理結果により、作業グループを各コアに動的に割り当てることができる。かような場合、ホストプロセッサ１１０は、作業グループを動的に割り当てる作業分配マネージャを含んでもよい。
【００２３】
しかし、１つの作業分配マネージャが、複数個のコアに作業グループを動的に割り当てる場合、コアの数により、作業分配マネージャが遂行しなければならない分配作業の量が増加し、全体コンピューティング装置の性能が低下してしまう。また、作業分配マネージャが、複数個のコアに作業グループを静的に割り当てる場合、各作業グループの処理時間が異なり、全体コンピューティング装置の作業効率が低下してしまう。併せて、ホストプロセッサ１１０に作業分配マネージャが含まれていると、ホストプロセッサ１１０の負担が増大してしまう。
【００２４】
一方、コンピューティング装置に含まれた１つのコアが作業分配マネージャである場合、当該コアは、コンピュートユニット１２１ないし１２２に活用されない。従って、複数個のコアが含まれたコンピューティング装置においてOpenＣＬカーネルが実行される場合に作業グループを効率的に割り当てることができる方法が要求される。
【００２５】
図２は、一実施形態による、コンピューティング装置の構成を示したブロック図である。
【００２６】
一実施形態によるコンピューティング装置２００は、複数個のコアを含み、複数個のコアは、コントロールコアグループ２１０とプロセシングコアグループ２２０とに分類される。図２に図示された構成要素以外に、他の汎用的な構成要素がさらに含まれてもよいということは、関連技術分野で当業者であるならば、理解することができるであろう。
【００２７】
一方、図１の構成と比較すれば、図２のコンピューティング装置２００は、図１のコンピューティングデバイス１２０ないし１４０と対応する。
【００２８】
コントロールコアグループ２１０は、OpenＣＬカーネルを実行するための作業グループを、下位階層のコントロールコア及びプロセシングコアに割り当てる、コントロールコアの集合を意味する。ここで、該コントロールコアの仕様は、プロセシングコアの仕様とも同一であるが、作業グループを割り当てる機能を遂行することができる仕様であるならば、それに限定されるものではない。
【００２９】
プロセシングコアグループ２２０は、コントロールコアグループ２１０によって割り当てられた作業グループを処理し、作業グループの処理結果を出力する、プロセシングコアの集合を意味する。ここで、各プロセシングコアは、少なくとも１つのプロセシングエレメントを含み得る。例えば、該プロセシングコアは、メニーコアプロセッサの各コアとも対応するが、それに限定されるものではない。
【００３０】
ここで、コントロールコアグループ２１０に含まれた複数個のコントロールコアはまた、コントロールコアによって作業グループが割り当てられるプロセシングコアの数により、階層的に分類される。コントロールコアグループ２１０が階層的に分類される例示は、図３を介して説明する。
【００３１】
図３は、他の一実施形態による、コンピューティング装置の構成を示したブロック図である。図３を参照すれば、コンピューティング装置３００は、コントロールコアグループ３２０とプロセシングコアグループ３６０とを含み得る。ここで、コントロールコアグループ３２０は、１つの最上位（root；ルート）コントロールコア３３０と最下位（leaf；リーフ）コントロールコアグループ３５０とを含み得る。また、コンピューティング装置３００は、コントロールコアグループ３２０の階層構造により、中間コントロールコアグループ３４０をさらに含んでもよい。一方、図３のプロセシングコアグループ３６０は、図２のプロセシングコアグループ２２０と対応するので、詳細な説明は省略する。
【００３２】
最上位コントロールコア３３０は、OpenＣＬカーネルの実行情報が受信されることにより、作業グループを、下位階層のコントロールコアに割り当てることができる。図３としては、最上位コントロールコア３３０の下位階層のコントロールコアを、中間コントロールコアグループ３４０で表示したが、最上位コントロールコア３３０の下位階層のコントロールコアは、コントロールコアグループ３２０の階層構造により、中間コントロールコアグループ３４０及び最下位コントロールコアグループ３５０のうち少なくとも一つにもなるということは、当該技術分野の通常の技術者であるならば、理解することができるであろう。
【００３３】
一方、最上位コントロールコア３３０は、ホストプロセッサ３１０から、OpenＣＬカーネルの実行情報を受信することができる。具体的には、ホストプロセッサ３１０は、OpenＣＬカーネルが実行されることにより、OpenＣＬカーネルの実行情報を生成し、最上位コントロールコア３３０に送信することができる。ここで、OpenＣＬカーネルの実行情報は、OpenＣＬカーネルが実行されるための全体作業グループの数及びOpenＣＬカーネルが含まれたアプリケーション情報のうち少なくとも一つを含み得る。
【００３４】
最下位コントロールコアグループ３５０は、上位階層のコントロールコアによって割り当てられた作業グループについての情報を受信し、プロセシングコアに作業グループを割り当てる、複数個の最下位コントロールコアを含んでもよい。図３としては、最下位コントロールコアグループ３５０の上位階層のコントロールコアを、中間コントロールコアグループ３４０と表示したが、最下位コントロールコアの上位階層のコントロールコアは、コントロールコアグループ３２０の階層構造により、最上位コントロールコア３３０及び中間コントロールコアグループ３４０のうち少なくとも一つにもなるということは、当該技術分野の当業者であるならば、理解することができるであろう。
【００３５】
中間コントロールコアグループ３４０は、最上位コントロールコア３３０によって割り当てられた作業グループに係わる情報を受信し、最下位コントロールコアグループ３５０に作業グループを割り当てる、複数個の中間コントロールコアを含んでもよい。また、中間コントロールコアグループ３４０は、さまざまな階層に分類される。図３を参照すれば、中間コントロールコアもまた、中間コントロールコアによって作業グループが割り当てられるプロセシングコアの数により、階層的に分類される。かような場合、上位階層の中間コントロールコア３４１は、下位階層の中間コントロールコア３４２に作業グループを割り当てることができる。
【００３６】
図４は、一実施形態によって、コントロールコアによって作業グループが割り当てられるプロセシングコアの数について説明するための図である。
【００３７】
一実施形態によれば、コントロールコアグループ２１０に含まれたコントロールコアは、コントロールコアによって作業グループが割り当てられるプロセシングコアの数により、階層的に分類される。
【００３８】
図４は、８ｘ８プロセシングコアが含まれたプロセシングコアグループを示した図である。図４を参照すれば、最上位コントロールコア３３０によって作業グループが割り当てられるプロセシングコア４１０は、全体プロセシングコアグループでもある。
【００３９】
一方、中間コントロールコアは、プロセシングコアグループに含まれたプロセシングコアの一部４２０に作業グループを割り当てることができる。例えば、図４において、中間コントロールコアグループ３４０が総４個の中間コントロールコアを含むのであるならば、１つの中間コントロールコアが作業グループを割り当てることができるプロセシングコアの数は、１６個でもある。一方、中間コントロールコアが作業グループを割り当てることができるプロセシングコアの数は、各中間コントロールコアごとに異なってもよいということは、当該技術分野の当業者であるならば、理解することができるであろう。
【００４０】
一方、最下位コントロールコアは、上位階層のコントロールコアから割り当てられた作業グループについての情報を受信し、プロセシングコアに、直接作業グループを割り当てることができる。例えば、該最下位コントロールコアは、中間コントロールコアによって作業グループが割り当てられたプロセシングコアのうち一部４３０に作業グループを割り当てることができる。従って、最下位コントロールコアによって作業グループが割り当てられるプロセシングコアの数は、中間コントロールコアによって作業グループが割り当てられるプロセシングコアの数より少ない。
【００４１】
また、一実施形態による最下位コントロールコアは、近接した複数個のプロセシングコアに作業グループを割り当てるために、ローカル性（locality）を有する作業グループを割り当てる場合、少ないオーバーヘッドでもって、作業グループのローカル性を提供することができる。
【００４２】
また、一実施形態によるコンピューティング装置２００は、プロセシングコアグループ２２０以外に、コントロールコアグループ２１０を追加して含んでいるために、全てのプロセシングコアが作業グループを処理することができる。また、コントロールコアグループ２１０が階層的に分類されているために、作業グループを動的に割り当てるのに効率的である。階層的に分類されたコントロールコアが作業グループを動的に割り当てる方法は、図５を介して説明する。
【００４３】
図５は、一実施形態による、OpenＣＬカーネルを実行するための作業グループを動的に割り当てる方法について説明するための図である。
【００４４】
一実施形態によるコントロールコアグループは、下位階層のコントロールコア及びプロセシングコアの作業グループの処理結果により、他の下位階層のコントロールコア及び他のプロセシングコアに割り当てられた作業グループを再割り当てすることができる。一方、図５のホストプロセッサ５１０は、図３のホストプロセッサ３１０と対応するので、詳細な説明は省略する。
【００４５】
図５を参照すれば、最下位コントロールコア５５０は、プロセシングコア５６０に割り当てられた作業グループの処理が完了すると、他の最下位プロセシングコアに割り当てられた作業グループをプロセシングコア５６０にさらに割り当てることができる。また、最下位コントロールコア５５０は、中間コントロールコア５４０に作業グループの追加要請を送信することができる。ここで、最下位コントロールコア５５０は、プロセシングコア５６０から作業グループの追加要請を受信するか、あるいはプロセシングコア５６０の作業グループの進行状況を周期的に確認することにより、プロセシングコア５６０に割り当てられた作業グループの処理が完了したかいなかということを判断することができる。
【００４６】
中間コントロールコア５４０は、最下位コントロールコア５５０に割り当てられた作業グループの処理が完了すると、他の最下位コントロールコアに割り当てられた作業グループを、最下位コントロールコア５５０にさらに割り当てる。また、中間コントロールコア５４０は、最上位コントロールコア５３０に作業グループの追加要請を送信することができる。
【００４７】
最上位コントロールコア５３０は、中間コントロールコア５４０に割り当てられた作業グループの処理が完了すると、他の中間コントロールコアに割り当てられた作業グループを中間コントロールコア５４０にさらに割り当てる。
【００４８】
また、最上位コントロールコア５３０は、OpenＣＬカーネルを実行するための作業グループが処理中であるとき、ホストプロセッサ５１０から新たなOpenＣＬカーネルの実行情報が受信されることにより、プロセシングコアグループに割り当てられた作業グループを再割り当てすることができる。
【００４９】
図６は、一実施形態による、コンピューティング装置の構造について説明するための図である。図６を参照すれば、コンピューティング装置６３０は、ホストプロセッサ６１０及びメモリ６２０と結合される。また、コンピューティング装置６３０は、最上位コントロールコア６３１、最下位コントロールコア６３３及びプロセシングコア６３４を含むことができ、コントロールコアグループの階層構造により、中間コントロールコア６３２をさらに含んでもよい。
【００５０】
図６を参照すれば、最上位コントロールコア６３１は、中間コントロールコア６３２と結合されている。従って、最上位コントロールコア６３１は、作業グループを割り当てるために、プロセシングコア６３４に直接アクセスする代わりに、中間コントロールコア６３２または最下位コントロールコア６３３に、プロセシングコア６３４に割り当てられた作業グループについての情報を送信することができる。中間コントロールコア６３２は、最下位コントロールコア６３３と結合されているので、プロセシングコアグループの一部に割り当てられた作業グループについての情報を、最下位コントロールコア６３３に送信することができる。最下位コントロールコア６３３の場合、プロセシングコア６３４と結合されており、プロセシングコア６３４に割り当てられた作業グループに係わる情報を直接伝えることができる。
【００５１】
一方、最上位コントロールコア６３１は、ホストプロセッサ６１０と結合され、OpenＣＬカーネルが実行されるとき、生成された作業グループについての情報を受信することができる。また、コントロールコアグループ及びプロセシングコアグループに含まれたコアは、メモリ６２０から作業グループを割り当てるのに必要な情報と、作業グループの処理に必要な情報とを受信することができる。
【００５２】
図７は、他の一実施形態による、最下位コントロールコア及びプロセシングコアについて説明するための図である。
【００５３】
一実施形態による１つの最下位コントロールコア７３０は、複数個のプロセシングコア７１０に作業グループを割り当てることができる。例えば、図７を参照すれば、最下位コントロールコア７３０は、４個のプロセシングコア７１０に結合され、直接作業グループを割り当て、作業グループの処理結果、または作業グループの追加要請を受信することができる。
【００５４】
また、プロセシングコア７１０は、作業グループを処理するコア７１１以外に、外部装置と通信するためのルータ７１２をさらに含んでもよい。プロセシングコア７１０は、ルータ７１２を介して、外部ルータ７２０と結合され、外部ルータ７２０は、最下位コントロールコア７３０とも結合される。従って、プロセシングコア７１０は、最下位コントロールコア７３０から、作業グループについての情報を受信することができる。図７は、プロセシングコア７１０に、単一コア７１１が含まれているように図示されているが、プロセシングコア７１０内のコア７１１の数は、それに限定されるものではない。
【００５５】
一方、ルータ７１２及び外部ルータ７２０は、ＮｏＣ（network  on  chip）通信方式またはバス通信方式により、通信を行うことができるが、ルータ７１２と外部ルータ７２０との通信方式は、それらに限定されるものではない。
【００５６】
また、図７には、最下位コントロールコア７３０が４個のプロセシングコア７１０に作業グループを割り当てることができるように図示されているが、最下位コントロールコア７３０が作業グループを割り当てることができるプロセシングコア７１０の数は、それに限定されるものではない。
【００５７】
図８は、一実施形態による、プロセシングコアで実行されるOpenＣＬカーネルコードである。図８は、行列ａの要素と、行列ｂの要素とを加え、その結果を行列ｃに保存するカーネルコードである。行列ａと行列ｂは、二次元マトリックスであるので、図８のカーネルコードを実行するためには、二次元作業グループ空間が必要である。言い替えれば、行列ａと行列ｂとの各要素は、作業空間の各ポイントである作業アイテムにもなる。
【００５８】
一方、図６のコンピューティング装置６３０において、図８のカーネルコードが実行される場合、プロセシングコア６３４は、行列ａの要素と、行列ｂの要素とを読み出すために、メモリ６２０にアクセスすることができる。ここで、関数get＿global＿ｉｄ（）は、メモリ６２０からカーネルコードのインデックスを読み出す関数である。従って、プロセシングコア６３４が、図８のカーネルコードを実行するとき、複数個の作業アイテムが並列的に処理されるが、作業アイテムを読み出すために、メモリ６２０に何回もアクセスしなければならないので、カーネルコードを処理する時間が長くなる。
【００５９】
図９は、他の一実施形態によるコンピューティング装置について説明するための図である。
【００６０】
一実施形態によるコンピューティング装置９２０は、作業グループについての情報を保存するバッファをさらに含んでもよい。該バッファが含まれたコンピューティング装置９２０は、作業グループについての情報をバッファから読み取るために、メモリにアクセスする回数を減らすことができる。一方、図９のホストプロセッサ９１０及び最上位コントロールコア９３０は、図５のホストプロセッサ５１０及び最上位コントロールコア５３０とそれぞれ対応するので、詳細な説明は省略する。
【００６１】
図９を参照すれば、最下位コントロールコア９５０とプロセシングコア９６０は、第２バッファ９７０と結合される。第２バッファ９７０は、最下位コントロールコア９５０から伝達された、プロセシングコア９６０に割り当てられた作業グループの数と、当該作業グループのＩＤと、を保存することができる。従って、最下位コントロールコア９５０は、メモリにアクセスせず、第２バッファ９７０に保存されたプロセシングコア９６０に割り当てられた作業グループについての情報を読み取ることにより、プロセシングコア９６０の作業グループの処理結果を確認することができる。最下位コントロールコア９５０は、プロセシングコア９６０に割り当てられた作業グループの処理が完了したと判断されると、他のプロセシングコアに割り当てられた作業グループを、プロセシングコア９６０にさらに割り当てることができる。一方、第２バッファ９７０は、プロセシングコア９６０に含まれ、プロセシングコア９６０のルータ７１２を介して、最下位コントロールコア９５０にも結合されるが、第２バッファ９７０の位置は、それに限定されるものではない。
【００６２】
また、中間コントロールコア９４０と最下位コントロールコア９５０は、第１バッファ９６５とも結合される。第１バッファ９６５は、中間コントロールコア９４０から伝達した、最下位コントロールコア９５０に割り当てられた作業グループの数と、当該作業グループのＩＤと、を保存することができる。従って、中間コントロールコア９４０は、メモリにアクセスせず、第１バッファ９６５に保存された最下位コントロールコア９５０に割り当てられた作業グループについての情報を読み取ることにより、最下位コントロールコア９５０の作業グループの処理結果を確認することができる。中間コントロールコア９４０は、最下位コントロールコア９５０に割り当てられた作業グループの処理が完了したと判断されると、他の最下位コントロールコアに割り当てられた作業グループを、最下位コントロールコア９５０にさらに割り当てることができる。一方、第１バッファ９６５は、最下位コントロールコア９５０に含まれてもよいが、第１バッファ９６５の位置は、それに限定されるものではない。
【００６３】
また、図９のコンピューティング装置９２０は、２個のバッファ９６５，９７０を含んでいるが、該バッファの数は、それに限定されるものではない。
【００６４】
図１０は、一実施形態によるバッファについて説明するための図である。図１０を参照すれば、バッファ１０３０は、最下位コントロールコア１０１０とプロセシングコア１０２０とに結合される。また、バッファ１０３０は、プロセシングコア１０２０に割り当てられた作業グループのＩＤと、プロセシングコア１０２０に割り当てられた作業グループの数と、を保存することができる。
【００６５】
例えば、最下位コントロールコア１０１０は、プロセシングコア１０２０に作業グループを割り当てた後、当該作業グループのＩＤと、プロセシングコア１０２０に割り当てられた作業グループの数と、をバッファ１０３０に伝達することができる。プロセシングコア１０２０は、作業グループを処理した後、バッファ１０３０に保存されたプロセシングコア１０２０に割り当てられた作業グループの数をアップデートすることができる。従って、最下位コントロールコア１０１０は、メモリにアクセスせず、バッファ１０３０を確認することにより、プロセシングコア１０２０の作業グループ処理結果を確認することができる。
【００６６】
図１１は、一実施形態による、バッファが追加された場合、プロセシングコアで実行されるOpenＣＬカーネルコードである。図１１のカーネルコードは、バッファ１０３０を利用して、図８のカーネルコードと同一機能を遂行するコードである。言い替えれば、図１１のカーネルコードは、バッファ１０３０が追加されたプロセシングコア１０２０によって実行される、行列ａの要素と、行列ｂの要素とを加え、その結果を行列ｃに保存するカーネルコードである。
【００６７】
図１１を参照すれば、関数read＿ｗｇ＿ｉｄ（）は、プロセシングコア１０２０に割り当てられた作業グループのＩＤをバッファ１０３０から読み取る関数である。従って、図１１のカーネルコードは、関数read＿ｗｇ＿ｉｄ（）を介して、バッファ１０３０に保存された作業グループのＩＤを、カーネルコードのインデックスとして活用するために、メモリにアクセスせずとも、各プロセシングコア１０２０が並列的に作業グループを処理することができる。
【００６８】
図１２は、他の一実施形態による、バッファが追加された場合、OpenＣＬ作業グループを実行するOpenＣＬカーネルコードである。
【００６９】
一実施形態によって、プロセシングコア１０２０が少なくとも１つのプロセシングエレメントを含み、作業グループに含まれた作業アイテムの数より、プロセシングエレメントの数が少なければ、コンピューティング装置は、該プロセシングエレメントが該作業アイテムを直列化し、順次に実行するように、OpenＣＬカーネルを変換することができる。
【００７０】
具体的には、作業グループに含まれた作業アイテムの数より、プロセシングエレメントの数が少ない場合、プロセシングエレメントは、複数個の作業アイテムを処理することができる。かような場合、該プロセシングエレメントは、割り当てられた作業アイテムの処理が完了するたびに、完了した作業アイテムについての情報をメモリに保存した後、新たな作業アイテムにスイッチングすることができる。従って、該プロセシングエレメントが複数個の作業アイテムを処理するとき、該プロセシングエレメントがメモリにアクセスする回数が増加する。
【００７１】
プロセシングエレメントによるメモリのアクセス回数を減らすために、コンピューティング装置は、作業アイテム合体（work  item  coalescing）方法に基づいて、プロセシングエレメントが、複数個の作業アイテムを直列化して処理するように、カーネルコードを変換することができる。
【００７２】
図１２を参照すれば、関数read＿ｎｕｍ＿ｗｇｓ（）は、プロセシングコア１０２０に連続的に割り当てられた作業グループの数を、バッファ１０３０から読み取る関数である。
【００７３】
従って、図１２のカーネルコードは、バッファ１０３０に保存された情報を読み取る関数read＿ｗｇ＿ｉｄ（）及び関数read＿ｎｕｍ＿ｗｇｓ（）に基づいて、カーネルコードのインデックスを設定するために、プロセシングコア１０２０によるメモリアクセス回数を減少させることができる。また、カーネルコードを取り囲むループが適用されており、実行されなければならないカーネルコードを、１つの作業アイテムを実行するたびに呼び出す必要なしに、１回のカーネルコードの呼び出しにより、複数個の作業アイテムを順次に実行することができる。従って、作業アイテム合体方法を適用しない場合に比べ、プロセシングコア１０２０のメモリアクセス回数を減少させることができる。
【００７４】
図１３及び図１４は、一実施形態によるコンピューティング装置の性能を検証するための実験環境を示した図である。
【００７５】
図１３は、一実施形態によるコンピューティング装置に、異なるスケジューリング技法を適用した場合、作業グループを割り当てるのに必要な遅延時間を示した図である。ここでは、コンピューティング装置に含まれたプロセシンググループは、９６個のプロセシングコアを含み、該コンピューティング装置に含まれたコントロールコアグループは、１個の最上位コントロールコア、４個の中間コントロールコア、及び１６個の最下位コントロールコアを含むと仮定する。また、コントロールコアとプロセシングコアは、それぞれ５０ＭＨｚ及び５００ＭＨｚのクロック周波数（clock  frequency）によって動作すると仮定する。
【００７６】
図１３の集中的スケジューリング方法は、単一コントロールコアが、全てのプロセシングコアに、作業グループを動的に割り当てるスケジューリング方法を意味する。分散スケジューリング方法は、階層的に分類されたコントロールコアが、プロセシングコアに作業グループを動的に割り当てるスケジューリング方法を意味する。また、ハードウェアサポート項目は、コンピューティング装置がバッファを含むか否かということを示す項目である。
【００７７】
図１３を参照すれば、分散スケジューリング方法が適用されたコンピューティング装置の遅延時間は、集中的スケジューリング方法が適用されたコンピューティング装置の遅延時間より短い。従って、階層的に分類されたさまざまなコントロールコアが、９６個のプロセシングコアに作業グループを動的に割り当てる時間が、単一コントロールコアが作業グループを動的に割り当てる時間より短くなるということが分かる。
【００７８】
一方、同一スケジューリング方法が適用された場合、バッファが追加されたコンピューティング装置の遅延時間は、バッファなしのコンピューティング装置の遅延時間より短い。従って、バッファが追加されたコンピューティング装置は、メモリにアクセスする回数が減少されるために、作業グループを処理する遅延時間が短くなるということが分かる。
【００７９】
図１４を参照すれば、コンピューティング装置の性能を検証するために、異なる４個のアプリケーションが実行されると仮定する。具体的には、ＰＩ  estimationアプリケーションは、他のアプリケーションに比べ、割り当てられる作業グループの処理時間が長いという特性を有する。Small  buffer  copy及びBig  buffer  copyアプリケーションは、他のアプリケーションに比べ、メモリアクセス回数が多いという特性を有する。また、ＳｐＭＶアプリケーションは、他のアプリケーションに比べ、メモリアクセスが一定ではなく、割り当てられた作業グループを処理する時間が非均一であるという特性を有する。
【００８０】
図１５は、一実施形態によるコンピューティング装置の性能検証結果について説明するための図である。図１５は、理想的なスケジューリングの性能に基づいて、コンピューティング装置によって、４個のアプリケーションが実行されるとき、スケジューリング性能を正規化した結果である。
【００８１】
図１５を参照すれば、集中的スケジューリング方法が適用されたコンピューティング装置のスケジューリング性能は、分散スケジューリング方法が適用されたコンピューティング装置のスケジューリング性能より全体的に低いということが分かる。具体的には、ＳｐＭＶアプリケーションの場合、集中的スケジューリング方法が適用されたコンピューティング装置と、分散スケジューリング方法が適用されたコンピューティング装置とのスケジューリング性能差が大きいということが分かる。
【００８２】
また、バッファが追加されたコンピューティング装置が、分散スケジューリングに基づいて、作業グループのスケジューリングを行う場合、分散スケジューリングだけ適用されたコンピューティング装置に比べ、スケジューリング性能がさらに良好であるということが分かる。具体的には、メモリアクセス回数が多いSmall  buffer  copyアプリケーション及びBig  buffer  copyアプリケーションが、バッファ有無によるスケジューリング性能差が大きいということが分かる。
【００８３】
図１６は、一実施形態による、OpenＣＬカーネルを処理する方法を図示したフローチャートである。
【００８４】
段階１６１０において、コントロールコアグループ３２０は、OpenＣＬカーネルを実行するための作業グループを、下位階層のコントロールコア及びプロセシングコアに割り当てることができる。ここで、コントロールコアグループ３２０に含まれた複数個のコントロールコアは、コントロールコアによって作業グループが割り当てられるプロセシングコアの数により、階層的に分類される。
【００８５】
具体的には、コントロールコアグループ３２０は、最上位コントロールコア３３０及び最下位コントロールコアグループ３５０を含み得る。
【００８６】
最上位コントロールコア３３０は、OpenＣＬカーネルの実行情報が受信されることにより、作業グループを、下位階層のコントロールコアに割り当て、割り当てられた作業グループについての情報を、下位階層のコントロールコアに送信することができる。最下位コントロールコアグループ３５０は、上位階層のコントロールコアによって割り当てられた作業グループについての情報を受信し、プロセシングコアに、作業グループを割り当てる、少なくとも１つの最下位コントロールコアを含み得る。
【００８７】
また、コントロールコアグループ３２０は、最上位コントロールコア３３０によって割り当てられた作業グループに係わる情報を受信し、最下位コントロールコアグループ３５０に作業グループを割り当てる、複数個の中間コントロールコアが含まれた中間コントロールコアグループ３４０をさらに含んでもよい。
【００８８】
一実施形態により、中間コントロールコアが、中間コントロールコアによって作業グループが割り当てられるプロセシングコアの数により、階層的に分類されるとき、段階１６１０において、上位階層の中間コントロールコアは、下位階層の中間コントロールコアに作業グループを割り当てることができる。
【００８９】
段階１６２０において、少なくとも１つのプロセシングコアが含まれたプロセシングコアグループ３６０は、コントロールコアグループ３２０によって割り当てられた作業グループを処理することができる。
【００９０】
段階１６３０において、プロセシングコアグループ３６０は、作業グループの処理結果を出力することができる。
【００９１】
図１７は、一実施形態による、OpenＣＬカーネルを処理する方法を図示した詳細フローチャートである。図１７は、図１６によるコンピューティング装置３００が、OpenＣＬカーネルを処理する方法について詳細に説明するための図であり、コンピューティング装置３００の構成によって、OpenＣＬカーネルを処理する方法が異なるということは、当該技術分野の当業者であるならば、理解することができるであろう。また、図１７の段階１７２０、段階１７３０及び段階１７４０は、図１６の段階１６１０、段階１６２０及び段階１６３０とそれぞれ対応するので、詳細な説明は省略する。
【００９２】
段階１７１０において、最上位コントロールコア３３０は、OpenＣＬカーネルが実行されることにより、ホストプロセッサ３１０によって生成されたOpenＣＬカーネルの実行情報を受信することができる。かような場合、最上位コントロールコア３３０は、OpenＣＬカーネルを実行するための作業グループが処理中であるとき、ホストプロセッサ３１０から新たなOpenＣＬカーネルの実行情報が受信されることにより、プロセシングコアグループ３６０に割り当てられた作業グループを再割り当てすることができる。ここで、OpenＣＬカーネルの実行情報は、OpenＣＬカーネルが実行されるための全体作業グループの数、及びOpenＣＬカーネルが含まれたアプリケーション情報を含んでもよい。
【００９３】
また、一実施形態によるOpenＣＬカーネルを処理する方法は、ホストプロセッサ３１０が、コントロールコアグループ３２０によるプロセシングコアグループ３６０に対する作業グループ割り当てが完了すると、OpenＣＬカーネルの実行を中断し、割り当て結果を収集して出力する段階をさらに含んでもよい。
【００９４】
また、一実施形態による、OpenＣＬカーネルを処理する方法は、バッファに作業グループについての情報を保存する段階をさらに含んでもよい。ここで、該作業グループについての情報は、下位階層のコントロールコア及びプロセシングコアに割り当てられた作業グループのＩＤ、及び割り当てられた作業グループの数を含んでもよい。
【００９５】
段階１７５０において、コントロールコアグループ３２０は、出力された作業グループの処理結果に従って、下位階層の他のコントロールコア、及び他のプロセシングコアに割り当てられた作業グループを再割り当てすることができる。例えば、最上位コントロールコア３３０は、中間コントロールコアまたは最下位コントロールコアの作業グループの処理結果に従って、他の中間コントロールコア、または他の最下位コントロールコアに割り当てられた作業グループを再割り当てすることができる。また、中間コントロールコアは、下位階層の中間コントロールコアまたは最下位コントロールコアの作業グループの処理結果に従って、下位階層の他の中間コントロールコア、または他の最下位コントロールコアに割り当てられた作業グループを再割り当てすることができる。また、最下位コントロールコアは、プロセシングコアの作業グループの処理結果に従って、他のプロセシングコアに割り当てられた作業グループを再割り当てすることができる。
【００９６】
本実施形態は、コンピュータによって実行されるプログラムモジュールのような、コンピュータによって実行可能な命令語を含む記録媒体の形態でも具現される。コンピュータ可読媒体は、コンピュータによってアクセスされる任意の可用媒体でもあり、揮発性及び不揮発性の媒体、分離型及び非分離型の媒体をいずれも含む。コンピュータ記録媒体は、コンピュータ可読命令語、データ構造、プログラムモジュール、またはその他データのような情報保存のための任意の方法または技術によって具現された揮発性及び不揮発性、分離型及び非分離型の媒体をいずれも含む。
【００９７】
本実施形態の範囲は、前述の説明よりは、特許請求の範囲によって示され、特許請求の範囲の意味及び範囲、そしてその均等概念から導き出される全ての変更、または変形された形態が含まれるものであると解釈されなければならない。
【産業上の利用可能性】
【００９８】
本発明の、OpenＣＬカーネルを処理する方法、及びそれを遂行するコンピューティング装置は、例えば、電子装置関連の技術分野に効果的に適用可能である。
【符号の説明】
【００９９】
１０，２０，３０，４０    プロセシングエレメント
１００    OpenＣＬプラットフォーム
１１０，３１０    ホストプロセッサ
１２０，１３０，１４０    コンピューティングデバイス
１２１，１２２    コンピューティングユニット
２００，３００    コンピューティング装置
２１０，３２０    コントロールコアグループ
２２０，３６０    プロセシングコアグループ
３３０    最上位コントロールコア
３４０    中間コントロールコアグループ
３５０    最下位コントロールコア
３６０    プロセシングコアグループ
【図１】
2018106709.tif 000003
【図２】
2018106709.tif 000004
【図３】
2018106709.tif 000005
【図４】
2018106709.tif 000006
【図５】
2018106709.tif 000007
【図６】
2018106709.tif 000008
【図７】
2018106709.tif 000009
【図８】
2018106709.tif 000010
【図９】
2018106709.tif 000011
【図１０】
2018106709.tif 000012
【図１１】
2018106709.tif 000013
【図１２】
2018106709.tif 000014
【図１３】
2018106709.tif 000015
【図１４】
2018106709.tif 000016
【図１５】
2018106709.tif 000017
【図１６】
2018106709.tif 000018
【図１７】
2018106709.tif 000019