(58)【調査した分野】(Int.Cl.,DB名)
前記カーネル領域は、ランタイム中に、前記静的領域を損傷を受けないままにしながら、異なるカーネルのハードウェア実施態様を実装するように、動的に再構成可能である、請求項1に記載の方法。
前記ヘテロジニアスマルチプロセッサ設計のランタイム中に前記プログラム可能集積回路内で前記第1のカーネルの前記ハードウェア実施態様のインスタンスを作成する、前記第1のカーネルの前記構成ビットストリームをロードするステップをさらに含み、前記ホストは前記バイナリコンテナからの前記構成ビットストリームを前記プログラム可能集積回路へと提供する、請求項1に記載の方法。
前記カーネル領域は、ランタイム中に、前記静的領域を損傷を受けないままにしながら、異なるカーネルのハードウェア実施態様を実装するように、動的に再構成可能である、請求項8に記載のシステム。
【発明を実施するための形態】
【0011】
図面の詳細な説明
本開示は新規の特徴を規定する特許請求の範囲によって締めくくられているが、本開示内に記載される様々な特徴は、図面と併せて本明細書を考慮することで、より良好に理解されるであろう。本明細書に記載されるプロセス(複数可)、機械(複数可)、製造物(複数可)およびそれらの任意の変形は、例示を目的として与えられている。本開示内に記載される特定の構造的および機能的詳細は、限定的に解釈されるべきではなく、特許請求の範囲の根拠としてのみ、および、実質的に任意で適切に詳述される構造において記載される特徴を様々に利用することを当業者に教示するための代表的な根拠としてのみ、解釈されるべきである。さらに、本開示内で使用される用語および語句は、限定的であるようには意図されておらず、記載される特徴を理解できる記述をすることを意図している。
【0012】
本開示は、集積回路(IC)に関し、より詳細には、プログラム可能ICをヘテロジニアスマルチプロセッサシステムに組み込むことに関する。本開示内に記載されている本発明の構成によれば、プログラム可能ICは、1つまたは複数のカーネルを実装するために、ヘテロジニアスマルチプロセッサ設計内で使用することができる。ヘテロジニアスマルチプロセッサのカーネルのうちの1つまたは複数は、コンパイルして、プログラム可能ICのプログラム可能回路を使用して実装されるハードウェアへと変換することができる。これに関連して、カーネルは、中央処理装置(CPU)以外のプロセッサに実行のためにオフロードされる実行可能プログラムコードとして実装されるのとは対照的に、回路を使用して実装されるため、プログラム可能ICを使用して実装されるカーネルは、ハードウェアで加速される。ハードウェアへと合成されているヘテロジニアスマルチプロセッサ設計のカーネル部分は、ヘテロジニアスマルチプロセッサ設計のホストと協調して動作する。
【0013】
一態様において、プログラム可能ICは、ベースプラットフォームを提供することができる。カーネル(複数可)は、ベースプラットフォームで、および/または、ベースプラットフォームと協調して実装することができる。ベースプラットフォームは、カーネルが、プログラム可能ICが結合される対象プラットフォームおよびホストと通信するために必要なインフラストラクチャを提供する。ベースプラットフォームは、たとえば、対象プラットフォームの供給元によって実装または決定されてもよい。したがって、ベースプラットフォームは、使用されるプログラム可能ICの特定のモデルまたはタイプ、および、プログラム可能ICとともに使用される対象プラットフォームのモデルまたはタイプに従って変化してもよい。
【0014】
本明細書において記載される本発明の構成は、データ処理システムによって実施される方法またはプロセスとして実装されてもよい。一実施例において、方法は、1つまたは複数のカーネルがプログラム可能ICのプログラム可能回路内で実施されるヘテロジニアスマルチプロセッサ設計の実施態様向けに意図されてもよい。別の実施例において、方法は、プログラム可能ICを使用して実装されるカーネルを含むヘテロジニアスマルチプロセッサシステムの動作、たとえば、ランタイム動作向けに意図されてもよい。
【0015】
別の態様において、本発明の構成は、CPUを有するデータ処理システムとして実装されてもよい。データ処理システムは、1つまたは複数のカーネルがプログラム可能ICのプログラム可能回路内で実施されるヘテロジニアスマルチプロセッサ設計の実施態様向けに意図されている方法、たとえば、コンパイル時方法を実施することができる。データ処理システムはまた、プログラム可能ICを含むこともできる。その場合、データ処理システムは、プログラム可能ICを使用して実施されるカーネルを含むヘテロジニアスマルチプロセッサシステムの動作、たとえば、ランタイム動作向けに意図されている方法を実施することができる。
【0016】
また別の態様において、本発明の構成は、ICとして実装されてもよい。ICは、ベースプラットフォームを含むことができる。ICはまた、ベースプラットフォームと協調して動作する、内部に実装されている1つまたは複数のカーネルを含むように構成することもできる。ICは、IC内で実装されるカーネル(複数可)および/または様々なホスト対話を含む動作のランタイム方法を実施することができる。
【0017】
また別の態様において、本発明の構成は、実行されると、プロセッサおよび/またはシステムに、本明細書において記載される様々な方法および/またはプロセスを実施および/または開始させるプログラムコードを記憶している非一時的コンピュータ可読記憶媒体として実装されてもよい。
【0018】
図解を単純かつ明瞭にする目的で、図面内に示されている要素は、必ずしも原寸に比例して描かれているとは限らない。たとえば、いくつかの要素の寸法は、明瞭にするために他の要素に対して誇張されている場合がある。さらに、適切であると考えられる場合、対応する、類似した、または同様の特徴を示すために、参照符号は複数の図面の間で繰り返される。
【0019】
図1は、ICの例示的なアーキテクチャ100を示すブロック図である。一態様において、アーキテクチャ100は、フィールドプログラマブルゲートアレイ(FPGA)タイプのIC内に実装される。アーキテクチャ100がプロセッサを含む場合、アーキテクチャ100はまた、SOCタイプのICをも表す。SOCは、プログラムコードを実行するプロセッサ、および、1つまたは複数の他の回路システムを含むICである。回路システムは、プロセッサと同じ基板内に実装される。回路システムは、互いに、および、プロセッサと協調して動作することができる。
【0020】
図示されているように、アーキテクチャ100は、様々な異なるタイプのプログラム可能回路、たとえば、論理、ブロックを含む。たとえば、アーキテクチャ100は、マルチギガビット送受信機(MGT)101、構成可能論理ブロック(CLB)102、ランダムアクセスメモリブロック(BRAM)103、入出力ブロック(IOB)104、構成およびクロッキング論理(CONFIG/CLOCKS)105、デジタル信号処理ブロック(DSP)106、特殊I/Oブロック107(たとえば、構成ポートおよびクロックポート)、および、デジタルクロックマネージャ、アナログ−デジタル変換器、システムモニタリング論理などの他のプログラム可能論理108を含む、多数の異なるプログラム可能タイルを含むことができる。
【0021】
いくつかのICにおいて、各プログラム可能タイルは、各隣接するタイル内の対応する相互接続要素(INT)111への、および、当該INT 111からの標準化された接続を有する、プログラム可能相互接続要素(INT)111を含む。それゆえ、INT 111は、ともに利用されると、図解されているICのプログラム可能相互接続構造を実装する。各INT 111はまた、
図1の上部に含まれている実施例によって示されるように、同じタイル内のプログラム可能論理要素への、および、当該要素からの接続をも含む。
【0022】
たとえば、CLB 102は、単一のINT 111に加えて、ユーザ論理を実施するようにプログラムすることができる構成可能論理要素(CLE)112を含むことができる。BRAM 103は、1つまたは複数のINT 111に加えて、BRAM論理要素(BRL)113を含むことができる。一般的に、1つのタイル内に含まれるINT 111の数は、タイルの高さに依存する。図示されているように、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)も使用されてもよい。DSPタイル106は、適切な数のINT 111に加えて、DSP論理要素(DSPL)114を含むことができる。IOB 104は、INT 111の1つのインスタンスに加えて、たとえば、I/O論理要素(IOL)115の2つのインスタンスを含むことができる。当業者にとって明らかになるように、たとえば、IOL 115に接続されている実際のI/Oパッドは一般的には、IOL 115の領域に閉じ込められない。
【0023】
図1に示す実施例において、たとえば、領域105、107、および108から形成される、ダイの中心付近の列状領域は、構成、クロック、および他の制御論理に使用することができる。この列から延伸する水平領域109は、クロックおよび構成信号をプログラム可能ICの幅にわたって分散させるために使用される。
【0024】
図1に示すアーキテクチャを利用するいくつかのICは、このICの大部分を構成する規則的な列状構造を乱す追加の論理ブロックを含む。追加の論理ブロックは、プログラム可能ブロックおよび/または専用回路であってもよい。たとえば、PROC 110として示されている任意選択のプロセッサブロックが、CLBおよびBRAMのいくつかの列にわたる。
【0025】
一態様において、PROC 110は、ICのプログラム可能回路を実装するダイの一部分として作製される専用回路として、たとえば、ハードワイヤードプロセッサとして実装される。PROC 110は、個々のプロセッサ、たとえば、プログラムコードを実行することが可能な単一のコアから、1つまたは複数のコア、モジュール、コプロセッサ、インターフェースなどを有するプロセッサシステム全体まで複雑に様々な異なるプロセッサタイプおよび/またはシステムのいずれかを表すことができる。
【0026】
別の態様において、PROC 110は、アーキテクチャ100から省かれ、記載されている他の様々なプログラム可能ブロックのうちの1つまたは複数と置き換えられる。さらに、そのようなブロックは、プログラム可能論理の様々なブロックを使用して、PROC 110と同様にプログラムコードを実行することができるプロセッサを形成することができるという点において、「ソフトプロセッサ」を形成するために利用されてもよい。
【0027】
「プログラム可能回路」という語句は、IC内のプログラム可能回路要素、たとえば、本明細書において記載されている様々なプログラム可能もしくは構成可能回路ブロックもしくはタイル、ならびに、ICにロードされる構成データに従って様々な回路ブロック、タイル、および/もしくは要素を選択的に結合する相互接続回路を指す。たとえば、
図1に示す、CLB 102およびBRAM 103のような、PROC 110の外部にある部分は、ICのプログラム可能回路と考えられる。
【0028】
一般的に、プログラム可能回路の機能は、構成データがICにロードされるまで確立されない。構成ビットセットを使用して、FPGAのようなICのプログラム可能回路をプログラムすることができる。構成ビット(複数可)は一般的に、「構成ビットストリーム」として参照される。一般的に、プログラム可能回路は、最初に構成ビットストリームをICにロードしなければ動作可能または機能可能でない。構成ビットストリームは実効的に、プログラム可能回路内の特定の回路設計を実装またはインスタンス化する。回路設計は、たとえば、プログラム可能回路ブロックの機能態様、および、様々なプログラム可能回路ブロックの間の物理接続を指定する。
【0029】
「ハードワイヤード」または「ハード化」されている、すなわち、プログラム可能でない回路は、ICの一部分として製造される。プログラム可能回路とは異なり、ハードワイヤード回路または回路ブロックは、ICの製造後に構成ビットストリームをロードすることによって実装されるのではない。ハードワイヤード回路は一般的に、たとえば、最初に構成ビットストリームをIC、たとえば、PROC 110にロードすることなく機能可能である専用回路ブロックおよび相互接続を有すると考えられる。
【0030】
場合によっては、ハードワイヤード回路は、IC内の1つまたは複数のメモリ要素内に記憶されているレジスタ設定または値に従って設定または選択することができる1つまたは複数の動作モードを有することができる。動作モードは、たとえば、構成ビットストリームをICにロードすることによって設定することができる。この機能があるにもかかわらず、ハードワイヤード回路は、ICの一部分として製造されるときに動作可能であり、特定の機能を有するため、プログラム可能回路とは考えられない。
【0031】
SOCの場合、構成ビットストリームは、プログラム可能回路内に実装されるべきである回路、および、PROC 110またはソフトプロセッサによって実行されるべきであるプログラムコードを指定することができる。いくつかの事例において、アーキテクチャ100は、構成ビットストリームを適切な構成メモリおよび/またはプロセッサメモリにロードする専用構成プロセッサを含む。構成プロセッサは、含まれる場合のPROC 110とは異なり、ユーザプログラムコードを実行しない。他の事例において、アーキテクチャ100は、PROC 110を利用して、構成ビットストリームを受信し、構成ビットストリームを適切な構成メモリにロードし、かつ/または、プログラムコードを実行のために抽出することができる。
【0032】
図1は、プログラム可能回路、たとえば、プログラマブルファブリックを含むICを実装するために使用することができる例示的なアーキテクチャを示すように意図されている。たとえば、列内の論理ブロックの数、列の相対幅、列の数および順序、列内に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および、
図1の上部に含まれている相互接続/論理実施態様は、単なる例示である。実際のICにおいて、たとえば、ユーザ回路設計の効率的な実施を容易にするために、CLBが現れるところであればどこであっても、一般的に、CLBの2つ以上の隣接する列が含まれる。しかしながら、隣接するCLB列の数は、ICの全体サイズによって変化してもよい。さらに、IC内でのPROC 110のようなブロックのサイズおよび/または位置付けは、例示のみを目的としており、限定することを意図していない。
【0033】
図2は、例示的なデータ処理システム(システム)200を示すブロック図である。一態様において、システム200は、プログラム可能IC内の回路としての、ヘテロジニアスマルチプロセッサ設計のカーネル、たとえば、プログラムを実装するようにプログラムすることができるコンパイル時システムを表すことができる。本明細書における定義としては、「ヘテロジニアスマルチプロセッサ設計」は、ホストシステム上で実行する一部分、および、異なるデバイスまたはプロセッサ上で実行するカーネルと称される少なくとも1つの追加の部分を含むプログラムである。ヘテロジニアスマルチプロセッサ設計の一実施例は、OpenCLプログラムまたは設計である。一実施例において、ホスト上で実行する部分は、異なるデバイスまたはプロセッサ上で実行する部分とは異なるプログラミング言語で指定することができる。プログラム可能ICは、
図1を参照して説明されているようなアーキテクチャを有することができる。
【0034】
別の態様において、システム200は、プロセッサがホストとして機能し、プログラム可能ICが1つまたは複数のカーネルを実装するランタイムヘテロジニアスマルチプロセッサシステムを表すことができる。本明細書において定義されている「ヘテロジニアスマルチプロセッサシステム」は、2つ以上のプロセッサを含むコンピューティングシステムである。2つ以上のプロセッサは、異なるタイプのプロセッサとすることができる。たとえば、ヘテロジニアスマルチプロセッサシステムは、中央処理装置(CPU)、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、FPGAのようなプログラム可能ICなどを含んでもよい。ヘテロジニアスマルチプロセッサシステムは、OpenCLシステムであってもよい。
【0035】
図示されているように、システム200は、システムバス215を通じてメモリ要素210または他の適切な回路に結合されている少なくとも1つのプロセッサ、たとえば、中央処理装置(CPU)205を含む。システム200は、メモリ要素210内にプログラムコードを記憶する。プロセッサ205は、システムバス215を介してメモリ要素210からアクセスされるプログラムコードを実行する。一態様において、システム200は、プログラムコードを記憶および/または実行するのに適しているコンピュータまたは他のデータ処理システムとして実装される。しかしながら、システム200は、本開示内で記載されている機能を実施することが可能である、プロセッサおよびメモリを含む任意のシステムの形態で実装されてもよいことが諒解されるべきである。さらに、システム200は、1つまたは複数のネットワーク化データ処理システム、たとえば、サーバとして実装されてもよい。
【0036】
メモリ要素210は、たとえば、ローカルメモリ220および1つまたは複数の大容量記憶デバイス225のような、1つまたは複数の物理メモリデバイスを含む。ローカルメモリ220は、一般的にプログラムコードの実際の実行中に使用されるランダムアクセスメモリ(RAM)または他の非持続性メモリデバイス(複数可)を指す。大容量記憶デバイス225は、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)、または他の持続性データ記憶デバイスとして実装されてもよい。システム200はまた、実行中にプログラムコードが大容量記憶デバイス225から取り出されなければならない回数を低減するために、少なくともいくらかのプログラムコードの一時記憶を可能にする1つまたは複数のキャッシュメモリ(図示せず)をも含むことができる。
【0037】
キーボード230、ディスプレイデバイス235、およびポインティングデバイス240のような入出力(I/O)デバイスが、任意選択的にシステム200に結合されてもよい。I/Oデバイスは、直接的に、または、介在するI/Oコントローラを通じてシステム200に結合することができる。システム200が介在する私的または公衆ネットワークを通じて、他のシステム、コンピュータシステム、遠隔プリンタ、遠隔記憶デバイス、および/または、対象プラットフォーム260に結合されることを可能にするために、ネットワークアダプタ245もまた、システム200に結合することができる。システム200とともに使用することができる種々のタイプのネットワークアダプタ245の実施例は、モデム、ケーブルモデム、Ethernet(登録商標)カード、および、ワイヤレス送受信機である。システム200が対象プラットフォーム260を含む前述したシステムのいずれかのような別のシステムに結合されることを可能にするために、ユニバーサルシリアルバスポート、FireWireポート、周辺構成要素相互接続(PCI)および/またはPCI Express(PCIe)ポートなどのような通信ポート250もまた、システム200に結合することができる。
【0038】
一態様において、メモリ要素210は、電子設計自動化(EDA)アプリケーション255を記憶する。EDAアプリケーション255は、たとえば、システム200がコンパイル時システムを表す実施態様において記憶され得る。EDAアプリケーション255は、1つまたは複数の異なる構成要素またはモジュールを含むことができる。実行可能プログラムコードの形態で実装されるEDAアプリケーション255は、システム200によって実行される。そのため、EDAアプリケーション255は、システム200の一体部分と考えられる。EDAアプリケーション255、ならびに、EDAアプリケーション255を実行している間にシステム200によって使用、生成、および/または生成される任意のデータ項目は、システム200の一部分として利用されるときに機能性を付与する機能データ構造である。コンパイル時システムとしては、ホストアプリケーション258が、システム200から除外され得る。
【0039】
コンパイル時システムの場合、ユーザは、EDAアプリケーション255を実行するシステム200を通じて作業する。システム200は、ヘテロジニアスマルチプロセッサ設計275を入力として受信し、ヘテロジニアスマルチプロセッサ設計275の1つまたは複数のカーネルを、IC270内で実装することができる回路へと合成することができる。システム200は、バイナリコンテナ280を生成および出力することができる。一態様において、バイナリコンテナ280は、部分または全体のいずれかにかかわらず、その内部の内容の記述および1つまたは複数の構成ビットストリームを含むことができる。別の態様において、バイナリコンテナ280は、その内部の内容の記述、1つまたは複数の実行可能シミュレーションファイル、および/または、レジスタ転送レベル(RTL)もしくはハードウェア記述言語シミュレータ内でシミュレートすることができる1つもしくは複数のRTLファイルを含むことができる。その場合、バイナリコンテナ280は、実行可能シミュレーションファイル(複数可)および/またはRTLファイル(複数可)に加えて、部分または全体のいずれかにかかわらず、1つまたは複数の構成ビットストリームを含むことができる。バイナリコンテナ280は、メモリ要素210内に記憶されてもよく、かつ/または、ネットワークアダプタ245および/もしくは通信ポート250によって別のシステムに提供されてもよい。
【0040】
別の態様において、メモリ要素210は、ホストアプリケーション258を記憶する。ホストアプリケーション258は、たとえば、システム200がヘテロジニアスマルチプロセッサランタイムシステムを表す実施態様において記憶され得る。ホストアプリケーション258は、1つまたは複数の異なる構成要素またはモジュールを含むことができる。実行可能プログラムコードの形態で実装されるホストアプリケーション258は、システム200によって実行される。そのため、ホストアプリケーション258は、システム200の一体部分と考えられる。ホストアプリケーション258、ならびに、ホストアプリケーション258を実行している間にシステム200によって使用、生成、および/または生成される任意のデータ項目は、システム200の一部分として利用されるときに機能性を付与する機能データ構造である。ランタイムシステムとしては、EDAアプリケーション255が、システム200から除外され得る。
【0041】
システム200は、通信リンク265を通じて対象プラットフォーム260に結合することができる。ランタイムシステム実施態様の場合、対象プラットフォーム260は、システム200に結合されるか、または、その一部分と考えられる。したがって、コンパイル時システムの場合、対象プラットフォーム260は除外され得ることが諒解されるべきである。引き続き対象プラットフォーム260について、通信リンク265は、通信ポート250および/またはネットワークアダプタ245に結合するように動作可能である様々な異なる有線および/または無線接続のいずれかとして実装されてもよい。
【0042】
対象プラットフォーム260は、回路が実装されているプリント回路基板のような回路基板として実装されてもよい。対象プラットフォームは、たとえば、システム200内の、または、システム200の外部の通信ポート250のための機械的コネクタに差し込むことができるカードとして実装されてもよい。対象プラットフォーム260は、通信リンク265に結合するコネクタを含むことができる。コネクタは、対象プラットフォーム260の回路を使用して、IC 270に結合することができる。
【0043】
IC 270は、ソケット、レセプタクル、IC 270を対象プラットフォーム260に直接的にはんだ付けすることのような別の取り付け技法などを使用して、対象プラットフォーム260に結合することができる。IC 270は、対象プラットフォーム260を通じて通信リンク265に結合する。一態様において、IC 270はプログラム可能ICである。IC 270は、たとえば、
図1を参照して説明されているアーキテクチャを使用して実装されてもよい。別の態様において、IC 270は、SOCとして実装されてもよい。IC 270は、ヘテロジニアスマルチプロセッサ設計の1つまたは複数のカーネルを、回路として実装することができる。ヘテロジニアスマルチプロセッサ設計は、OpenCL設計であってもよい。
【0044】
ランタイムシステムの場合、プロセッサ205はホストとして動作することができる。ヘテロジニアスマルチプロセッサ設計の1つまたは複数のカーネルは、IC 270内に実装することができる。動作中、IC 270は、場合によって構成または再構成されないIC 270の他の部分に対する妨害を引き起こすことなく、動作中である間に場合によって動的に構成または再構成することができるため、必要に応じて、IC 270内に新たなおよび/または異なるカーネルを実装することができる。
【0045】
図3は、
図2の対象プラットフォーム260の例示的なアーキテクチャを示すブロック図である。図示されているように、IC 270およびRAM 345が、対象プラットフォーム260に結合されている。対象プラットフォーム260はまた、IC 270に結合されているコネクタ350をもしくは含む。カードエッジタイプのコネクタとして示されているが、コネクタ350は、様々な異なるコネクタタイプのうちのいずれかとして実装されてもよいことが諒解されるべきである。さらに、対象プラットフォーム260は、1つまたは複数の他の構成要素(図示せず)を含んでもよい。追加の構成要素は、たとえば、コネクタ350とIC 270との間に結合されてもよい。
【0046】
IC 270は、静的領域335とカーネル領域340とを含む。一態様において、静的領域335は、ヘテロジニアスマルチプロセッサプログラミングモデルをサポートするために必要とされるインフラストラクチャIPを含む。一実施例において、ヘテロジニアスマルチプロセッサプログラミングモデルは、OpenCLモデルである。静的領域335は、たとえば、実行時間中に、カーネル領域340を、RAM 345のような対象プラットフォーム260上に位置する他の構成要素、および/または、ホストのような他のシステム、たとえば、プロセッサ205と通信可能にリンクする。静的領域335は、たとえば、ホストと通信するために使用されるソフトウェアインターフェースを実装することができる。一態様において、静的領域335は、対象プラットフォーム260の供給元および/または製造元によって提供される回路実施態様であってもよい。
【0047】
カーネル領域340は、IC 330の、カーネルが実装されている部分を表す。一態様において、カーネル領域340は、静的領域335とのメモリマップドインターフェースを有することができる。カーネル領域340は、静的領域335とは異なり、動的に生成し、静的領域335と統合することができる。たとえば、異なるカーネルおよびカーネルの異なる組み合わせを、ランタイム中にカーネル領域340内で異なる時点において実装することができる。
【0048】
図4は、対象プラットフォーム260を含むヘテロジニアスマルチプロセッサランタイムシステムの例示的な層を示すブロック図である。一実施例において、ヘテロジニアスマルチプロセッサランタイムシステムは、OpenCLシステムである。図示されているように、ホストは、ホストアプリケーション内に実装されるランタイム層405を実行する。論じられているように、ホストは、
図2を参照して説明されているシステム200のプロセッサ205として実装することができる。対象プラットフォームソフトウェア層415が、対象プラットフォーム回路内に実装される。ランタイム層405は、共通の低レベルドライバインターフェース410を通じて対象プラットフォームソフトウェア層415と通信する。たとえば、ランタイム層405は、対象プラットフォームソフトウェア層415と通信するために共通の低レベルドライバ410において定義されている、標準的な文書化されたアプリケーションプログラミングインターフェース(API)を使用する。対象プラットフォームソフトウェア層415は、たとえば、カーネルドライバとして実装されてもよい。
【0049】
対象プラットフォーム260の回路内で実行する対象プラットフォームソフトウェア層415は、対象プラットフォーム特有のプログラミングインターフェース420、たとえば、ハードウェアプログラミングインターフェースを通じて、静的領域335と通信する。静的領域335は、カーネル領域340に、クロックおよびリセット信号430を提供する。静的領域335はまた、制御レジスタ(図示せず)に結合されているメモリマップドスレーブインターフェース440を通じてカーネル領域340に情報を提供する。カーネル領域340は、RAM 345に結合されているメモリマップドバスマスタインターフェース435を通じて静的領域335に情報を提供する。
【0050】
図5は、
図3のIC 270内に実装される例示的な回路を示すブロック図である。より詳細には、
図5は、静的領域335を実装するために使用することができる例示的なアーキテクチャを示す。ブロック505、510、515、520、および525の各々は、回路ブロックを表す。静的領域335の部分としてのブロック505〜525の各々、および、カーネル領域340は、IC 270のプログラム可能回路内で実装することができる。
【0051】
図示されているように、静的領域335は、バスダイレクトメモリアクセス(DMA)コントローラ510に結合されているバスエンドポイント505を含むことができる。バスDMAコントローラ510は、インターコネクト515に結合されている。インターコネクト515は、インターコネクト520およびカーネル領域340に結合する。インターコネクト520は、カーネル領域340およびメモリコントローラ525に結合する。メモリコントローラ525は、IC 270の外部で実装されているRAM 345に結合する。
【0052】
バスエンドポイント505は、バスを介してヘテロジニアスマルチプロセッサ設計のホストと通信するように構成されている。バスDMAコントローラ510は、ホストRAM、たとえば、ローカルメモリ220と対象プラットフォーム260上のRAM 345との間のDMA機能をサポートするために含むことができる。一態様において、バスDMAコントローラ510は、マスタインターフェース530を含む。インターコネクト515は、スレーブインターフェース535ならびにマスタインターフェース540および545を含むことができる。図示されているように、スレーブインターフェース535は、マスタインターフェース530に結合されている。カーネル領域340は、スレーブインターフェース550およびマスタインターフェース555を含む。インターコネクト515のマスタインターフェース545は、カーネル領域340のスレーブインターフェース550に結合されている。
【0053】
インターコネクト520は、スレーブインターフェース560および565ならびにマスタインターフェース570を含む。メモリコントローラ525は、スレーブインターフェース575を含む。図示されているように、インターコネクト515のマスタインターフェース540は、インターコネクト520のスレーブインターフェース560に結合されている。カーネル領域340のマスタインターフェース555は、インターコネクト520のスレーブインターフェース565に結合されている。
【0054】
インターコネクト515および520は、2つ以上の他の回路ブロックをともに結合するように構成されている回路ブロックである。一態様において、インターコネクト515および520は、1つまたは複数のメモリマップドマスタデバイスを、1つまたは複数のメモリマップドスレーブデバイスと結合する回路ブロックとして実装することができる。相互接続回路ブロック実施態様の一実施例は、英国ケンブリッジ所在のARM(登録商標)LtdのAMBA(登録商標)AXIバージョン4仕様に一致するものである。しかしながら、インターコネクト515および520を実装するために、他の相互接続タイプおよび/または技術が使用されてもよいことは諒解されるべきである。本開示は、与えられている例示的な相互接続回路ブロックによって限定されるようには意図されていない。
【0055】
図5に示されているアーキテクチャ内で、バスDMAコントローラ510およびカーネル領域340は、メモリコントローラ525に対するマスタとして機能する。インターコネクト515は、ホストが、たとえば、バスを介してRAM 345に対して読み出しおよび書き込みを行うことを可能にする。インターコネクト520は、メモリコントローラ525に対する2つのバスマスタ、すなわち、バスDMAコントローラ510およびカーネル領域340の作成をサポートする。
【0056】
カーネル領域340は、まず、コンパイルされたヘテロジニアスマルチプロセッサ設計カーネルのコンテナとして実装され得る。一態様において、カーネル領域340は、コンパイルされたカーネルのためのプレースホルダを有する階層型IPとして実装することができる。1つまたは複数のカーネルが、カーネル領域340内に含まれ得る。一実施例において、最大16個のカーネルが、カーネル領域340内に含まれ得る。ホストからのコマンドが、スレーブインターフェース550を通じて受信され得る。カーネル領域340は、マスタインターフェース555を通じてメモリコントローラ525にコマンドを与えることができる。マスタインターフェース545とスレーブインターフェース550との間の接続を通じて、カーネル領域340および内部に実装されている任意のカーネルにクロックおよびリセット信号が与えられる。
【0057】
図6は、カーネル領域340の例示的な実施態様を示すブロック図である。図示されているように、カーネル領域340は追加のインターコネクト605および615を含む。インターコネクト605は、インターコネクト515のマスタインターフェース545に結合されているスレーブインターフェース550を含む。インターコネクト605は、カーネル回路610−1のスレーブインターフェース630に結合されているマスタインターフェース625をさらに含む。マスタインターフェース625はまた、1つまたは複数の他のカーネル回路610−Nにも結合することができ、Nは整数値である。
【0058】
まとめてカーネル回路610−1〜610−Nとして示されるカーネル回路610は、同じカーネル回路の複数のインスタンスを表すことができ、そのため、同じカーネルの複数のインスタンスを表すことができる。別の実施例において、カーネル回路610は、2つ以上の異なるカーネル回路を表すことができる。また別の実施例において、カーネル回路610は、第1のカーネル回路、および、1つまたは複数の追加の異なるカーネル回路の1つまたは複数のインスタンスを表すことができる。インターコネクト615は、各カーネル回路610のマスタインターフェース640および645に結合するスレーブインターフェース650を有する。インターコネクト615は、インターコネクト520のスレーブインターフェース565に結合するマスタインターフェース555を含む。
【0059】
一態様において、インターコネクト605および615は、カーネル回路の最大16個の異なるインスタンス、16個の異なるカーネル回路、または、16を超えないようなその組み合わせをサポートすることができる。論じられているように、カーネル領域340内で実装することができるカーネルおよび/またはカーネルインスタンスの特定の数は、限定ではなく例示を目的として与えられている。
【0060】
OpenCLのようなヘテロジニアスマルチプロセッサフレームワーク内で、並列カーネル呼び出しは、NDRangeとして参照される1、2、または3Dインデックス空間として記述され得る。NDRangeは、複数のワークグループに分割される。ワークグループは、複数のワークアイテムを含む。たとえば、NDRange内の各ポイントが、ワークアイテムとして参照される。
【0061】
ヘテロジニアスマルチプロセッサ設計のカーネルは、1つまたは複数のコンピュートユニットにコンパイルされる。システム設計者、たとえば、ユーザは、所与のカーネルについて並列に実装されるべきであるコンピュートユニットの数を決定する。一態様において、カーネルのコンピュートユニットの数は、カーネル領域340内で実装され、並列に動作するカーネル回路のインスタンスの数を示す。各コンピュートユニットは、ホストによって決定され、与えられるものとしての1つのワークグループを処理することが可能である。
【0062】
図6の実施例において、各カーネル回路ブロック610−1〜610−Nは、ワークユニットの回路を表す。カーネル回路ブロック610−1〜610−Nは、同じカーネルのワークユニット、たとえば、並列に動作する複数のインスタンス、または、カーネルのうちの1つまたは複数が複数のインスタンスによってカーネル領域340内で実装される、並列に動作する2つ以上のカーネルのワークユニットを表すことができる。
【0063】
図7は、ヘテロジニアスマルチプロセッサ設計のカーネルを実装する例示的な方法700を示す流れ図である。一実施例において、ヘテロジニアスマルチプロセッサ設計は、OpenCL設計であってもよい。方法700は、
図2を参照して説明されているシステムのような、コンパイル時システムによって実施され得る。方法700は、ヘテロジニアスマルチプロセッサ設計が、C、C++、OpenCL、OpenCL C、OpenCL互換高レベルプログラミング言語、または、他の高レベルプログラミング言語で指定されるカーネルを含む状態で開始することができる。一態様において、様々な高レベルプログラミング言語のいずれかが、カーネルを指定するために使用されてもよい。さらなる態様において、カーネルを指定するために使用される高レベルプログラミング言語は、並列性または並列動作の明示的な仕様または表記をサポートするものであってもよい。システムはカーネルにアクセスすることができる。
【0064】
ブロック705において、システムは、カーネルのRTL記述を生成する。RTL記述は、ハードウェア記述言語(HDL)を使用して指定することができる。本明細書での定義として、「ハードウェア記述言語」または「HDL」という用語は、集積回路のようなデジタルシステムの文書化、設計、および製造を促進するコンピュータ言語である。HDLは、プログラム検証技法を、エキスパートシステム設計方法と組み合わせる。HDLを使用して、たとえば、ユーザは、電子回路を設計して指定し、回路の動作を記述し、回路の動作を検証するための試験を作成することができる。HDLは、モデル化されている電子システムの空間的および時間的構造ならびに挙動の標準的なテキストベースの表現を含む。HDLシンタックスおよびセマンティクスは、同時並行性を表現するための明示的な表記を含む。ほとんどの高レベルプログラミング言語とは対照的に、HDLはまた、デジタルシステムの最重要属性である、時間の明示的な表記をも含む。
【0065】
ブロック710において、システムは、カーネルのRTL記述を、ベースプラットフォームと統合する。一態様において、ベースプラットフォームは、静的領域335内に実装され、
図4および/または
図5を参照して説明されている回路設計と同様または同じであってもよい。
【0066】
ブロック715において、システムは、構成ビットストリームおよびサポートデータを生成する。構成ビットストリームは、カーネルのハードウェア実施態様、たとえば、
図6を参照して説明されているようなコンピュートユニットを指定する。一態様において、構成ビットストリームは、たとえば、カーネル、または、1つもしくは複数のカーネルのみを指定する部分ビットストリームであってもよい。別の態様において、構成ビットストリームは、カーネル、または、場合によってカーネルおよびベースプラットフォームを指定する全ビットストリームであってもよい。
【0067】
サポートデータは、構成ビットストリームおよび/または構成ビットストリームの内容を記述する。一態様において、サポートデータは、カーネル実施態様に含まれているIPブロックおよび/またはコアのリストを指定することができる。別の態様において、サポートデータは、部分構成ビットストリームとして指定されるときに、カーネルのハードウェア実施態様が実装されることになる、プログラム可能IC内の2次元座標位置を指定することができる。
【0068】
ブロック720において、システムは、構成ビットストリームおよびサポートデータを、バイナリコンテナ内に含める。一態様において、バイナリコンテナは、複数の個別ファイルを含むことができる。たとえば、バイナリコンテナは、1つまたは複数の構成ビットストリームおよび1つまたは複数のサポートデータファイルを含むことができる。
【0069】
別の態様において、カーネル(複数可)のRTL記述が、バイナリコンテナ内に含まれてもよい。RTL記述はその後、RTLシミュレータを用いて、全体的なヘテロジニアスマルチプロセッサ設計シミュレーションの一部分としてカーネル実施態様を試験するために使用することができる。たとえば、ホストは、ヘテロジニアスマルチプロセッサ設計のランタイムシミュレーション中に、RTL記述(複数可)を含むバイナリコンテナを、RTLシミュレータに与えることができる。RTLシミュレータは、バイナリコンテナからRTL記述にアクセスすることができる。また別の態様において、試験および/またはシミュレーションを目的としてプロセッサを使用して実行することができる実行可能バージョンのカーネル(複数可)が、バイナリコンテナ内に含まれてもよい。たとえば、ホストは、ヘテロジニアスマルチプロセッサ設計のランタイムシミュレーション中に、実行可能バージョンのカーネルを含むバイナリコンテナを、シミュレータに与えることができる。カーネルの実行可能バージョンは、カーネルのハードウェア実施態様の実行可能モデルであってもよいことが諒解されるべきである。シミュレータは、バイナリコンテナからカーネルの実行可能バージョンにアクセスすることができる。したがって、バイナリコンテナは、プログラム可能ICによるランタイムの構成ビットストリームとして、データ処理システムに対するシミュレーションのための実行可能バージョンであるか、および/または、RTLシミュレータを使用したシミュレーションのためのRTLバージョンであるかにかかわらず、複数の異なるカーネル実施態様をサポートする。
【0070】
バイナリコンテナは、構成ビットストリーム(複数可)のみ、カーネル(複数可)の実行可能バージョン(複数可)のみ、カーネル(複数可)のRTLバージョン(複数可)のみ、構成ビットストリームおよびカーネルのRTLバージョン、構成ビットストリームおよびカーネルの実行可能バージョン、カーネル(複数可)の実行可能バージョンおよびRTLバージョン、または、構成ビットストリーム、カーネル(複数可)の実行可能バージョン、およびカーネル(複数可)のRTLバージョンを含むことができる。サポートデータはまた、バイナリコンテナ内で実装されるカーネルバージョンの上述した組み合わせのいずれかのために含まれ得る。ヘテロジニアスマルチプロセッサ設計、特に、OpenCL設計においてCPUおよび/またはGPU供給元によって使用される既存のコンテナは、「インメモリ」で協働し、マッピングされたオブジェクトに対処する。そのようなコンテナは、カーネルのシミュレーションバージョンまたは同じコンテナ内の複数の異なるカーネルタイプをサポートしない。
【0071】
使用されているバイナリコンテナは、複数の異なるタイプのカーネル実施態様をサポートすることができるが、一態様において、第1のコンテナが、第1のタイプのカーネル実施態様、たとえば、構成ビットストリーム、RTL記述、または実行ファイルを含んでもよく、一方で、第2のバイナリコンテナが、異なるタイプのカーネル実施態様を含んでもよい。また別の態様において、第1のコンテナが、第1のカーネルを指定する部分構成ビットストリームを含んでもよく、一方で、第2のコンテナが、第2の異なるカーネルを指定する部分構成ビットストリームを含んでもよい。
【0072】
ホストとカーネルとの通信のための、OpenCLのようなヘテロジニアスマルチプロセッサコンピューティング言語のための標準的なAPIは、バイナリオブジェクトファイルのみをサポートする。システムによって生成されるバイナリコンテナは、すべての予めコンパイルされたカーネルが自己完結型オブジェクトを通じてアクセス可能であるべきであるというこのバイナリ要件に従う。ブロック720において生成されるバイナリコンテナは、ホストによって、ランタイム中にプログラム可能IC内でカーネル回路、たとえば、コンピュートユニットを実装するために使用することができる。
【0073】
図8は、プログラム可能IC内にヘテロジニアスマルチプロセッサ設計のカーネルを実装するための例示的なプロセス800を示すブロック流れ図である。一実施例において、ヘテロジニアスマルチプロセッサ設計は、OpenCL設計であってもよい。プロセス800は、EDAアプリケーション255を実行する、
図2を参照して説明されているシステムのようなシステムによって実施され得る。一態様において、EDAアプリケーション255は、OpenCLコンパイラツールとして実装されてもよい。プロセス800は、例示的なコンパイル時システム実施態様を示す。
【0074】
図示されているように、たとえば、ヘテロジニアスマルチプロセッサアプリケーション、OpenCL設計、または、OpenCLアプリケーションとしても参照されるヘテロジニアスマルチプロセッサ設計275は、ホストコード805およびカーネル815を含むことができる。1つのカーネルが図示されているが、ヘテロジニアスマルチプロセッサ設計275は、プロセス800を通じて実装することができる2つ以上のカーネルを含むことができることが諒解されるべきである。ホストコード805は、ヘテロジニアスマルチプロセッサ設計275の、ホスト内で実行する部分である。ホストコード805は、C、C++などのような高レベルプログラミング言語で指定することができる。
【0075】
本明細書における定義として、「高レベルプログラミング言語」という用語は、命令がデータ処理システムの詳細からの強い抽象化を有する、データ処理システムをプログラムするために使用されるプログラミング言語または命令セット、たとえば、機械言語を意味する。たとえば、高レベルプログラミング言語は、メモリ管理のような、データ処理システムの動作の態様を自動化するか、または、隠すことができる。抽象化の量が、一般的に、そのプログラミング言語がどれだけ「高レベル」であるかを規定する。高レベルプログラミング言語が使用されるとき、ユーザは、高レベルプログラミング言語が実行するデータ処理システムのレジスタ、メモリアドレスなどに対処する必要がない。これに関連して、高レベルプログラミング言語は、データ処理システムのネイティブオペコードに直接的に1対1で変換される命令をほとんどまたは全く含まない。高レベルプログラミング言語の実施例は、限定はしないが、C、C++、SystemCなどを含む。
【0076】
ホストコード805が、Cコンパイラ840または他の高レベル言語コンパイラに与えられる。Cコンパイラ840は、App.o 860として図示されているホストコード805のオブジェクトコードバージョンを生成する。リンカ885が、ヘテロジニアスマルチプロセッサランタイムライブラリ875、app.o 860を受信し、ホストアプリケーション894を生成する。ヘテロジニアスマルチプロセッサランタイムライブラリ875は、対象プラットフォームと通信するために使用される共通の低レベルドライバを含むことができる。ホストアプリケーション894は、ランタイムヘテロジニアスマルチプロセッサシステムのCPUによって実行される。
【0077】
ヘテロジニアスマルチプロセッサ高レベル合成ブロック890が、カーネル815を受信し、kernel.hdl 892を生成する。kernel.hdl 892は、カーネル815のRTLバージョンである。システムアセンブラ850が、kernel.hdl 892およびベースプラットフォーム記述825を受信する。一態様において、ベースプラットフォーム記述825は、実際のベースプラットフォームの諸態様を記述したメタデータファイルであってもよい。言及されているように、ベースプラットフォームは、プログラム可能IC 270の静的領域335内に実装される回路である。
【0078】
ベースプラットフォーム記述825から、システムアセンブラ850は、たとえば、対象プラットフォーム、および、カーネル実装のために使用されるべきプログラム可能ICの特定のタイプを決定する。たとえば、システムアセンブラ850は、ベースプラットフォームに関する実施態様詳細、ならびに、ホストによって対象プラットフォームおよびベースプラットフォームと通信するために必要とされる低レベルドライバを指定するディレクトリを識別することができる。識別されるディレクトリは、ベースプラットフォームの1つまたは複数のパッケージIPを含むことができる。システムアセンブラ850は、ベースプラットフォームをカーネルと結合するインターコネクトIPを含む、ベースプラットフォームのパッケージIPを取り出すことができる。インターコネクトIPは、たとえば、kernel.hdl 892をベースプラットフォームのパッケージIPと統合するか、または、組み込むために必要とされる様々な相互接続回路ブロックを指定することができる。システムアセンブラ850は、バイナリコンテナ280を生成する。システムアセンブラ850は、バイナリコンテナ280内に含まれるベースプラットフォームと一体化するカーネル815のハードウェア実施態様を指定する構成ビットストリームを生成することができる。
【0079】
バイナリコンテナ280内に含まれる各構成ビットストリームは、たとえば、カーネル815、または、場合によってはkernel.hdl 892から決定される1つまたは複数のコンピュートユニットを実装することができる。論じられているように、システム設計者は、所与のカーネルについて並列に実装されるべきコンピュートユニットの数を決定する。
【0080】
システムアセンブラ850は、ユーザ嗜好に応じて、前述したようにバイナリコンテナ280内に、kernel.hdl 892、たとえば、RTLシミュレーションのためのカーネル815のRTLバージョン、および/または、シミュレーションのためのカーネル815の実行ファイル、たとえば、オブジェクトコードバージョンを含めることができる。システムアセンブラ850はまた、バイナリコンテナ280内にサポートデータ(図示せず)をも含める。
【0081】
一態様において、システムアセンブラ850は、カーネル815を、ベースプラットフォームと統合する。ベースプラットフォーム記述825およびkernel.hdl 892において指定されている情報を有するシステムアセンブラ850は、たとえば、技術マッピング、配置、ルーティングなどのような、構成ビットストリームをもたらす機能を実施することによって、カーネル815をベースプラットフォームと統合することができる。構成ビットストリームは、ベースプラットフォームとカーネルの両方を指定する全構成ビットストリーム、または、カーネルのみを指定する部分構成ビットストリームであってもよい。いずれにせよ、システムアセンブラ850は、指定されているインターコネクトIPを使用して、ベースプラットフォームをカーネルと結合する。
【0082】
また別の態様において、システムアセンブラ850は、構成ビットストリーム以外のファイルを含めるためのバイナリコンテナ280を生成することができる。たとえば、言及されているように、カーネル815は、カーネル815のプロセッサが実行可能な、たとえば、オブジェクトコードのバージョンを生成するヘテロジニアスマルチプロセッサコンパイラに提供することができる。カーネル815の実行可能バージョン、たとえば、カーネル815のハードウェア実施態様の実行可能モデルは、システムアセンブラ850に提供することができる。システムアセンブラ850は、構成ビットストリームの代わりに、カーネル815の実行可能バージョンをバイナリコンテナ280内に含めることができる。別の実施例において、システムアセンブラ850は、構成ビットストリームの代わりに、kernel.hdl 892をバイナリコンテナ280内に含めることができる。
【0083】
図9は、IC270内での実装のために、ヘテロジニアスマルチプロセッサコンピューティング言語において指定されるカーネルを処理する例示的な方法900を示す流れ図である。一実施例において、ヘテロジニアスマルチプロセッサコンピューティング言語は、OpenCLであってもよい。方法900は、
図2を参照して説明されているシステムのような、コンパイル時システムによって実施され得る。一態様において、方法900は、OpenCL C、C、C++、別の高レベルプログラミング言語、または、本開示内で言及されている言語のうちの1つの派生形態および/もしくは変形形態において最初に指定されるカーネルのRTL記述の生成中に実施される様々な動作を示す。
【0084】
ブロック905において、システムは、カーネルのメモリアクセスを識別およびマッピングする。ヘテロジニアスマルチプロセッサグローバルメモリは、マスタメモリバスにマッピングすることができる。たとえば、OpenCLグローバルメモリを、AXIマスタメモリバスにマッピングすることができる。カーネルパラメータは、スレーブ制御バスにマッピングすることができる。たとえば、カーネルパラメータは、AXIスレーブ制御バスにマッピングすることができる。
【0085】
ブロック910において、システムは、カーネルによって利用されるパラメータを識別し、ICにおけるカーネルのハードウェア実装のためにメモリマップ内にパラメータを含める。ブロック915において、システムは、変数を、カーネルのプライベートメモリとしてのICのメモリ構造に相関付ける。ブロック920において、システムは、ローカルメモリ命令を、カーネルのローカルメモリとしてのICのメモリ構造に相関付ける。
【0086】
ブロック925において、システムは、カーネルの制御フローグラフを生成する。一態様において、システムは、カーネルをLLVM中間表現(IR)フォーマットに変換する。LLVM IRフォーマットから、システムは、内部のデータフローを識別することによって、制御フローグラフを生成する。ブロック930において、システムは制御フローグラフを使用してカーネルの並列領域を識別する。並列領域は、制御フローグラフにおいて分離することができる。たとえば、制御フローグラフ内の各並列領域について、領域は、領域に入る1つの制御エッジおよび領域を出る1つの制御エッジを有することになる。
【0087】
ブロック935において、システムは、任意選択的に、各並列領域周りに「for」ループを構築する。並列領域を識別子、各々を「for」ループとして表現することによって、データ並列実施態様であるカーネルが、C、C++などのような逐次高レベルプログラミング言語として表現されることが可能になる。ブロック940において、システムは、パイプライン処理を使用して回路記述を生成する。たとえば、システムは、並列領域を「for」ループとして表現することによって、C、C++などのような高レベルプログラミング言語が合成されることになるため、この領域を合成することができる。
【0088】
図10は、ヘテロジニアスマルチプロセッサシステムの例示的なメモリアーキテクチャ1000を示すブロック図である。一実施例において、ヘテロジニアスマルチプロセッサシステムは、OpenCLシステムである。図示されているように、ホスト1005が、ホストメモリ1010を含む。ホスト1005は、プロセッサ205として実装されてもよく、一方で、ホストメモリ1010は、メモリ要素210として実装されてもよい。ホスト1005は、対象プラットフォーム260ならびにグローバルメモリおよびコンスタントメモリ1015に結合される。論じられているように、グローバルメモリおよびコンスタントメモリ1015へのアクセスは、メモリコントローラ(図示せず)によって可能にすることができる。グローバルメモリおよびコンスタントメモリ1015は、RAM 345として実装されてもよく、メモリコントローラがIC 270内に実装される。しかしながら、メモリコントローラは、IC 270の外部にある対象プラットフォーム260上にあるが、IC 270と通信するように構成されているメモリコントローラとして実装されてもよいことが諒解されるべきである。
【0089】
IC 270は、コンピュートユニット1020および1025を含む。2つのコンピュートユニットがIC 270内に図示されているが、IC 270は、2つよりも少ないコンピュートユニットまたは2つよりも多いコンピュートユニットを含んでもよいことが諒解されるべきである。さらに、IC 270内に実装されている特定のコンピュートユニットおよびコンピュートユニットの特定の数は、ランタイム中に変化してもよい。コンピュートユニット1020および1025は、カーネル領域340の一部分として実装される。説明のために、静的領域335を図示してはいない。
【0090】
図示されているように、コンピュートユニット1020は、ローカルメモリ1030と、処理要素1040および1045と、プライベートメモリ1060および1065とを含む。ローカルメモリ1030は、処理要素1040および1045によって共有される。処理ユニット1040および1045の各々は、プライベートメモリ1060および1065のうちの、共有されない個々のメモリに結合される。コンピュートユニット1025は、ローカルメモリ1035と、処理要素1050および1055と、プライベートメモリ1070および1075とを含む。ローカルメモリ1035は、処理要素1050および1055によって共有される。処理ユニット1050および1055の各々は、プライベートメモリ1070および1075のうちの、共有されない個々のメモリに結合される。コンピュートユニット1020および1025は両方とも、グローバルメモリおよびコンスタントメモリ1020にアクセスすることができる。
【0091】
1つの例示的な実施態様において、ホストメモリ1010ならびにグローバルメモリおよびコンスタントメモリ1020は、対象プラットフォーム上のRAM、ホストRAM、および/またはホストの1つもしくは複数のキャッシュメモリを使用して実装されてもよい。ローカルメモリ1030および1035は、たとえば、1つまたは複数のBRAM 103を使用してIC 270内に実装されてもよい。プライベートメモリ1060、1065、1070、および1075は、CLB 102内に含まれているルックアップテーブルRAMを使用して実装されてもよい。
【0092】
IC 270のメモリ構造の、
図10のメモリアーキテクチャ1000のメモリへの割り当ては、例示のみを目的としてなされている。合成中、IC 270のメモリ構造の可用性および必要とされるメモリの量に応じて、IC 270の1つまたは複数の他のメモリ構造が、プライベートメモリおよび/またはローカルメモリを実装するために使用されてもよい。
【0093】
図11は、ヘテロジニアスマルチプロセッサコンピューティング言語において指定されるカーネルの例示的な処理を示すブロック図である。
図11はOpenCL実施例を示しているが、カーネルは、OpenCL以外の高レベルプログラミング言語で指定されてもよいこと、および、本開示内で記載されている本発明の構成は、与えられている実施例に限定されるようには意図されていないことが諒解されるべきである。一態様において、
図11は、
図9のブロック905において実施される処理を示す。図示されているように、システムは、カーネル内で「global int」命令を識別する。「global int」命令は、ホストからカーネルに渡される特定のバッファを示す。システムは、メモリアクセスを、インターコネクト上のトランザクションとしてマッピングする。
【0094】
別の態様において、
図11は、
図9のブロック910において実施される処理を示す。
図11の実施例において、システムは、「get_local_id(0);」関数によって示されているように識別子(id)が使用されることを決定する。ホストからカーネルへと渡される、たとえば、ポインタが、カーネル内に実装されるレジスタマップ内で指定される。idのようなデータは、ホストによって、たとえば、ランタイム中にホスト内で実行しているホストアプリケーションによって、カーネルに書き込まれる。たとえば、ホストは、idのような任意の必要なデータを、カーネル回路610のレジスタマップの適切なレジスタに書き込むことができる。
【0095】
システムはさらに、カーネルのプログラムコードの分析から、カーネルによって使用される任意の黙示的なパラメータを識別する。ホストからカーネルに与えられる必要があり得る黙示的なパラメータの例は、限定はしないが、ND範囲のサイズ、ワークグループのサイズなどを含む。いくつかの事例において、黙示的なパラメータは、ホストとカーネルとの間のインターフェースを通じて渡されなくてもよい。しかしながら、そのようなパラメータは、レジスタマップを通じて渡されてもよい。
【0096】
図12は、ヘテロジニアスマルチプロセッサコンピューティング言語において指定されるカーネルの例示的な処理を示すブロック図である。
図12はOpenCL実施例を示しているが、カーネルは、OpenCL以外の高レベルプログラミング言語で指定されてもよいこと、および、本開示内で記載されている本発明の構成は、与えられている実施例に限定されるようには意図されていないことが諒解されるべきである。一態様において、
図12は、
図9のブロック920および925において実施される処理を示す。
図12の実施例において、ブロック920を参照すると、「id」のような変数が、カーネルのプライベートメモリ1060を実装するメモリ構造に相関付けられる。プライベートメモリの例は、パイプラインレジスタ、小型アレイ、BRAM、ルックアップテーブルRAMなどを含み得る。ブロック925を参照すると、システムは、各「local int」メモリ命令を、カーネル内のBRAMのようなローカルメモリ1030と相関付ける。
【0097】
図13としてまとめて参照される
図13−1および
図13−2は、ヘテロジニアスマルチプロセッサコンピューティング言語において指定されるカーネルの処理を示す。一態様において、
図13は、
図9のブロック930および935において実施される処理を示す。
図13−1を参照すると、カーネル1300の例示的なOpenCL Cソースコードが図示されている。
図13はOpenCL実施例を示しているが、カーネルは、OpenCL以外の高レベルプログラミング言語で指定されてもよいこと、および、本開示内で記載されている本発明の構成は、与えられている実施例に限定されるようには意図されていないことが諒解されるべきである。
【0098】
システムは、カーネル1300の並列領域を、領域1305、1310、および1315として識別する。ブロック930における並列性の認識の一部分として、システムは、並列性を制御する特定の命令および/または構文を認識することができる。システムは、カーネル1300内の「バリア」命令のインスタンスを識別することができる。「バリア」命令は、たとえば、任意のワークアイテムがバリア命令を超えて進み得る前に、すべてのワークアイテムがバイラ命令に達しなければならないことを示す。バリア命令は、メモリフェンスまたは動悸メカニズムとして使用することができる。システムは、「async_work_group_copy()」命令(本明細書においては「async」ともいう)のインスタンスを識別することができる。「async」命令は、すべてのワークアイテムが、同じ引数を有するコピーに達しなければならないと指定する。したがって、一態様において、システムは、カーネル1300内の並列性を制御する命令を識別することによって、カーネル1300の並列領域を認識する。
【0099】
ヘテロジニアスマルチプロセッサ実行およびメモリモデルは、領域1305、1310、および1315の各々が、完全に並列に、完全に逐次的に、または、様々な組み合わせで実施され得ることを保証する。観察されなければならない直列化は、並列性に直に影響を与える命令および/または構文、たとえば、バリアおよび/またはasync命令によって発生する。
【0100】
図13−2は、カーネル1300に関するブロック925のデータフローグラフ生成を示す。並列領域1305、1310、および1315が示されている。領域1305内に含まれている「for」部分の終端または戻りに対応する第4の並列領域1305−1が含まれている。
【0101】
図14は、ヘテロジニアスマルチプロセッサコンピューティング言語において指定されるカーネルの例示的な処理を示すブロック図である。一実施例において、ヘテロジニアスマルチプロセッサコンピューティング言語は、OpenCLであってもよい。一態様において、
図14は、
図9のブロック935および940において実施される処理を示す。
図14の実施例において、グレースケール変換に対応する領域1310の処理が示されている。各ループ反復が、1つのワークアイテムを処理する。ループ全体が1つのワークグループを処理する。ループは、パイプラインとして実施することができ、クロックサイクルごとに新たなワークアイテムがパイプラインに導入される。図示されているように、システムは、並列領域1310周りに「for」ループ構文を作成する。図示されているようなパイプラインを使用して回路記述が生成され、ワークアイテムの各列がカーネルのパイプライン段に対応する。ワークアイテムの各行がサイクルに対応する。
【0102】
以下は、カーネルの例示的なレジスタマップを示す。
【0105】
図8を参照して説明されているようなヘテロジニアスマルチプロセッサHLS 890が、RTLにコンパイルされる各カーネルの上記で示されているようなカスタムレジスタマップを生成する。ホストは、対象プラットフォーム上に位置するデバイスメモリ内のバッファ、たとえば、OpenCLバッファのアドレス、カーネルに対するスカラー引数、および、カーネルを制御するための制御信号を渡すためにレジスタマップを使用することができる。レジスタマップはまた、ホストによって、OpenCL仕様によって必要とされる場合に、グループidおよびカーネルに対するグループオフセットを渡すために使用することもできる。一態様において、レジスタマップは、生成されるバイナリコンテナ内に含まれてもよい。たとえば、レジスタマップは、以前に説明されているバイナリコンテナに組み込まれるサポートデータの一部分であってもよい。
【0106】
以下は、例示的なプラットフォームメタデータファイルを示す。
【0109】
一態様において、上記で示されているプラットフォームメタデータファイルは、
図8を参照して説明されており、システムリンカ830に与えられるベースプラットフォーム記述825の一実施態様である。図示されているように、プラットフォームメタデータファイルは、プログラム可能ICが結合される対象プラットフォームまたは基板のタイプを指定する。さらに、プラットフォームメタデータファイルは、基板上のプログラム可能ICの特定の特徴、たとえば、モデルおよび/またはタイプ、ならびに、特定の領域、たとえば、静的領域のクロック周波数を示す。リンカ830は、プラットフォームメタデータファイルから対象プラットフォームを識別し、プラットフォームメタデータファイルにおいて指定される、対象プラットフォームのために命名されているディレクトリ構造にアクセスすることができる。
【0110】
図15は、例示的なディレクトリ構造1500である。示されている最上位ディレクトリは、システムリンカ830によってプラットフォームメタデータファイルから読み出すことができる対象プラットフォームと同じ名前を使用する。この実施例において、最上位ディレクトリは、「Board Name」と呼ばれる。しかしながら、上記で与えられている例示的なプラットフォームメタデータファイルを参照すると、最上位ディレクトリは、「VC690」またはその派生形態として指定され得る。いずれにせよ、システムリンカ830は、
図15のディレクトリ構造を使用してプラットフォームFPGA 845を取得する。説明のため、ディレクトリは
図15において太字にされている。たとえば、「Board Name」、「driver」、「ipi」、および「local_lib」がディレクトリである。リストされている残りの項目は、ファイルおよび/またはパッケージである。
【0111】
システムは、任意の新たに追加される対象プラットフォームを自動的に配置することができ、ファイルは正確にパッケージされ、システムの指定されているプラットフォームディレクトリに追加される。図示されている実施例において、「driver_file.so」は、ホストによってバスを介して対象プラットフォームと通信するために使用される低レベルドライバである。図示されているように、driver_file.soは、「driver」ディレクトリ内に位置する。
図15の実施例において「platform.xml」として参照されるプラットフォームメタデータファイルが、ルートディレクトリに配置される。
図3、
図4、および
図5を参照して説明されているようなICの静的領域において使用される任意のパッケージIPを、「local_lib」ディレクトリ内に記憶することができる。「bp.tcl」と呼ばれるベースプラットフォームブロック
図TCLファイル、ならびに、静的領域回路設計に対する任意の最上位設計制約ファイル、たとえば、タイミング制約および/または物理制約が、「ipi」ディレクトリ内に含まれる。
【0112】
図15において「driver_file.so」として図示されている共通の低レベルドライバは、複数の関数を有するAPIを含むことができる。共通の低レベルドライバAPI(以降「ドライバAPI」という)は、ホスト内で実行しているヘテロジニアスマルチプロセッサランタイムプログラムが、対象プラットフォームと通信することを可能にする。ドライバAPIは、たとえば、カーネルの制御ポートを通じてプログラム可能IC内で実装されているものとして、バッファを割り当ておよび/または割り当て解除し、バッファをホストメモリから対象プラットフォームメモリへと移行し、対象プラットフォームメモリをホストメモリへと移行し、カーネルと通信して、プログラム可能ICへとダウンロードされる構成ビットストリームをサポートする。
【0113】
ドライバAPIはまた、アドレス空間をもサポートする。アドレス空間は、対象プラットフォームの周辺機器にアクセスするために使用することができる。対象プラットフォーム上の各周辺機器は、たとえば、アドレス空間のそれ自体のメモリマッピングされた範囲を有することができる。対象プラットフォームは任意選択的に、対象プラットフォームのすべての周辺機器に対処するために使用することができるフラットメモリ空間を有することができる。
【0114】
The driver_file.soは、対象プラットフォーム上で読み出しまたは書き込みすることができる、バッファ、たとえばDMAバッファの最小サイズのような、様々な量をサポートすることができる。さらに、「enums」として参照される、1つまたは複数の列挙アドレス空間がサポートされ得る。メモリ動作は、フラットアドレス指定または相対アドレス指定を使用することができる。例示的なenumsは、限定はしないが、XCL_ADDR_SPACE_DEVICE_FLAT、XCL_ADDR_SPACE_DEVICE_RAM、XCL_ADDR_KERNEL_CTRL、およびXCL_ADDR_SPACE_MAXを含み得る。
【0115】
ドライバAPIは、限定はしないが、以下を含む複数のデバイスアクセス動作をサポートする。
【0116】
・xclDeviceHandle xclOpen(const char *deviceName)
・void xclClose(xclDeviceHandle handle)
・int xclGetDeviceInfo(xclDeviceHandle handle, xclDeviceInfo *info) (xclDeviceHandle handle)
ドライバAPIは、動作「int xclLoadBitstream(xclDeviceHandle handle, const char *fileName)」によって、構成ビットストリームロード動作をサポートする。そのため、ホストは、ランタイム中に必要に応じて1つまたは複数の異なるカーネルをハードウェア内に実装するために、全体であるかまたは部分的であるかを問わず、構成ビットストリームのICへのロードを開始することができる。
【0117】
ドライバAPIは、対象プラットフォームのメモリを管理するための様々な動作を可能にする。対象プラットフォームの供給元は、たとえば、以下のAPIによってメモリ管理を可能にすることが必要とされる。
【0118】
・uint64_t xclAllocDeviceBuffer(xclDeviceHandle handle, size_t size)
動作「xclAllocDeviceBuffer」は、指定サイズのバッファを対象プラットフォーム上に割り当て、対象プラットフォームRAMにおける割り当てられたバッファのオフセットを、返り値として返す。オフセットは、バッファハンドルとして機能する。OpenCLランタイムはその後、返されたハンドルをOpenCLカーネルに渡す。OpenCLカーネルは、返されたハンドルを使用して、対象プラットフォームRAM内の割り当てられたバッファに対してバスマスタ読み出しおよび/または書き込み動作を実施する。ホストは対象プラットフォームRAMに対して直接書き込まない。空きブロックが残っていない場合、この関数は−1を返すことになる。
【0119】
・void xclFreeDeviceBuffer(xclDeviceHandle handle, uint64_t buf)
動作「xclFreeDeviceBuffer」は、xclAllocDeviceBufferによって以前に割り当てられているメモリを解放する。解放されたメモリは、xclAllocDeviceBufferに対する別の呼び出しのために後に再使用することができる。xclAllocDeviceBufferによって以前に割り当てられていないバッファハンドルが渡される結果として、エラー状態が発生する。
【0120】
・size_t xclCopyBufferHost2Device (xclDeviceHandle handle, uint64_t dest, const void *src, size_t size, size_t seek)
動作「xclCopyBufferHost2Device」は、ホストバッファの内容を、対象プラットフォーム上に常駐する宛先バッファへとコピーする。要素srcは、ホストバッファポインタを参照し、destは、デバイスバッファハンドルを参照する。エラーが発生する結果として、xclAllocDeviceBufferによって以前に割り当てられていないdestハンドルが渡されることになる。要素seekは、destハンドルにおけるオフセットを指定する。size+seekが以前に割り当てられているデバイスバッファのサイズよりも大きい場合、sizeが渡される結果として、エラーが発生する。与えられている実施例において、バッファを移行するためにPCIe DMAが使用される。
【0121】
・size_t xclCopyBufferDevice2Host(xclDeviceHandle handle, void *dest, uint64_t src, size_t size, size_t skip)
動作xclCopyBufferDevice2Hostは、対象プラットフォーム常駐バッファからホストバッファへと内容をコピーする。要素srsは、デバイスバッファハンドルを参照し、要素destは、ホストバッファポインタを参照する。xclAllocDeviceBufferによって以前に割り当てられていないsrcハンドルが渡される結果として、エラーが発生する。要素skipは、srcハンドルにおけるオフセットを指定する。size+skipが以前に割り当てられているデバイスバッファのサイズよりも大きい場合、sizeが渡される結果として、エラーが発生する。与えられている実施例において、バッファを移行するためにPCIe DMAが使用される。
【0122】
・size_t xclWrite(xclDeviceHandle handle, xclAddressSpace space, uint64_t offset, const void *hostBuf, size_t size)
動作xclWriteは、ホストバッファhostBuf の内容を、対象プラットフォームアドレスマップ内の特定の位置へとコピーする。hostBufの内容は、対象プラットフォームの周辺機器をプログラムするために使用される。たとえば、ホスト内で実行しているOpenCLランタイムは、この動作を使用して、引数をプログラム可能IC内のカーネルに送信する。オフセットは、アドレス空間に対するものである。
【0123】
・size_t xclRead(xclDeviceHandle handle, xclAddressSpace space, uint64_t offset, void *hostbuf, size_t size)
動作xclReadは、対象プラットフォームアドレスマップ内の特定の位置からホストバッファhostBufへとデータをコピーする。この動作は、対象プラットフォームの周辺機器の状態を読み出すために使用される。たとえば、OpenCLランタイムライブラリは、この動作を使用して、カーネルが動作を終了したか否かを判定する。オフセットは、アドレス空間に対するものである。
【0124】
ホストのオペレーティングシステムは、対象プラットフォームと通信するために、カーネルDMAドライバを必要とする。一態様において、共通の低レベルドライバAPIは、OpenCLランタイムをドライバの詳細から分離するために、カーネルDMAドライバの上に重ねられ得る。ドライバは、マルチスレッドセーフであるべきである。OpenCLランタイムは、任意選択的に、デバイスに対して同時に読み出しおよび書き込みを行うために、2つ以上のスレッドを使用する。
【0125】
別の態様において、ドライバAPIは、割り込み機能を含むことができる。たとえば、カーネルのレジスタマップは、カーネルによってフラグを記憶することができる1つまたは複数のメモリ位置を含み得る。レジスタマップの指定メモリ位置においてフラグが検出されることによって、静的領域が、ドライバの一部分として提供される機能を通じてホストに対する割り込みをトリガし得る。
【0126】
上記で示されている実施例はOpenCL実施態様向けに意図されているが、任意のヘテロジニアスマルチプロセッサコンピューティング言語が使用されてもよいこと、および、APIの一部分として記載されている様々な動作はそれに応じて適合されてもよいことが諒解されるべきである。
【0127】
図16は、カーネル実行の例示的な方法1600を示す流れ図である。方法1600は、カーネルがプログラム可能IC内に実装されており、対象プラットフォームがホストと通信可能にリンクされている状態において開始する。ホストは、たとえば、1つまたは複数のバイナリコンテナを含むことができ、または、1つまたは複数のバイナリコンテナにアクセスすることができる。ホストはバイナリコンテナにアクセスし、バイナリコンテナからの構成ビットストリームファイルを、IC、たとえば、RAM 345に提供する。ホストは、ドライバAPIの一部分として説明されている構成ビットストリームロード動作を開始することができ、それによって、ICは、構成ビットストリームをロードすることになり、構成ビットストリームによって指定されるカーネルを実行することになる。論じられているように、ホストは、ランタイム中の様々な時点において1つまたは複数の異なるカーネルをIC内に実装するために、部分的であるかまたは全体であるかを問わず、1つまたは複数の異なる構成ビットストリームがロードされるようにすることができる。
【0128】
ブロック1605において、ホストアプリケーションが初期化される。ホストアプリケーションは、
図8において示されているようなヘテロジニアスマルチプロセッサランタイムライブラリを含む。ブロック1610において、ホストアプリケーションが、バッファをホストメモリ内に割り当てる。ブロック1615において、ホストアプリケーションが、バッファ内容をホストメモリから対象プラットフォームメモリへと送信するための転送を開始する。
【0129】
ブロック1620において、ホストアプリケーションが、スレーブインターフェースを通じてカーネルに、動作を開始するようにシグナリングする。ブロック1625において、ホストアプリケーションが、任意選択的に、完了信号をモニタリングするために、対象プラットフォームのポーリングを開始する。ブロック1630において、カーネル、すなわち、カーネルのハードウェア実施態様が実行する、すなわち、動作し始める。カーネルは、対象プラットフォームメモリからデータをロードおよび記憶する。ブロック1635において、カーネルは、処理の終了に応答してメモリマップレジスタ内の状態を完了に変更するか、または、割り込みを生成する。ブロック1640において、ホストアプリケーションが、対象プラットフォームメモリの更新済みバッファ内容、すなわち結果を、ホストメモリへと転送する。ブロック1645において、たとえば、ホストまたはホストアプリケーション内で実行しているヘテロジニアスマルチプロセッサランタイムが、ホストメモリからバッファを読み出す。
【0130】
説明を目的として、本明細書において開示されている様々な本発明の概念を完全に理解できるよう、特定の用語体系が記載されている。しかしながら、本明細書において使用されている用語は、本発明の構成の特定の態様を説明することのみを目的としており、限定的であるようには意図されていない。
【0131】
本開示内で定義されているものとしては、用語「a」および「an」は、1つまたは2つ以上を意味する。用語「複数」は、本明細書における定義としては、2つまたは3つ以上を意味する。用語「別の」は、本明細書における定義としては、少なくとも第2以上のものを意味する。用語「結合されている」は、本明細書における定義としては、別途特記しない限り、いかなる介在する要素もない直接的なものであるか、または、1つもしくは複数の介在する要素による間接的なものであるかを問わず、接続されていることを意味する。2つの要素はまた、機械的に結合されるか、電気的に結合されるか、または、チャネル、経路、ネットワーク、もしくはシステムを通じて通信可能にリンクされ得る。
【0132】
本明細書における定義としては、用語「自動的に」は、ユーザが介入しないことを意味する。本明細書における定義としては、用語「ユーザ」は、人を意味する。用語「および/または」は、本明細書における定義としては、関連してリストされている項目のうちの1つまたは複数のあらゆる可能な組み合わせを意味する。用語「含む」および/または「含んでいる」は、本開示において使用されるとき、記述されている特徴、整数、ステップ、動作、要素、および/または構成要素が存在することを示すが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、および/またはそれらのグループが存在することまたは加わることを除外するものではない。用語「第1の」、「第2の」などは、本明細書において様々な要素を説明するために使用されるが、文脈が別途示唆していない限り、これらの用語は、1つの要素を別の要素から区別するために使用されているに過ぎないため、これらの要素はこれらの用語によって限定されるべきではない。
【0133】
本明細書における定義としては、用語「〜場合」は文脈に応じて、「〜とき」、「〜すると」、「〜と判定されるのに応答して」、「〜が検出されるのに応答して」、「〜と判定されるのに応じて」、または「〜が検出されるのに応じて」を意味する。同様に、語句「〜と判定される場合」または語句「[記述されている状態または事象が]検出される場合」は、本明細書における定義としては、文脈に応じて、「〜と判定されると」、「〜と判定されるのに応答して」、「〜と判定されるのに応じて」、「[記載されている状態または事象が]検出されると」、「[記載されている状態または事象が]検出されるのに応答して」、または「[記載されている状態または事象が]検出されるのに応じて」、を意味する。
【0134】
本開示内では、同じ参照符号が、端子、信号線、ワイヤ、およびそれらの対応する信号を指すために使用されている。これに関連して、用語「信号」、「ワイヤ」、「接続」、「端子」、および「ピン」は、本開示内で、場合によっては交換可能に使用される。用語「信号」、「ワイヤ」などは、1つまたは複数の信号、たとえば、単一のワイヤを通じた単一のビットの伝達、または、複数の並列ワイヤを通じて複数の並列ビットの伝達を表すことができる。さらに、各ワイヤまたは信号は、場合によって、信号またはワイヤにより接続されている2つ以上の構成要素間の双方向性通信を表すことがある。
【0135】
本開示内で記載されている1つまたは複数の態様は、ハードウェアまたはハードウェアとソフトウェアとの組み合わせにおいて実現することができる。1つまたは複数の態様は、1つのシステム内で集中様式で、または、複数の異なる要素がいくつかの相互接続されたシステムにわたって分散される分散様式で実現されてもよい。本明細書に記載されている方法の少なくとも一部分を実行するような任意の種類のデータ処理システムまたは他の装置が適している。
【0136】
1つまたは複数の態様はさらに、本明細書に記載されている方法の実施を可能にするすべての特徴を含む、コンピュータプログラム製品内に組み込まれてもよい。コンピュータプログラム製品は、コンピュータ可読データ記憶媒体を含む。本明細書における定義としては、語句「コンピュータ可読記憶媒体」は、命令実行システム、装置、またはデバイスによって使用するための、または、それらに関連するプログラムコードを含むかまたは記憶している記憶媒体を意味する。本明細書における定義としては、「コンピュータ可読記憶媒体」は非一時的であり、そのため、一時的伝播信号自体ではない。コンピュータ可読記憶媒体の例は、限定はしないが、光学媒体、磁気媒体、磁気−光媒体、RAMのようなコンピュータメモリ、たとえば、ハードディスクなどの大容量記憶デバイスなどを含み得る。
【0137】
図面内の流れ図およびブロック図は、本明細書に開示されている本発明の構成の様々な態様によるシステム、方法およびコンピュータプログラム製品の可能な実施態様のアーキテクチャ、機能、および動作を示す。これに関連して、流れ図またはブロック図内の各ブロックは、指定される機能(複数可)を実施するための1つまたは複数の実行可能命令を含む、モジュール、セグメント、またはコード部分を表すことができる。ブロック図および/または流れ図の各ブロック、ならびに、ブロック図および/または流れ図内のブロックの組み合わせは、指定される機能もしくは動作を実施する特殊用途ハードウェアベースシステム、または、特殊目的ハードウェアとコンピュータ命令との組み合わせによって実施することができることも留意されたい。
【0138】
一態様において、流れ図内のブロックは、様々なブロック内の参照符号に対応する昇順で実施されてもよい。他の態様において、ブロックは、ブロック内の参照符号とは異なる順序、または、変動する順序で実施されてもよい。たとえば、連続して図示される2つ以上のブロックは、実質的に同時に実行されてもよい。他の事例において、2つ以上のブロックは時として、含まれている機能に応じて逆順で実行されてもよい。また他の事例において、1つまたは複数のブロックは、様々な順序で実施されてもよく、その結果は、直に後続しないその後のまたは他のブロックにおいて利用される。
【0139】
用語「コンピュータプログラム」、「ソフトウェア」、「アプリケーション」、「コンピュータ使用可能プログラムコード」、「プログラムコード」、「実行可能コード」、それらの変化形および/または組み合わせは、本開示の文脈において、データ処理システムに、直接的に、または、a)別の言語、コード、もしくは表記への変換、b)異なる材料形態での再現のいずれかもしくは両方の後に、特定の機能を実施させるように意図されている命令セットの任意の言語、コードまたは表記における任意の表現を意味する。たとえば、プログラムコードは、限定はしないが、サブルーチン、関数、手順、オブジェクトメソッド、オブジェクト実装、実行可能アプリケーション、アプレット、サーブレット、ソースコード、オブジェクトコード、共有ライブラリ/動的読み込みライブラリ、および/または、コンピュータシステム上で実行するように設計されている他の命令シーケンスを含んでもよい。
【0140】
したがって、本開示全体を通じて、「処理」または「計算」または「算出」または「決定」または「表示」などのような用語を利用した記述は、コンピュータシステムのレジスタおよび/またはメモリ内で物理(電子)量として表されているデータを操作して、コンピュータシステムメモリおよび/またはレジスタもしくは他のそのような情報記憶、送信もしくは表示デバイス内で同様に物理量として表される他のデータに変換するデータ処理システム、たとえば、コンピュータシステム、または同様の電子コンピューティングデバイスの動作およびプロセスを参照する。
【0141】
対応する構造、材料、動作、および添付の特許請求の範囲内のすべての手段またはステッププラスファンクション要素の対応する構造、材料、動作、および均等物は、明確に特許請求されているものとしての他の特許請求されている要素と組み合わさった機能を実施するための任意の構造、材料、または動作を含むように意図されている。
【0142】
方法は、プロセッサを使用して、ヘテロジニアスマルチプロセッサ設計の第1のカーネルのRTL記述を生成するステップと、ヘテロジニアスマルチプロセッサ設計のホストに対するインターフェースを提供するプログラム可能IC内の静的領域を提供するベースプラットフォーム回路設計と、第1のカーネルのRTL記述を統合するステップと、第1のカーネルのRTL記述から、プロセッサを使用して、第1のカーネルのハードウェア実施態様を指定する第1の構成ビットストリームおよび構成ビットストリームのサポートデータを生成するステップとを含む。方法はまた、第1の構成ビットストリームおよびサポートデータを、バイナリコンテナ内に含めるステップをも含む。
【0143】
一例において、ヘテロジニアスマルチプロセッサ設計は、OpenCL設計であり、第1のカーネルは、OpenCLで指定される。
【0144】
一態様において、サポートデータは、プログラム可能IC内で実装されるものとしての、第1のカーネルのハードウェア実施態様の2次元位置を含む。
【0145】
方法は、ヘテロジニアスマルチプロセッサ設計のランタイム中にプログラム可能IC内で第1のカーネルのハードウェア実施態様のインスタンスを作成する、第1のカーネルの構成ビットストリームをロードするステップを含むことができる。
【0146】
方法はまた、ヘテロジニアスマルチプロセッサ設計のランタイム中にプログラム可能IC内で第1のカーネルのハードウェア実施態様の複数のインスタンスを作成する、第1のカーネルの構成ビットストリームをロードするステップをも含むことができる。
【0147】
方法は、第2のバイナリコンテナ内に、ヘテロジニアスマルチプロセッサ設計の第2のカーネルのハードウェア実施態様を指定する第2の構成ビットストリームを含めるステップをさらに含むことができる。第2のカーネルのハードウェア実施態様の少なくとも1つのインスタンスは、プログラム可能IC内で作成することができる。
【0148】
一態様において、第1の構成ビットストリームを生成するステップは、カーネル回路を指定する部分構成ビットストリームとして第1の構成ビットストリームを生成するステップを含むことができる。別の態様において、第1の構成ビットストリームを生成するステップは、カーネル回路およびベースプラットフォーム回路を指定する全構成ビットストリームとして第1の構成ビットストリームを生成するステップを含むことができる。
【0149】
方法は、プロセッサを使用して、ヘテロジニアスマルチプロセッサ設計の第1のカーネルのRTL記述を生成するステップと、ヘテロジニアスマルチプロセッサ設計のホストに対するプログラム可能IC内の静的インターフェースを提供するベースプラットフォーム回路設計と、第1のカーネルのRTL記述を統合するステップと、第1のカーネルのRTL記述から、プロセッサを使用して、第1のカーネルのRTL記述のサポートデータを生成するステップとを含む。方法はまた、第1のカーネルのRTL記述およびサポートデータを、バイナリコンテナ内に含めるステップをも含む。
【0150】
一例において、ヘテロジニアスマルチプロセッサ設計は、OpenCL設計であり、第1のカーネルは、OpenCLで指定される。
【0151】
方法は、カーネルの実行可能バージョンを生成するステップと、カーネルの実行可能バージョンをバイナリコンテナ内に含めるステップとを含むことができる。
【0152】
方法はまた、ホストが、ランタイム中に、バイナリコンテナからのRTL記述をRTLシミュレータに提供するステップと、RTLシミュレータ内でカーネルのRTL記述をシミュレートするステップとを含むこともできる。
【0153】
方法は、第2のバイナリコンテナ内に、ヘテロジニアスマルチプロセッサ設計の第2のカーネルのRTL記述を含めるステップをさらに含むことができる。
【0154】
システムは、実行可能動作を開始するようにプログラムされているプロセッサを含むことができる。実行可能動作は、ヘテロジニアスマルチプロセッサ設計の第1のカーネルのRTL記述を生成するステップと、ヘテロジニアスマルチプロセッサ設計のホストに対するインターフェースを提供するプログラム可能IC内の静的領域を提供するベースプラットフォーム回路設計と、第1のカーネルのRTL記述を統合するステップと、第1のカーネルのRTL記述から、第1のカーネルのハードウェア実施態様を指定する第1の構成ビットストリームおよび構成ビットストリームのサポートデータを生成するステップとを含む。方法はまた、第1の構成ビットストリームおよびサポートデータを、バイナリコンテナ内に含めるステップをも含むことができる。
【0155】
一例において、ヘテロジニアスマルチプロセッサ設計は、OpenCL設計であり、第1のカーネルは、OpenCLで指定される。
【0156】
サポートデータは、プログラム可能IC内で実装されるものとしての、第1のカーネルのハードウェア実施態様の2次元位置を含むことができる。
【0157】
実行可能動作は、ヘテロジニアスマルチプロセッサ設計のランタイム中にプログラム可能IC内で第1のカーネルのハードウェア実施態様のインスタンスを作成する、第1のカーネルの構成ビットストリームをロードするステップを含むことができる。
【0158】
実行可能動作はまた、ヘテロジニアスマルチプロセッサ設計のランタイム中にプログラム可能IC内で第1のカーネルのハードウェア実施態様の複数のインスタンスを作成する、第1のカーネルの構成ビットストリームをロードするステップをも含むことができる。
【0159】
実行可能動作は、第2のバイナリコンテナ内に、ヘテロジニアスマルチプロセッサ設計の第2のカーネルのハードウェア実施態様を指定する第2の構成ビットストリームを含めるステップをさらに含むことができる。実行可能動作は、第2のカーネルのハードウェア実施態様の少なくとも1つのインスタンスを、プログラム可能IC内で作成するステップを含むことができる。
【0160】
一態様において、第1の構成ビットストリームを生成するステップは、カーネル回路を指定する部分構成ビットストリームとして第1の構成ビットストリームを生成するステップを含むことができる。別の態様において、第1の構成ビットストリームを生成するステップは、カーネル回路およびベースプラットフォーム回路を指定する全構成ビットストリームとして第1の構成ビットストリームを生成するステップを含むことができる。
【0161】
別の実施例において、ICは、静的であり、ICとホストプロセッサとの間のインターフェースを提供する第1の領域を含む。第1の領域は、第1のマスタインターフェースを有する第1の相互接続回路ブロックと、第1のスレーブインターフェースを有する第2の相互接続回路ブロックとを含む。ICは、第1の領域に結合されている第2の領域を含む。第2の領域は、ヘテロジニアスマルチプロセッサ設計のカーネルを実装し、第1の相互接続回路ブロックの第1のマスタインターフェースに結合されており、ホストプロセッサからコマンドを受信するように構成されているスレーブインターフェースを含む。第2の領域はまた、第2の相互接続回路ブロックの第1のスレーブインターフェースに結合されているマスタインターフェースをも含み、第2の領域のマスタインターフェースは、メモリコントローラのマスタである。
【0162】
一実施例において、ヘテロジニアスマルチプロセッサ設計は、OpenCL設計である。
【0163】
一態様において、第2の領域は、ランタイム中に、ホストプロセッサの制御下で異なるカーネルを実装するように、動的に再構成可能であり得る。別の態様において、第2の領域は、ランタイム中に、第1の領域を損傷を受けないままにしながら、ホストプロセッサの制御下で異なるカーネルを実装するように、動的に再構成可能であり得る。
【0164】
第1の領域は、バスエンドポイントと、バスエンドポイントに結合されているDMAコントローラとを含むことができる。第1の領域は、第1の相互接続回路ブロックのスレーブインターフェースに結合されているマスタインターフェースを含むことができる。第1の相互接続回路ブロックは、第2のマスタインターフェースを含むことができる。第2の相互接続回路ブロックは、第1の相互接続回路ブロックの第2のマスタインターフェースに結合されている第2のスレーブインターフェースを含むことができる。
【0165】
第1の領域はまた、メモリコントローラをも含むことができる。メモリコントローラは、第2の相互接続回路ブロックのマスタインターフェースに結合されているスレーブインターフェースを含むことができる。
【0166】
第1の相互接続回路ブロックおよび第2の相互接続回路ブロックは、AXI相互接続回路ブロックとして実装されてもよい。
【0167】
ICはまた、ヘテロジニアスマルチプロセッサ設計のホストプログラムコードによってプログラムされている、ホストプロセッサにも結合することができる。
【0168】
DMAコントローラは、メモリコントローラに対するマスタとして構成することができる。
【0169】
第1の領域は、第1の相互接続回路ブロックを通じて第2の領域にクロック信号およびリセット信号を提供するように構成することができる。
【0170】
第2の領域は、第1の相互接続回路ブロックに結合されているメモリマップドレジスタを含むことができる。
【0171】
一態様において、第2の領域は、第1の相互接続回路ブロックの第1のマスタインターフェースに結合されている第2の領域のスレーブインターフェース、および、第1のカーネル回路ブロック610−1の入力に結合されているマスタインターフェースを有する第3の相互接続回路ブロックを含む。第2の領域はまた、第1のカーネル回路ブロック610−1の出力に結合されているスレーブインターフェース、および、第2のインターフェース回路ブロックの第1のスレーブインターフェースに結合されているマスタインターフェースを有する第4の相互接続回路ブロックをも含むことができる。
【0172】
第2の領域はまた、第3の相互接続回路ブロックのマスタインターフェースに結合されている入力、および、第4の相互接続回路ブロックのスレーブインターフェースに結合されている出力を有する第2のカーネル回路ブロックをも含むことができる。
【0173】
別の実施例において、方法は、ICとホストプロセッサとの間のインターフェースを実装する、IC内の静的領域である第1の領域を提供するステップと、第1の領域内に、第1のマスタインターフェースを有する第1の相互接続回路ブロック、および、第1のスレーブインターフェースを有する第2の相互接続回路ブロックを含めるステップと、第1の領域に結合されている第2の領域を提供するステップとを含む。方法はまた、第2の領域内に、ヘテロジニアスマルチプロセッサ設計のカーネルを実装するステップと、第2の領域内に、第1の相互接続回路ブロックの第1のマスタインターフェースに結合されているスレーブインターフェースを含めるステップとを含むこともできる。カーネルは、ホストプロセッサからコマンドを受信するように構成されている。方法は、第2の領域内に、第2の相互接続回路ブロックの第1のスレーブインターフェースに結合されているマスタインターフェースを含めるステップをさらに含み、第2の領域のマスタインターフェースは、メモリコントローラのマスタである。
【0174】
一実施例において、ヘテロジニアスマルチプロセッサ設計は、OpenCL設計である。
【0175】
一態様において、方法は、ICのランタイム中に、ホストプロセッサの制御下で異なるカーネルを実装するように、第2の領域を動的に再構成するステップを含むことができる。別の態様において、方法は、ICのランタイム中に、第1の領域を損傷を受けないままにしながら、ホストプロセッサの制御下で異なるカーネルを実装するように、第2の領域を動的に再構成するステップを含むことができる。
【0176】
方法は、第1の領域内に、バスエンドポイントを設けるステップと、第1の領域内に、バスエンドポイントに結合されているDMAコントローラを設け、第1の相互接続回路ブロックのスレーブインターフェースに結合されているマスタインターフェースを含めるステップとを含むことができる。第1の相互接続回路ブロックは、第2のマスタインターフェースを含むことができる。第2の相互接続回路ブロックは、第1の相互接続回路ブロックの第2のマスタインターフェースに結合されている第2のスレーブインターフェースを含むことができる。
【0177】
方法はまた、第1の領域内に、第2の相互接続回路ブロックのマスタインターフェースに結合されているスレーブインターフェースを有するメモリコントローラを設けるステップをも含むことができる。
【0178】
方法は、ホストプロセッサに、ヘテロジニアスマルチプロセッサ設計のホストプログラムコードを与えるステップをさらに含むことができる。
【0179】
方法はまた、第2の領域内に、第1の相互接続回路ブロックの第1のマスタインターフェースに結合されている第2の領域のスレーブインターフェース、および、第1のカーネル回路ブロックの入力に結合されているマスタインターフェースを有する第3の相互接続回路ブロックを含めるステップをも含むことができる。第4の相互接続回路ブロックを、第2の領域内に設けることができる。第4の相互接続回路ブロックは、第1のカーネル回路ブロックの出力に結合されているスレーブインターフェース、および、第2のインターフェース回路ブロックの第1のスレーブインターフェースに結合されているマスタインターフェースを有することができる。
【0180】
方法はまた、第2の領域内に、第3の相互接続回路ブロックのマスタインターフェースに結合されている入力、および、第4の相互接続回路ブロックのスレーブインターフェースに結合されている出力を有する第2のカーネル回路ブロックを設けるステップをも含むことができる。
【0181】
本開示内に記載されている特徴は、その趣旨または本質的な属性から逸脱することなく、他の形態で具現化されてもよい。したがって、そのような特徴および実施態様の範囲を示すものとして、上記の開示ではなく、添付の特許請求の範囲を参照すべきである。