(57)【特許請求の範囲】
【請求項１】
第１の計算カーネルが第１の閾値以下の数の分岐命令を含むことを示すランタイム前静的情報であって、前記第１の計算カーネルのコンパイル中に判定されたランタイム前静的情報の少なくとも一部に基づいて、前記第１の計算カーネルを、複数のプロセッサコアのうち第１のマイクロアーキテクチャを有する第１のプロセッサコアにスケジューリングするステップと、
前記第１の閾値よりも大きい数の分岐命令を含むことを示すランタイム前静的情報の少なくとも一部に基づいて、前記第１の計算カーネルを、複数のプロセッサコアのうち第２のマイクロアーキテクチャを有する第２のプロセッサコアにスケジューリングするステップと、
前記第１のプロセッサコアまたは前記第２のプロセッサコアでの前記第１の計算カーネルのランタイム挙動であって、実行中の計算カーネルの挙動であるランタイム挙動に対応する、測定されたランタイム情報を受信するステップと、
実行された分岐命令の数が第２の閾値よりも大きいことを示す前記測定されたランタイム情報の少なくとも一部に基づいて、前記第１の計算カーネルのスケジュールを、前記第１のプロセッサコアから、前記複数のプロセッサコアのうち前記第２のプロセッサコアに変更するステップと、
を含む、異種マルチコアアーキテクチャにおいて作業単位をスケジューリングするための方法。
【請求項２】
前記第１の計算カーネルのコンパイル中に、前記第１のプロセッサコアおよび第２のプロセッサコアの各々に対して、前記第１の計算カーネルの異なるバージョンのバイナリコードを生成するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記第１のマイクロアーキテクチャは、単一命令複数データ（ＳＩＭＤ）マイクロアーキテクチャである、請求項１に記載の方法。
【請求項４】
前記スケジューリングするステップは、
第２の計算カーネルが第１の数の命令を含むことを、散乱メモリアクセスまたは間接的メモリアクセスを用いて判定するステップであって、前記散乱メモリアクセスは、不連続な記憶場所に対するアクセスであるステップと、
前記第２の計算カーネルが第２の数の命令を含むことを、順次またはストライドメモリアクセスを用いて判定するステップと、
命令の前記第１の数が命令の前記第２の数よりも大きいという判定に応じて、前記第２の計算カーネルを前記第２のプロセッサコアにスケジューリングするステップと、
命令の前記第１の数が命令の前記第２の数よりも大きくないという判定に応じて、前記第２の計算カーネルを前記第１のプロセッサコアにスケジューリングするステップと、
をさらに含む、請求項１に記載の方法。
【請求項５】
第２の計算カーネルが第３の閾値以下の数の第２の種類の命令を含むことを示すランタイム前静的情報であって、前記第２の計算カーネルのコンパイル中に判定されたランタイム前静的情報の少なくとも一部に基づいて、前記第２の計算カーネルを、前記複数のプロセッサコアのうち前記第２のプロセッサコアにスケジューリングするステップであって、前記第２の種類は、暗号、浮動小数点、ガーベジコレクションおよびビデオグラフィックスのうち少なくとも１つに対応する、ステップと、
実行された前記第２の種類の命令の数が少なくとも第４の閾値であることを示す、測定されたランタイム情報の少なくとも一部に基づいて、前記第２の計算カーネルのスケジュールを、前記第２のプロセッサコアから前記第１のプロセッサコアに変更するステップであって、前記第１のマイクロアーキテクチャは、単一命令複数データ（ＳＩＭＤ）マイクロアーキテクチャである、ステップと、をさらに含む、請求項１に記載の方法。
【請求項６】
前記第１のプロセッサコアにスケジューリングするステップは、
前記第１の計算カーネルに含まれるメモリアクセスの少なくとも一部に基づいて、前記第１の計算カーネルを、前記第１のプロセッサコアにスケジューリングするステップを含む、請求項１に記載の方法。
【請求項７】
第１のマイクロアーキテクチャを備える第１のプロセッサコアと、
前記第１のマイクロアーキテクチャとは異なる第２のマイクロアーキテクチャを備える第２のプロセッサコアと、
スケジューラを備えるオペレーティングシステムと、を備え、
前記スケジューラは、
第１の計算カーネルが第１の閾値以下の数の分岐命令を含むことを示すランタイム前静的情報であって、第１の計算カーネルのコンパイル中に判定されたランタイム前静的情報の少なくとも一部に基づいて、前記第１の計算カーネルを前記第１のプロセッサコアにスケジューリングし、
分岐命令の数が前記第１の閾値よりも大きいことを示すランタイム前静的情報の少なくとも一部に基づいて、前記第１の計算カーネルを、複数のプロセッサコアのうち第２のプロセッサコアにスケジューリングし、
前記第１のプロセッサコアまたは前記第２のプロセッサコアでの前記第１の計算カーネルのランタイム挙動であって、実行中の計算カーネルの挙動であるランタイム挙動に対応する、測定されたランタイム情報を受信し、
実行された分岐命令の数が第２の閾値よりも大きいことを示す前記測定されたランタイム情報の少なくとも一部に基づいて、前記第１の計算カーネルのスケジュールを、前記第１のプロセッサコアから前記第２のプロセッサコアに変更するように構成されている、
異種マルチコアアーキテクチャを含むコンピュータシステム。
【請求項８】
コンパイラは、前記第１の計算カーネルのコンパイル中に、前記第１のプロセッサコアおよび第２のプロセッサコアの各々に対して、前記第１の計算カーネルの異なるバージョンのバイナリコードを生成するように構成されている、請求項７に記載のコンピュータシステム。
【請求項９】
前記第１のマイクロアーキテクチャは、単一命令複数データ（ＳＩＭＤ）マイクロアーキテクチャである、請求項７に記載のコンピュータシステム。
【請求項１０】
前記スケジューラは、前記第１のプロセッサコアにスケジューリングすることを実行するために、
第２の計算カーネルが第１の数の命令を含むことを、散乱メモリアクセスまたは間接的メモリアクセスを用いて判定し、
前記第２の計算カーネルが第２の数の命令を含むことを、順次またはストライドメモリアクセスを用いて判定し、
命令の前記第１の数が命令の前記第２の数よりも大きいという判定に応じて、前記第２の計算カーネルを前記第２のプロセッサコアにスケジューリングし、
命令の前記第１の数が命令の前記第２の数よりも大きくないという判定に応じて、前記第２の計算カーネルを前記第１のプロセッサコアにスケジューリングするように構成されており、
前記散乱メモリアクセスは、不連続な記憶場所に対するアクセスである、
請求項９に記載のコンピュータシステム。
【請求項１１】
前記スケジューラは、
前記第２の計算カーネルが第３の閾値以下の数の第２の種類の命令を含むことを示すランタイム前静的情報であって、前記第２の計算カーネルのコンパイル中に判定されたランタイム前静的情報の少なくとも一部に基づいて、第２の計算カーネルを、前記複数のプロセッサコアのうち前記第２のプロセッサコアにスケジューリングすることであって、前記第２の種類は、暗号、浮動小数点、ガーベジコレクションおよびビデオグラフィックスのうち少なくとも１つに対応する、ことと、
実行された前記第２の種類の命令の数が少なくとも第４の閾値であることを示す、測定されたランタイム情報の少なくとも一部に基づいて、前記第２の計算カーネルのスケジュールを、前記第２のプロセッサコアから前記第１のプロセッサコアに変更することであって、前記第１のマイクロアーキテクチャは、単一命令複数データ（ＳＩＭＤ）マイクロアーキテクチャである、ことと、
を行うように構成されている、請求項７に記載のコンピュータシステム。
【請求項１２】
前記第１のプロセッサコアにスケジューリングすることは、
前記第１の計算カーネルに含まれるメモリアクセスの少なくとも一部に基づいて、前記第１の計算カーネルを、前記第１のプロセッサコアにスケジューリングすることを含む、請求項１１に記載のコンピュータシステム。
【請求項１３】
異種マルチコアアーキテクチャにおいて計算カーネルをスケジューリングするように構成されたプログラム命令を記憶するコンピュータ可読記憶媒体であって、
前記プログラム命令は、
第１の計算カーネルが第１の閾値以下の数の分岐命令を含むことを示すランタイム前静的情報であって、前記第１の計算カーネルのコンパイル中に判定されたランタイム前静的情報の少なくとも一部に基づいて、前記第１の計算カーネルを、複数のプロセッサコアのうち第１のマイクロアーキテクチャを有する第１のプロセッサコアにスケジューリングすることと、
前記第１の閾値よりも大きい数の分岐命令を含むことを示すランタイム前静的情報の少なくとも一部に基づいて、前記第１の計算カーネルを、複数のプロセッサコアのうち第２のマイクロアーキテクチャを有する第２のプロセッサコアにスケジューリングすることと、
前記第１のプロセッサコアまたは前記第２のプロセッサコアでの前記第１の計算カーネルのランタイム挙動であって、実行中の計算カーネルの挙動であるランタイム挙動に対応する、測定されたランタイム情報を受信することと、
実行された分岐命令の数が第２の閾値よりも大きいことを示す前記測定されたランタイム情報の少なくとも一部に基づいて、前記第１の計算カーネルのスケジュールを、前記第１のプロセッサコアから、前記複数のプロセッサコアのうち前記第２のプロセッサコアに変更することと、
を行うように実行可能である、
コンピュータ可読記憶媒体。
【請求項１４】
前記第１のマイクロアーキテクチャは、単一命令複数データ（ＳＩＭＤ）マイクロアーキテクチャである、請求項１３に記載のコンピュータ可読記憶媒体。
【請求項１５】
前記プログラム命令は、前記第１のプロセッサコアにスケジューリングすることを実行するために、
第２の計算カーネルが第１の数の命令を含むことを、散乱メモリアクセスまたは間接的メモリアクセスを用いて判定し、
前記第２の計算カーネルが第２の数の命令を含むことを、順次またはストライドメモリアクセスを用いて判定し、
命令の前記第１の数が命令の前記第２の数よりも大きいという判定に応じて、前記第２の計算カーネルを前記第２のプロセッサコアにスケジューリングし、
命令の前記第１の数が命令の前記第２の数よりも大きくないという判定に応じて、前記第２の計算カーネルを前記第１のプロセッサコアにスケジューリングするように実行可能であり、
前記散乱メモリアクセスは、不連続な記憶場所に対するアクセスである、
請求項１４に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムに関し、より具体的には、複数の異種プロセッサコア間で作業単位の実行を自動的にスケジューリングすることに関する。
【背景技術】
【０００２】
コンピュータシステムのスループットを増加させるために、タスクの並列化が用いられている。この目的を達成するために、コンパイラまたはソフトウェアプログラマは、プログラムコードから並列化タスクを抽出し、システムハードウェア上で並行して実行し得る。単一コアアーキテクチャでは、単一のコアは、マルチスレッディングを行うように構成された、ディープパイプラインおよび複数の実行コンテキストを含んでもよい。ハードウェア上での並列実行をさらに増加させるために、マルチコアアーキテクチャは、複数のプロセッサコアを含んでもよい。この種類のアーキテクチャは、同種マルチコアアーキテクチャと呼ばれてもよく、単一コアアーキテクチャよりも高い命令スループットを提供し得る。しかしながら、計算集約的タスクのための特定の命令は、共有リソースの不均等なシェアを消費する可能性があり、それがひいては、共有リソースの割付解除を遅延させるおそれがある。そのような特定のタスクの例は、暗号化、ビデオグラフィックスレンダリングおよびガーベジコレクションを含み得る。
【０００３】
従来の汎用コアの性能制限を克服するために、コンピュータシステムは、特定のタスクを特殊用途ハードウェアへオフロードし得る。このハードウェアは、単一命令複数データ（ＳＩＭＤ）並列アーキテクチャ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）および／または他の特殊化された種類の処理コアを含んでもよい。アーキテクチャが異なる種類の複数のコアを含む場合、異種マルチコアアーキテクチャと呼ばれ得る。
【０００４】
現在、「スケジューラ」とも呼ばれ得る、オペレーティングシステム（ＯＳ）スケジューラまたはユーザレベルスケジューラは、例えばラウンドロビン方式等の種々の方式を用いて、異種マルチコアアーキテクチャを備えたコンピュータシステム上で作動する作業負荷をスケジューリングし得る。加えて、スケジューラは、コアの可用性に基づいて、これらの作業負荷をスケジューリングしてもよい。代替として、プログラマは、ランタイムシステムと組み合わせて、作業負荷をスケジューリングしてもよい。そのような場合、プログラマは、スケジューリングを行うために、ソフトウェアプラットフォームを利用し得る。例えば、ＯｐｅｎＣＬ（登録商標）（Ｏｐｅｎ  Ｃｏｍｐｕｔｉｎｇ  Ｌａｎｇｕａｇｅ）フレームワークは、異種コンピュータ環境にわたってプログラミングをサポートし、異種計算用の低レベルアプリケーションプログラミングインターフェース（ＡＰＩ）を含む。ＯｐｅｎＣＬ（登録商標）フレームワーク（本明細書では、概して、「ＯｐｅｎＣＬ」（登録商標）と呼ばれる）は、それぞれＯｐｅｎＣＬ（登録商標）デバイスと関連付けられる実行待ち行列を定義するために使用され得るＣ風の言語インターフェースを含む。ＯｐｅｎＣＬ（登録商標）デバイスは、ＣＰＵ、ＧＰＵ、または異種マルチコアアーキテクチャ内の少なくとも１つのプロセッサコアを備える他のユニットであってもよい。ＯｐｅｎＣＬ（登録商標）フレームワークでは、関数呼び出しは、ＯｐｅｎＣＬ（登録商標）計算カーネル、または単に「計算カーネル」と呼ばれ得る。ソフトウェアプログラマは、実行待ち行列内の計算カーネルをスケジューリングしてもよい。計算カーネルは、１つ以上の計算の作業単位を生じさせるように、１つ以上のデータの記録と合致させられてもよい。各作業単位は、一意の識別子（ＩＤ）を有し得る。
【０００５】
上記のスケジューリングモデルは、スケジューリング方式とシステムリソースとの間に不一致がある場合に、移植性および性能が制限されるおそれがある。プログラマは、様々なシステム構成に及ぶアプリケーションの提供を試みつつ、移植性と効率性とを差し替えて提供するであろう。
【発明の概要】
【０００６】
複数の異種プロセッサコア間で作業単位の実行を効率的に自動スケジューリングするためのシステムおよび方法が考慮される。
【０００７】
一実施形態では、処理ノードは、第１のマイクロアーキテクチャを備える第１のプロセッサコアと、第１のマイクロアーキテクチャとは異なる第２のマイクロアーキテクチャを備える第２のプロセッサコアとを含む。一実施形態では、第１のマイクロアーキテクチャは汎用マイクロアーキテクチャであり、第２のマイクロアーキテクチャは単一命令複数データ（ＳＩＭＤ）マイクロアーキテクチャである。処理ノードは、第１および第２のプロセッサコアのそれぞれに連結されたメモリを含む。メモリは、１つ以上の計算カーネルまたは関数呼び出しを備えたコンピュータプログラムを記憶する。コンパイラは、所与の関数呼び出しの命令を横断する際に、所与の関数呼び出しのランタイム前情報を計算するように構成されている。オペレーティングシステム（ＯＳ）内のスケジューラは、１つ以上のカーネルのそれぞれを、関連するデータのレコードと合致させることによって、１つ以上の作業単位を生じさせる。また、スケジューラは、計算されたランタイム前情報の少なくとも一部に基づいて、１つ以上の作業単位を第１または第２のプロセッサコアの何れかに割り当てる。加えて、スケジューラは、待機作業単位と同一のカーネルに対応する他の作業単位の動的なランタイム挙動に基づいて、待機作業単位のための最初の割り当てを、第１または第２のプロセッサコアの何れかから他方のプロセッサコアへ変更することが可能である。
【０００８】
以下の説明および図面を参照すると、これらおよび他の実施形態がさらに理解されるであろう。
【図面の簡単な説明】
【０００９】
【図１】異種マルチコアアーキテクチャを備えた例示的な処理ノードの一実施形態の一般化ブロック図である。
【図２】計算カーネルを定義するソースコードの一実施形態の一般化ブロック図である。
【図３】条件文を伴う計算カーネルを定義するソースコードの一実施形態の一般化ブロック図である。
【図４】ハードウェアリソースと計算カーネルとの間でスケジュールされた割り当ての一実施形態の一般化ブロック図である。
【図５】２種類のプロセッサコアのためのマイクロアーキテクチャの論理レイアウトの一実施形態の一般化ブロック図である。
【図６】汎用パイプライン実行フローの一実施形態の一般化ブロック図である。
【図７】ＳＩＭＤパイプライン実行フローの一実施形態の一般化ブロック図である。
【図８】静的情報を利用して作業単位をプロセッサコアへスケジューリングするための方法の一実施例を示す一般化フロー図である。
【図９】動的情報を利用して作業単位をプロセッサコアへスケジューリングするための方法の一実施例を示す一般化フロー図である。
【００１０】
本発明は、種々の修正および代替的形態の影響を受け得るが、具体的な実施形態が、一例として図面に示され、本明細書で詳細に説明される。しかしながら、図面およびそれらへの詳細な説明は、本発明が開示された特定の形態に限定することを目的とせず、逆に、本発明は、添付の請求項によって定義されるような本発明の精神および範囲内に含まれる全ての修正、均等物および代替案を対象とするものであると理解されたい。
【発明を実施するための形態】
【００１１】
以下の説明では、本発明の徹底した理解を提供するために、多数の具体的詳細が記載されている。しかしながら、当業者であれば、これらの具体的詳細を伴わずに、本発明が実践され得ることを認識するはずである。場合によっては、本発明を曖昧にすることを回避するために、周知の回路、構造および技法が詳細に示されていない。
【００１２】
図１を参照すると、異種マルチコアアーキテクチャを備えた例示的な処理ノード１１０の一実施形態が示されている。処理ノード１１０は、１つ以上のプロセッサコア１１２と、関連キャッシュメモリサブシステム１１４とを含み得る１つ以上の処理ユニット１１５とを含んでもよい。一実施形態では、プロセッサコア１１２は、汎用マイクロアーキテクチャを利用する。
【００１３】
また、処理ノード１１０は、１つ以上のプロセッサコア１７２と、データ記憶バッファ１７４とを備え得る１つ以上の処理ユニット１７０を含んでもよい。プロセッサコア１７２は、プロセッサコア１１２のミラーリングされたシリコンイメージでなくてもよい。プロセッサコア１７２は、プロセッサコア１１２によって用いられるマイクロアーキテクチャとは異なるマイクロアーキテクチャを有し得る。一実施形態では、プロセッサコア１７２は、プロセッサコア１１２と同一のプロセッサ群の異なる世代のものであってもよい。別の実施形態では、プロセッサコア１７２は、プロセッサコア１１２の電圧および／または周波数を拡大／縮小したものであってもよい。言い換えれば、プロセッサコア１７２は、同一の機能性および命令セットアーキテクチャ（ＩＳＡ）、同一のクロック周波数、同一のキャッシュサイズ、同一のメモリモデル等を備えたプロセッサコア１１２のシリコンコピーではない。
【００１４】
プロセッサコア１７２のマイクロアーキテクチャの参照を続けると、さらに別の実施形態では、プロセッサコア１７２は、計算集約的タスクのための高い命令スループットを提供するマイクロアーキテクチャを備えてもよい。プロセッサコア１７２は、並列アーキテクチャを有し得る。例えば、プロセッサコア１７２は、単一命令複数データ（ＳＩＭＤ）コアであってもよい。ＳＩＭＤコアの例は、グラフィックス処理ユニット（ＧＰＵ）、デジタル信号処理（ＤＳＰ）コアまたはその他を含む。一実施形態では、処理ノード１１０は、単一命令セットアーキテクチャ（ＩＳＡ）を備える。典型的には、当技術分野において周知であるように、単一ＩＳＡマルチコアアーキテクチャは、チップマルチプロセッサ（ＣＭＰ）のためにより高い出力およびスループット性能を提供することが示されている。
【００１５】
処理ノード１１０上の高い命令スループットは、ソフトウェアアプリケーションのスレッドが効率的にスケジューリングされたときに、所与の電力限界内の測定された電力消費を用いて達成されてもよい。スレッドは、プロセッサコア１１２および１７２のランタイムのハードウェアリソースの少なくとも一部に基づき、各スレッドが最高命令スループットを有する方式で、プロセッサコア１１２および１７２のうち１つでスケジューリングされてもよい。
【００１６】
処理ノード１１０内の構成要素の参照を続けると、処理ノード１１０は、メモリコントローラ１２０と、インターフェース論理１４０とを含んでもよい。一実施形態では、処理ノード１１０の図示した機能性は、単一の集積回路に組み込まれる。一実施形態では、プロセッサコア１１２は、所定の汎用命令セットに従って命令を実行するための回路を含む。例えば、ＳＰＡＲＣ（登録商標）命令セットアーキテクチャ（ＩＳＡ）が選択されてもよい。代替として、ｘ８６、ｘ８６−６４（登録商標）、Ａｌｐｈａ（登録商標）、ＰｏｗｅｒＰＣ（登録商標）、ＭＩＰＳ（登録商標）、ＰＡ−ＲＩＳＣ（登録商標）または任意の他の命令セットアーキテクチャが選択されてもよい。概して、プロセッサコア１１２は、データおよび命令のそれぞれのために、キャッシュメモリサブシステム１１４にアクセスする。要求されたブロックが、キャッシュメモリサブシステム１１４内または共有キャッシュメモリサブシステム１１８内で検出されない場合には、読取要求が生成され、欠落したブロックがマップされたノード内のメモリコントローラに当該読取要求が伝送されてもよい。
【００１７】
一実施形態では、処理ユニット１７０は、グラフィックス処理ユニット（ＧＰＵ）である。現代のＧＰＵは、コンピュータグラフィックスを操作および表示することに非常に有能である。ＧＰＵの高度並列構造は、様々な複雑なアルゴリズムに対して、処理ユニット１１５等の汎用中央処理ユニット（ＣＰＵ）よりも効果的である。典型的には、ＧＰＵは、グラフィックスおよびビデオに使用される計算を実行し、ＣＰＵは、グラフィックス単独よりもより多くのシステムプロセスのための計算を実行する。従来のＧＰＵは、画像レンダリングアプリケーションにおいて高いスループットを達成するために、非常に幅広い単一命令複数データ（ＳＩＭＤ）アーキテクチャを利用している。そのようなアプリケーションは、概して、多数のオブジェクト（頂点またはピクセル）上で、頂点シェーダまたはピクセルシェーダ等の同一のプログラムを実行することを必要とする。各オブジェクトは、他のオブジェクトとは無関係に処理されるが、同一の一連の演算が使用されるため、ＳＩＭＤアーキテクチャは、相当の性能強化を提供する。また、ＧＰＵは、非図式計算のためにも考慮されている。
【００１８】
一実施形態では、ＧＰＵ１７０は、ビデオカード上に配置され得る。別の実施形態では、ＧＰＵ１７０は、マザーボード上に統合されてもよい。さらに別の実施形態では、処理ノード１１０の図示した機能性は、単一の集積回路上に組み込まれてもよい。そのような実施形態では、ＣＰＵ１１５およびＧＰＵ１７０は、異なる設計センターからの専有コアであってもよい。また、ＧＰＵ１７０は、現在、インターフェース１４０を介してオフチップでメモリアクセスを行うよりも、処理ノード１１０からメモリコントローラ１２０を介して、ローカルメモリ１１４および１１８と、メインメモリとの両方に直接アクセスすることが可能であってもよい。この実施形態は、ＧＰＵ１７０のためのメモリアクセスの待ち時間をより低下させてもよく、それが、より高い性能につながり得る。
【００１９】
図１の処理ノード１１０の構成要素の参照を続けると、キャッシュサブシステム１１４および１１８は、データのブロックを記憶するように構成された高速キャッシュメモリを備えてもよい。キャッシュメモリサブシステム１１４は、個々のプロセッサコア１１２内に統合されてもよい。代替として、キャッシュメモリサブシステム１１４は、所望に応じて、裏面キャッシュ構成またはインライン構成で、プロセッサコア１１４に連結されてもよい。さらにまた、キャッシュメモリサブシステム１１４は、キャッシュの階層として実装されてもよい。（階層内で）プロセッサコア１１２に最も近く位置するキャッシュは、所望であれば、プロセッサコア１１２内に統合されてもよい。一実施形態では、キャッシュメモリサブシステム１１４の各々はＬ２キャッシュ構造を表し、共有キャッシュサブシステム１１８はＬ３キャッシュ構造を表す。キャッシュメモリサブシステム１１４および共有キャッシュメモリサブシステム１１８の両方は、対応するキャッシュコントローラに連結されたキャッシュメモリを含んでもよい。
【００２０】
概して、パケット処理論理１１６は、処理ノード１１０が連結されたリンク上で受信した制御パケットに応答するように構成されており、プロセッサコア１１２および／またはキャッシュメモリサブシステム１１４に応じて制御パケットを生成するように構成されており、サービスのためのメモリコントローラ１２０によって選択されたトランザクションに応じてプローブコマンドおよび応答パケットを生成するように構成されており、ノード１１０が中間ノードであるパケットを、インターフェース論理１４０を通して他のノードへ送るように構成されている。インターフェース論理１４０は、パケットを受信し、パケットを、パケット処理論理１１６によって使用される内部クロックに同期させる論理を含んでもよい。
【００２１】
ここで図２を参照すると、計算カーネルを利用するソースコードの一実施形態が示されている。ＯｐｅｎＣＬ（登録商標）（Ｏｐｅｎ  Ｃｏｍｐｕｔｉｎｇ  Ｌａｎｇｕａｇｅ）は、異種計算のためのアプリケーションプログラミングインターフェース（ＡＰＩ）の一実施例である。ＯｐｅｎＣＬ（登録商標）は、それぞれＯｐｅｎＣＬ（登録商標）デバイスと関連付けられた実行待ち行列を定義するＣ風の言語インターフェースを含む。ＯｐｅｎＣＬ（登録商標）デバイスは、ＣＰＵ、ＧＰＵ、または異種マルチコアアーキテクチャ内の少なくとも１つのプロセッサコアを備えた他のユニットであってもよい。関数呼び出しは、ＯｐｅｎＣＬ（登録商標）カーネル、または単に「計算カーネル」と呼ばれてもよい。ＯｐｅｎＣＬ（登録商標）フレームワークは、ゲーム、娯楽、科学および医療分野で使用される多種多様のデータ並列アプリケーションのために計算性能を向上させてもよい。異種アーキテクチャについては、コンピュータプログラムは、典型的に、計算カーネルおよび内部関数の集合を備える。ソフトウェアプログラマは、計算カーネルを定義し得る一方で、内部関数は、所与のライブラリ内で定義されてもよい。
【００２２】
データ並列ソフトウェアアプリケーションについては、Ｎ次元計算ドメインは、「実行ドメイン」の組織化を定義し得る。また、Ｎ次元計算ドメインは、Ｎ次元グリッドまたはＮ次元範囲（「ＮＤＲａｎｇｅ」）と呼ばれてもよい。ＮＤＲａｎｇｅは、１、２または３次元空間であってもよい。また、この次元空間は、インデックス空間と呼ばれてもよい。例えば、ソフトウェアアプリケーションは、画像ファイル等のデータの２次元（２Ｄ）アレイ上でデータ処理を行ってもよい。ソフトウェアアプリケーションは、２Ｄ画像のピクセルごとに、ソフトウェアプログラマによって開発されたアルゴリズムを実行してもよい。所与の計算カーネルは、インデックス空間（ＮＤＲａｎｇｅ）にわたって呼び出されてもよい。
【００２３】
典型的には、コンパイル後、各計算カーネルの引数およびパラメータが設定される。加えて、関連メモリオブジェクトおよびバッファが作成される。計算カーネルの所与のインスタンスは、独自のソフトウェアスレッドとして実行されてもよい。インデックス空間内の所与の点における計算カーネルの所与のインスタンスは、「作業項目」と呼ばれてもよい。また、作業項目は、作業単位と呼ばれてもよい。作業単位は、２Ｄ画像の所与のピクセル（所与のインデックス）に対応するデータのレコード上で、計算カーネル内の１つ以上の命令とともに動作し得る。典型的には、作業単位は、関連する一意の識別子（ＩＤ）を有する。別の実施例では、「Ｈｅｌｌｏ  Ｗｏｒｌｄ」という文字列を処理する入門コンピュータプログラムは、文字列内の各文字を計算するための１つの作業単位を有し得る。
【００２４】
ＮＤＲａｎｇｅは、十分なハードウェアサポートがある場合に並行して実行する作業単位の総数を定義し得る。例えば、ＮＤＲａｎｇｅは、２８０の作業単位数を定義し得るが、ＧＰＵは、任意の所与の時に６４個の作業単位の同時実行をサポートし得る。作業単位の総数は、全体的な作業サイズを定義し得る。当業者に周知であるように、作業単位は、作業グループにさらにグループ化されてもよい。各作業グループは、一意の識別子（ＩＤ）を有し得る。所与の作業グループ内の作業単位は、相互に通信し、実行を同期させ、メモリアクセスを協調させることが可能であってもよい。いくつかの作業単位が、ＳＩＭＤ方式で、ＧＰＵ上の同時実行のためのウェーブフロントに分けられてもよい。２８０個の合計作業単位についての上記の実施例に関して、ウェーブフロントは、６４個の作業単位を含んでもよい。
【００２５】
ＯｐｅｎＣＬ（登録商標）フレームワークは、種々の計算デバイス、またはＯｐｅｎＣＬ（登録商標）デバイスのためのオープンプログラミング標準である。ソフトウェアプログラマは、ベンダ特有のコードを書くことを回避してもよく、それが向上したコード移植性をもたらし得る。他のフレームワークが利用可能であり、当該他のフレームワークは、異種アーキテクチャのための、よりベンダ特有のコーディングを提供し得る。例えば、ＮＶＩＤＩＡはＣｏｍｐｕｔｅ  Ｕｎｉｆｉｅｄ  Ｄｅｖｉｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＣＵＤＡ（登録商標））を提供し、ＡＭＤはＡＴＩ  Ｓｔｒｅａｍ（登録商標）を提供する。ＣＵＤＡ（登録商標）フレームワークを用いると、計算カーネルは、典型的には、コンピュータプログラムがコンパイルされたときに、静的にコンパイルされる。ＯｐｅｎＣＬ（登録商標）フレームワークを用いると、計算カーネルは、典型的には、ジャストインタイム（ＪＩＴ）方法でコンパイルされる。ＪＩＴ方法は、システム構成を取得した後に、適切なバイナリコードを生成し得る。ＪＩＴコンパイル方法を用いると、コンパイル時間が総実行時間とともに含まれる。したがって、コンパイラ最適化は、実行時間を増加させ得る。加えて、ランタイムに、ＯｐｅｎＣＬコンパイラは、計算カーネルの複数のバージョンを生成し得る。計算カーネルの１つのバージョンは、汎用ＣＰＵ、ＳＩＭＤ  ＧＰＵ等の各種のＯｐｅｎＣＬ（登録商標）デバイス種類のために生成されてもよい。
【００２６】
ＯｐｅｎＣＬ（登録商標）およびＣＵＤＡ（登録商標）といった２つのフレームワークは、それぞれの実行モデル間で用語の違いを有する。例えば、ＯｐｅｎＣＬ（登録商標）における作業単位、作業グループ、ウェーブフロントおよびＮＤＲａｎｇｅは、スレッド、スレッドブロック、ワープおよびグリップ等のＣＵＤＡ（登録商標）における対応する用語を有する。残りの説明の全体を通して、ＯｐｅｎＣＬ（登録商標）に対応する用語が使用される。しかしながら、説明されるシステムおよび方法は、ＣＵＤＡ（登録商標）、ＡＴＩ  Ｓｔｒｅａｍおよび他のフレームワークに適用されてもよい。
【００２７】
図２に示されるように、コード２１０は、概して「ｄｏＷｏｒｋＡ」および「ｄｏＷｏｒｋＢ」という２つの関数呼び出しを定義する。各関数呼び出しは、「計算カーネル」と呼ばれてもよい。計算カーネルは、１つ以上の計算の作業単位を生じさせるために、１つ以上のデータのレコードと合致させられてもよい。したがって、２つ以上の作業単位は、単一の関数呼び出しの同一の命令を利用し得るが、異なるデータのレコードに作用する。例えば、コード２２０内の関数呼び出し「Ｐｏｗｅｒ２」は、アレイ「ＩＮＰＵＴ」内の各データ値に１つずつ、１０個の作業単位を実行するために使用されてもよい。ここで、レコードは、単一のデータ値を備える。他の実施例では、レコードは、それぞれデータ値を含む２つ以上のフィールドを備えてもよい。ＳＩＭＤマイクロアーキテクチャは、カーネル「Ｐｏｗｅｒ２」の命令を効率的に実行し、ＩＮＰＵＴアレイ内の値について２という累乗を計算し、ＲＥＳＵＬＴアレイに出力を書いてもよい。
【００２８】
ＯｐｅｎＣＬ（登録商標）フレームワークは、並行して複数回、計算カーネルのインスタンスを呼び出し得る。ＪＩＴコンパイル方法を用いると、これらのインスタンスは、後に呼び出されるように、ランタイムにコンパイルされる。計算カーネルへの召還（呼び出し）は、ｇｅｔ＿ｇｌｏｂａｌ＿ｉｄ（０）と名付けられた内部関数を呼び出すことによって取り出され得る、１つの関連する一意のＩＤ（作業単位ＩＤ）を有する。コード２２０における上記の例に関して、計算カーネル「Ｐｏｗｅｒ２」は、ＩＮＰＵＴアレイ内の各データ値に対して１回呼び出される。この場合、計算カーネル「Ｐｏｗｅｒ２」は、１０回呼び出される。したがって、１０個の一意の作業単位ＩＤが取り出される。ＯｐｅｎＣＬ（登録商標）フレームワークは、一意の作業単位ＩＤを利用することによって、これらの異なるインスタンスを区別し得る。また、ＩＮＰＵＴアレイ内の特定のデータ値等が作用するデータ（レコード）が特定されてもよい。したがって、ランタイムに、関連計算カーネルがスケジュールされると、作業単位は、デフォルト設定で同一のＯｐｅｎＣＬ（登録商標）デバイスへスケジュールされてもよい。
【００２９】
ここで図３を参照すると、条件文を伴う計算カーネルを定義するソースコードの一実施形態が示されている。コード２１０と同様に、図３に示されるコード２３０は、概して「ｄｏＷｏｒｋＡ」および「ｄｏＷｏｒｋＢ」という２つの関数呼び出しを定義する。この場合においても、各関数呼び出しは、「計算カーネル」と呼ばれてよい。ここで、２つの計算カーネルのうち１つのみが、ランタイム中に実行される。いずれの計算カーネルが実行されるかという選択は、関数呼び出し「ＥｖａｌｕａｔｅＦｕｎｃｔｉｏｎ」によって提供される条件付きテストに基づいて実行される。所与の命令の結果、または所与の命令が実行されるか否かは、以前の命令の実行と、関連レコードに対応するデータとにデータ依存している。条件付きテストの結果が作業単位のウェーブフロントの間で一致していない場合、ＳＩＭＤマイクロアーキテクチャの利益が低減する場合がある。例えば、所与のＳＩＭＤコアは、６４個の作業単位の同時実行に利用可能な６４個の並列計算ユニットを有し得る。しかしながら、６４個の作業単位の半分が条件付きテストに合格する一方で、他の半分が条件付きテストに不合格となる場合には、並列計算ユニットの半分のみが、処理の所与の段階の間利用される。
【００３０】
ここで図４を参照すると、ハードウェアリソースと計算カーネルとの間でスケジュールされた割り当て４００の一実施形態を図示する一般化ブロック図が示されている。ここで、ハードウェアおよびソフトウェアリソースの分割と、１つ以上のソフトウェアアプリケーション４３０の実行中のハードウェアおよびソフトウェアリソースの相互関係および割り当てが示されている。一実施形態では、オペレーティングシステム４２０は、計算カーネル４４０ａ〜４４０ｊおよび４４０ｋ〜４４０ｑのためのメモリの領域を割り付ける。アプリケーション４３０またはコンピュータプログラムが実行される場合、各アプリケーションは、複数の計算カーネルを備えてもよい。例えば、第１の実行アプリケーションは、計算カーネル４４０ａ〜４４０ｊを備えてもよく、第２の実行アプリケーションは、計算カーネル４４０ｋ〜４４０ｑを備えてもよい。これらの計算カーネルの各々の内部に１つ以上の作業単位が存在してもよい。例えば、計算カーネル４４０ａは作業単位４４２ａ〜４４２ｄを備え、計算カーネル４４０ｊは作業単位４４２ｅ〜４４２ｈを備え、計算カーネル４４０ｋは４４２ｊ〜４４２ｍを備え、計算カーネル４４０ｑは作業単位４４２ｎ〜４４２ｑを備える。作業単位は、他の作業単位とは無関係に実行されてもよいし、他の作業単位と同時に実行されてもよい。
【００３１】
図４に示される計算カーネルのそれぞれは、メモリのイメージ等の独自のリソース、またはアプリケーション実行前の命令およびデータのインスタンスを所有し得る。また、計算カーネルのそれぞれは、例えばコード、データ、ならびに可能性としてヒープおよびスタックをアドレスするアドレス空間等のプロセス特有の情報と、例えばスタックポインタ、汎用および浮動小数点レジスタ、プログラムカウンタおよびその他等のデータおよび制御レジスタ内の変数と、例えばｓｔｄｉｎ、ｓｔｄｏｕｔおよびその他等のオペレーティングシステム記述子と、例えば一式の許可等のセキュリティ属性とを備えてもよい。
【００３２】
一実施形態では、ハードウェアコンピュータシステム４１０は、それぞれ１つ以上の作業単位を処理するように構成された汎用プロセッサコア１１２およびＳＩＭＤプロセッサコア１７２を組み込む。別の実施形態では、システム４１０は、２つの他の異種プロセッサコアを含む。一般に、所与のアプリケーションについては、オペレーティングシステム４２０は、スケジューラからの要求に応じて、当該アプリケーションのためのアドレス空間を設定し、当該アプリケーションのコードをメモリにロードし、プログラムのためのスタックを設定し、アプリケーション内の所与の位置に分岐し、当該アプリケーションの実行を開始する。典型的には、オペレーティングシステム４２０のうち、そのようなアクティビティを管理する部分は、オペレーティングシステム（ＯＳ）計算カーネル４２２である。ＯＳ計算カーネル４２２は、計算カーネルまたは関数呼び出しと混同しないために、「ＯＳ計算カーネル」と呼ばれる。さらに、ＯＳ計算カーネル４２２は、アプリケーションの実行に利用可能なメモリが不十分であるときに、行動方針を判定し得る。前述のように、アプリケーションは、１つよりも多くの計算カーネルに分割されてもよく、システム４１０は、１つよりも多くのアプリケーションを実行していてもよい。したがって、並行して作動するいくつかの計算カーネルがあってもよい。スケジューラは、ＯＳ計算カーネル４２２を使用して、任意の時に、同時実行計算カーネルのどちらがプロセッサコア１１２および１７２に割り付けられるかを決定し得る。ＯＳ計算カーネル４２２は、タイムスライスと呼ばれる所与の時間量にわたって、１つ以上のコアを有し得るプロセッサのコア上で、プロセスが作動することを可能にし得る。オペレーティングシステム４２０内のスケジューラ４２４は、計算カーネルをコアに割り当てるための決定論理を備えてもよい。
【００３３】
一実施形態では、１つだけの計算カーネルが、任意の時に、ハードウェア計算ユニット４１２ａ〜４１２ｇおよび４１２ｈ〜４１２ｒのうち何れか１つで実行することができる。これらのハードウェア計算ユニットは、関連データを用いて所与の作業単位の所与の命令の実行を取り扱うことが可能なハードウェアを備える。このハードウェアは、加算、乗算、ゼロ検出、ビット単位シフト、除算、ビデオグラフィックスおよびマルチメディア命令、またはプロセッサ設計の当業者に公知である他の演算を行うように構成された算術論理演算ユニットを含んでもよい。これらのハードウェア計算ユニットは、マルチスレッドプロセッサ内のハードウェアスレッド、ＳＩＭＤマイクロアーキテクチャ内の並列ハードウェアカラム等を含んでもよい。
【００３４】
図４の鎖線は、割り当てを表し、必ずしも直接物理接続を表すとは限らない。したがって、例えば、ハードウェア計算ユニット４１２ａは、作業単位４４２ｄを実行するように割り当てられてもよい。しかしながら、以降で（例えば、コンテキスト切り替え後に）、ハードウェア計算ユニット４１２ａは、作業単位４４２ｈを実行するように割り当てられてもよい。一実施形態では、スケジューラ４２４は、ラウンドロビン方式を用いて、ハードウェア計算ユニット４１２ａ〜４１２ｒへ作業単位４４２ａ〜４４２ｑをスケジューリングしてもよい。代替として、スケジューラ４２４は、ラウンドロビン方式を用いて、コア１１２および１７２へ作業単位４４２ａ〜４４２ｑをスケジューリングしてもよい。所与のハードウェア計算ユニットへの所与の作業単位の割り当ては、関連プロセッサコアによって行われてもよい。別の実施形態では、スケジューラ４２４は、プロセッサコア１１２および１７２の可用性に基づいてスケジューリングを行ってもよい。さらに別の実施形態では、スケジューラ４２４は、ＯｐｅｎＣＬ（登録商標）ＡＰＩまたは別の類似ＡＰＩを利用して、プログラマによって作成された割り当てに従ってスケジューリングを行ってもよい。これらのスケジューリング方式は、作業単位割り当てとハードウェアリソースとの間に不一致があるときに、移植性および性能を制限する場合がある。
【００３５】
図５を参照すると、２種類のプロセッサコアのためのマイクロアーキテクチャの論理レイアウトの一実施形態を示す一般化ブロック図が示されている。汎用コア５１０および単一命令複数データ（ＳＩＭＤ）コア５６０のそれぞれが示されているが、他の種類の異種コアも可能であり、考慮される。コア５１０および５６０のそれぞれは、データおよび命令の記憶のために、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）５５０ａおよび５５０ｂを有する。一実施形態では、コア５１０および５６０は、同一のＤＲＡＭを共有する。別の実施形態では、ＤＲＡＭに加えて、キャッシュメモリサブシステム（図示せず）の所与のレベルが共有される。例えば、再び図１を参照すると、キャッシュメモリサブシステム１１８は、コア１１２および１７２によって共有される。
【００３６】
コア５１０および５６０のそれぞれは、キャッシュメモリサブシステム５３０を含む。示されるように、汎用コア５１０は、制御論理５２０および算術論理演算ユニット（ＡＬＵ）５４０から分離しているキャッシュメモリサブシステム５３０を論理的に有する。コア５１０内のデータフローは、パイプライン型であり得るが、パイプラインレジスタ等の記憶要素は、説明を単純化するために示されていない。所与のパイプライン段階で、この段階での命令がある種類のＡＬＵを利用しない場合、または別の作業単位（あるいは汎用コアのための別のスレッド）がこの段階中にＡＬＵを消費する場合には、ＡＬＵは未使用であってもよい。
【００３７】
示されるように、ＳＩＭＤコア５６０は、計算ユニット５４２の各行ごとの制御論理５２０とグループ化されたキャッシュメモリサブシステム５３０を有する。コア５６０内のデータフローは、パイプライン型であり得るが、パイプラインレジスタ等の記憶要素は、説明を単純化するために示されていない。所与のパイプライン段階で、この段階での関連命令が、例えば取られていない分岐等のように事前に失敗したテストに基づいて実行されない場合には、計算ユニットは未使用であってもよい。
【００３８】
ここで図６を参照すると、汎用パイプライン実行フロー６００の一実施形態を示す一般化ブロック図が示されている。命令６０２〜６０８が取り出され、汎用パイプラインに入力し得る。命令６０６は、計算集約的命令であってもよい。パイプライン実行フローの特定の段階中に、命令６０２〜６０８のうち１つ以上の命令が、例えばデコーダ論理、命令スケジューラ入力、リオーダバッファ入力、ＡＬＵ、レジスタファイル入力、分岐予測ユニット等の汎用プロセッサコア１１２内のリソースを消費する。
【００３９】
均衡のとれた計画では、命令６０２〜６０８のそれぞれは、各段階で等量のリソースを消費する。しかしながら、典型的には、汎用コアは、不動産費用、電力消費および他の設計配慮により、各命令のためのリソースを複製しない。したがって、作業負荷が不均衡になり得る。例えば、命令６０６は、その計算集約的動作により、１つ以上のパイプ段階のためにより多くのリソースを消費し得る。示されるように、この命令によって消費されるリソース６３０は、他の命令によって消費されるリソースよりもはるかに大きくなり得る。実際に、計算集約的命令は、他の命令によるハードウェアリソースの使用を阻止し得る。
【００４０】
いくつかの計算集約的タスクは、汎用コア１１２内の共有リソースに圧力を加え得る。したがって、スループット損失が、計算集約的プロセスと、共有リソースを待つ他のプロセスとの両方に起こる。加えて、いくつかの命令は、共有リソース上で行われている計算をサポートするように、ダイ上の共有リソースおよび他のリソースを占有する。そのような長い待ち時間の命令は、長い待ち時間の間に、他のプロセスがいくつかのリソースを使用することを同時に阻止し得る。
【００４１】
ここで図７を参照すると、ＳＩＭＤパイプライン実行フロー７００の一実施形態を示す一般化ブロック図が示されている。命令７０２〜７０８が取り出され、関連データを伴うＳＩＭＤパイプラインに入力し得る。命令７０４は、分岐等の制御フロー転送命令であってもよい。命令７０６は、取られたパス内の第１の命令であってもよい。例えば、分岐命令７０４は、高レベル言語プログラム内のＩＦ文と関連付けられてもよい。命令７０６は、高レベル言語プログラム内のＴＨＥＮ文と関連付けられてもよい。命令７０８は、取られていないパス内の第１の命令であってもよい。命令７０８は、高レベル言語プログラム内のＥＬＳＥ文と関連付けられてもよい。
【００４２】
所与の行内の計算ユニットのそれぞれは、同一の計算ユニットであってもよい。これらの計算ユニットのそれぞれは、同一の命令に作用し得るが、異なるデータが異なる作業単位と関連付けられる。示されるように、いくつかの作業単位は、分岐命令７０４によって提供されるテストに合格し、他の作業単位はテストに不合格となる。ＳＩＭＤコア１７２は、利用可能なパスのそれぞれを実行し、現在のパスを選択しなかった作業項目に対応する計算ユニット等の実行単位を選択的に無効にし得る。例えば、Ｉｆ−Ｔｈｅｎ−Ｅｌｓｅ構築文の実行中に、ＳＩＭＤアーキテクチャの各列内に「Ｔｈｅｎ」（パスＡ）および「Ｅｌｓｅ」（パスＢ）パスを実行するように構成された実行単位がある。第１および第２の作業単位が実行を停止させ、第３の作業単位が継続中の実行を続けるのを待つ際に、並列実行の効率性が低減させられ得る。したがって、計算ユニットの全てが、分岐命令７０４の実行後に、所与の行内で動作中の計算ユニット７１０であるわけではない。多数の計算ユニットが所与のパイプ段階中で動作していない場合、ＳＩＭＤコアの効率性およびスループットが低減させられる。
【００４３】
ここで図８を参照すると、静的情報を利用してプロセッサコアへ作業単位をスケジューリングするための方法８００の一実施例が示されている。処理ノード１１０で具現化される構成要素、および上記の図４に示されたハードウェアリソース割り当ては、概して、方法８００に従って動作し得る。論議の目的のために、この実施形態および以降で説明される方法の後続の実施形態におけるステップは、起こった順番に示される。しかしながら、いくつかのステップは、示されるのとは異なる順番で起こってもよく、いくつかのステップは、同時に行われてもよく、いくつかのステップは、他のステップと組み合わせられてもよく、いくつかのステップは、別の実施形態では欠けていてもよい。
【００４４】
ブロック８０２では、ソフトウェアプログラムまたはサブルーチンの場所が特定され、分析されてもよい。このフトウェアプログラムは、異種アーキテクチャ上でのコンパイルおよび実行のために書かかれてもよい。プログラムコードは、ソフトウェアアプリケーション、サブルーチン、動的なリンクされたライブラリまたはその他の任意の部分を参照し得る。パス名は、コマンドプロンプトにおいてユーザに入力されてもよく、ソースコードをコンパイルし始めるために、所与のディレクトリ場所またはその他から読み出されてもよい。プログラムコードは、Ｃ等の高水準言語や、ＯｐｅｎＣＬ（登録商標）等のＣ風の言語等で、設計者によって書かれてもよい。一実施形態では、ソースコードは、静的にコンパイルされる。そのような実施形態では、ソースコードは、静的なフロントエンドコンパイル中に、中間表現（ＩＲ）に変換されてもよい。バックエンドコンパイルステップは、ＩＲを機械コードに変換し得る。静的バックエンドコンパイルは、より多くの転換および最適化を行ってもよい。コンパイラは、プログラムコード内のカーネルを識別し得る。
【００４５】
ブロック８０４では、コンパイラは、カーネルの１つ以上の命令を読み取り、それらを分析し得る。条件文が識別された場合には（条件付きブロック８０６）、ブロック８０８において、条件文の数のカウントが増分されてもよい。条件文は、分岐等の制御フロー転送命令であってもよい。一実施形態では、別個のカウントが、例えば前方／後方分岐、直接／間接分岐、ジャンプ等の異なる種類の制御フロー転送命令のために維持されてもよい。コンパイラまたは他のツールは、分岐の方向、分岐の標的、またはメモリアクセス動作のアドレスを、静的に判定することが可能であり得る。しかしながら、一実施形態では、典型的には、実行中に関連データに行われる何らかの処理が、コンパイル中に行われてもよい。例えば、分岐の方向（取られる、または取られない）を判定する単純なテストが行われてもよい。コンパイルは「静的コンパイル」と呼ばれてもよいが、１つ以上の小さな動的演算が行われてもよい。また、このコンパイルは、「ランタイム前コンパイル」と呼ばれてもよい。この時に行われる動的ステップの別の例は、Ｉｆ−Ｔｈｅｎ−Ｅｌｓｅ構築文のＴＨＥＮ、ＥＬＳＥＩＦおよびＥＬＳＥブロックのそれぞれにおいて実行する次の命令を識別することである。
【００４６】
メモリアクセス命令が識別された場合には（条件付きブロック８１０）、ブロック８１２において、対応するアクセスパターンが判定されてもよい。メモリアクセスは、順次、ストライド、直接、間接、グループ集合、散乱等であってもよい。再度、何らかの動的計算が、コンパイル中に、作業単位と関連付けられたデータを用いて行われてもよい。コンパイラは、異なるカテゴリのメモリアクセスのカウントを維持し得る。
【００４７】
一実施形態では、コード実行前に、静的バイナリ計測（ｓｔａｔｉｃ  ｂｉｎａｒｙ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ）が行われてもよい。命令が計測に適格であるかどうかを判定するために、当該命令が点検されてもよい。計測は、測定およびエラーチェック分析が、分析ルーチンによる後続の実行において行われることを可能にする。加えて、プロファイリングデータが収集されてもよい。アプリケーションの性能は、例えばメモリプロファイル等の、結果として生じる作業単位の動的挙動の理解に基づいて増大させられてもよい。加えて、同一のカーネルに由来する完成作業単位の動的挙動に基づく、作業単位の動的スケジューリングが行われてもよい。静的コンパイル時間制御フローグラフおよびデータフローグラフが、ランタイム実行の前に、初期化された変数およびプログラム挙動を検出するために用いられてもよい。しかしながら、動的挙動は、さらなる情報を提供し得る。したがって、例えばロード／読取および記憶／書込動作等の制御フロー転送命令およびメモリアクセス命令が、少なくとも計測されてもよい。しかしながら、記憶する測定データの量および実行する分析量を低減させるために、フィルタリングが、所与の命令が別様に計測に適格であるときでさえも、計測された命令の数を削減させるために使用されてもよい。
【００４８】
命令が計測に適格ではない場合には（条件付きブロック８１４）、ブロック８１６において、計測段階中に、分析ルーチンは、インラインに配置され、または関数呼び出し内に存在してもよく、関数名は、計測された適格命令の前または後の何れかで、コード内にインラインに配置される。最後の命令に達した場合には（条件付きブロック８１８）、ブロック８２０で、スケジューラは、ランタイム前または静的情報に従って、異種アーキテクチャ内のコア１１２および１７２のうち対応する１つで実行するように、各作業単位をスケジューリングする。
【００４９】
異種マルチコアアーキテクチャで使用されるスケジューラ４２４は、ハードウェアリソースとコア内の組織化との間の合致、および作業単位の特性を優先させてもよい。例えば、低スレッドレベル並列性を伴うカーネルに対応する作業単位が、汎用プロセッサコア１１２上でスケジューリングされてもよい。
【００５０】
制御フロー転送命令の数が所与の閾値よりも大きい作業単位が、コア１１２上でスケジューリングされてもよい。代替として、関連データに基づく様々な方向を伴う比較的多数の制御フロー命令を備えるカーネルの作業単位が、コア１１２上でスケジュールに入れられてもよい。例えば、カーネルが多数の制御フロー転送命令を有するが、方向（取られる、取られない）が多数の作業単位の間で一致する場合には、作業単位は、ＳＩＭＤコア１７２上でスケジューリングされてもよい。そうでなければ、制御フロー転送命令の命令が一貫していない、または様々である場合には、関連作業単位は、コア１１２上でスケジューリングされてもよい。
【００５１】
比較的多数のメモリアクセス命令が、順次またはストライド方式でメモリ位置のアクセスを行う場合には、対応する作業単位は、ＳＩＭＤコア１７２上でスケジューリングされてもよい。比較的多数のメモリアクセス命令が、散乱または間接方式でメモリ位置のアクセスを行う場合には、対応する作業単位は、汎用コア１１２上でスケジューリングされてもよい。ランタイムにおいて、ＯｐｅｎＣＬ（登録商標）コンパイラは、例えば汎用コア１１２およびＳＩＭＤコア１７２等のＯｐｅｎＣＬ（登録商標）デバイス種類ごとの複数のバージョンのカーネルを生成し得る。一実施例では、スケジューラ４２４は、ＳＩＭＤコア１７２上で実行するように、所与のカーネルの最初の２５６個の作業単位をスケジューリングしてもよい。しかしながら、これらの作業単位の監視された動的挙動に基づいて、スケジューラ４２４は、汎用コア１１２へ、所与のカーネルの最後の１６個の作業単位をスケジューリングしてもよい。
【００５２】
ここで図９を参照すると、動的情報を利用してプロセッサコアへ作業単位をスケジューリングするための方法９００の一実施例が示されている。処理ノード１１０で具現化される構成要素および上記の図４に示されるハードウェアリソース割り当ては、概して、方法９００に従って動作し得る。論議の目的で、この実施形態および以降で説明される方法の後続の実施形態におけるステップは、起こった順番に示される。しかしながら、いくつかのステップは、示されるのとは異なる順番で起こってもよく、いくつかのステップは、同時に行われてもよく、いくつかのステップは、他のステップと組み合わせられてもよく、いくつかのステップは、別の実施形態では欠けていてもよい。
【００５３】
ブロック９０２では、データの関連レコードが、所与のカーネルの各作業単位に割り当てられる。ブロック９０４では、スケジューラ４２４が、作業単位を異種コアへスケジューリングする。方法７００は、スケジューリングを行うために使用されてもよい。ブロック９０６では、プロセッサコア１１２および１７２が、対応するスケジュールされた作業単位を実行する。ブロック９０８では、計測コードおよびツールが、実行作業単位の動的挙動を監視して収集する。収集されたデータは、１つ以上のテーブルに記憶されてもよい。１つ以上のテーブルの入力は、測定されている現在のシステムトポロジーを示すために、プロセッサコア識別子（ＩＤ）、カーネルＩＤおよび作業単位ＩＤを利用し得る。
【００５４】
事象インデックスは、計測されたコードによって測定されている事象の種類を示し得る。実際の測定値が、比率値とともに記憶されてもよい。比率は、対応する頻度または割合の測定を含んでもよい。測定値および比率値が有効であるか否かを示すために、状態フィールドが使用されてもよい。１つ以上の構成可能な閾値が記憶されてもよい。一実施形態では、これらの閾値は、プログラム可能である。
【００５５】
スケジュールされた作業単位が、実行されるのを待っている場合には（条件付きブロック９１０）、ブロック９１２において、同一のカーネルに対応する任意の実行作業単位の監視された動的挙動が、分析されてもよい。ブロック９１４では、異種コアのうち１つが、所与の作業単位の効率的な実行のために好適であると判定される。例えば、作業単位あたりの命令の数が増加するにつれて、命令が汎用関数性に対応する可能性がより高い。したがって、測定された数が所与の閾値を通過するとき、汎用コア１１２は、待機作業単位を実行するのにより好適であり得る。加えて、取られた分岐の間の命令のカウントが使用されてもよい。
【００５６】
コード内の所与のループおよびループの数は、ＳＩＭＤマイクロアーキテクチャを用いた効率的な実行を示し得る。所与の閾値を超える、実行された分岐の数および他の種類の制御フロー転送命令の数は、汎用コア１１２がより効率的な実行を提供することを示し得る。同様に、比較的多数のキャッシュミスは、汎用コア１１２が、作業単位を実行するのにＳＩＭＤコア１７２よりも効率的であり得ることを示し得る。実行された浮動小数点演算、実行されたグラフィックス処理動作、および書き込みバッファオーバーフローによるパイプライン失速の比較的多数は、ＳＩＭＤコア１７２が、待機作業単位のためにより効率的な実行を提供することを示し得る。また、待機作業単位を実行する好ましいＯｐｅｎＣＬ（登録商標）デバイスの種類を判定するための実行時間が使用されてもよい。他のランタイム基準が可能であり、考慮される。加えて、その基準のそれぞれは、実行に好ましいＯｐｅｎＣＬ（商標）デバイスの種類を判定するために、全ての基準の集計式に使用される関連加重を有し得る。
【００５７】
ブロック９１６では、待機作業単位の効率的な実行のために上記で判定されるプロセッサコアと、以前にスケジュールされたプロセッサコアとの間で、比較が行われる。合致がある場合には（条件付きブロック９１８）、ブロック９２０において、スケジューラ４２４は、待機作業単位を、以前にスケジュールされたプロセッサコア上にスケジューリングする。合致がない場合には（条件付きブロック９１８）、ブロック９２２において、スケジューラ４２４は、対応するカーネルの動的挙動を利用して、待機作業単位を、上記の分析から見出されるプロセッサコア上にスケジューリングする。
【００５８】
上記の実施形態は、ソフトウェアを含み得ることを留意されたい。そのような実施形態では、方法および／または機構を実装するプログラム命令は、搬送され、またはコンピュータ可読媒体上に記憶されてもよい。プログラム命令を記憶するように構成された多数の種類の媒体が利用可能であり、ハードディスク、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、プログラマブルＲＯＭ（ＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、および種々の他の形態の揮発性または不揮発性記憶装置を含む。一般的に言えば、コンピュータアクセス可能記憶媒体は、命令および／またはデータをコンピュータに提供するように、使用中にコンピュータによってアクセス可能な任意の記憶媒体を含んでもよい。例えば、コンピュータアクセス可能記憶媒体は、磁気または光学媒体、例えば、ディスク（固定またはリムーバブル）、テープ、ＣＤ−ＲＯＭ若しくはＤＶＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷまたはＢｌｕ−Ｒａｙ（登録商標）等の記憶媒体を含んでもよい。さらに、記憶媒体は、ＲＡＭ（例えば、同期型ダイナミックＲＡＭ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３等）ＳＤＲＡＭ、低出力ＤＤＲ（ＬＰＤＤＲ２等）ＳＤＲＡＭ、Ｒａｍｂｕｓ  ＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）等）、ＲＯＭ、フラッシュメモリ、ユニバーサルシリアルバス（ＵＳＢ）インターフェース等の周辺インターフェースを介してアクセス可能な不揮発性メモリ（例えば、フラッシュメモリ）等の、揮発性または不揮発性メモリ媒体を含んでもよい。記憶媒体は、微小電気機械システム（ＭＥＭＳ）、ならびにネットワークおよび／または無線リンク等の通信媒体を介してアクセス可能な記憶媒体を含んでもよい。
【００５９】
加えて、プログラム命令は、Ｃ等の高レベルプログラミング言語プログラム、またはＶｅｒｉｌｏｇ、ＶＨＤＬ若しくはＧＤＳ  ＩＩストリームフォーマット（ＧＤＳＩＩ）等のデータベース形式等の設計言語（ＨＤＬ）で、ハードウェア機能性の挙動レベル記述またはレジスタ転送レベル（ＲＴＬ）記述を備えてもよい。場合によっては、記述は、合成ライブラリからのゲートのリストを備えるネットリストを生成するように記述を合成し得る合成ツールによって読み取られてもよい。ネットリストは、システムを備えるハードウェアの機能性も表す一式のゲートを備える。次いで、ネットリストは、マスクに適用される幾何学形状を表すデータセットを生成するように配置され、送られてもよい。次いで、マスクは、システムに対応する１つまたは複数の半導体回路を生産するために、種々の半導体製造ステップで使用されてもよい。代替として、コンピュータアクセス可能記憶媒体の命令は、所望に応じて、ネットリスト（合成ライブラリを伴う、または伴わない）またはデータセットであってもよい。加えて、命令は、Ｃａｄｅｎｃｅ（登録商標）、ＥＶＥ（登録商標）およびＭｅｎｔｏｒ  Ｇｒａｐｈｉｃｓ（登録商標）等のベンダからのハードウェアベース型のエミュレータによって、エミュレーションの目的で利用されてもよい。
【００６０】
上記の実施形態は、非常に詳細に説明されているが、上記の開示が完全に理解されると、多数の変形例および修正が、当業者に明白となるであろう。以下の請求項は、全てのそのような変形例および修正を包含するように解釈されることが意図される。
【図１】
0005859639.tif 000002
【図２】
0005859639.tif 000003
【図３】
0005859639.tif 000004
【図４】
0005859639.tif 000005
【図５】
0005859639.tif 000006
【図６】
0005859639.tif 000007
【図７】
0005859639.tif 000008
【図８】
0005859639.tif 000009
【図９】
0005859639.tif 000010