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

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

▶ ザイリンクス インコーポレイテッドの特許一覧

特許7449308ハードウェアアクセラレータ中の競合カーネルのためのロック回路
<>
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図1A
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図1B
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図1C
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図2
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図3
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図4
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図5
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図6
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図7A
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図7B
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図7C
  • 特許-ハードウェアアクセラレータ中の競合カーネルのためのロック回路 図7D
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-05
(45)【発行日】2024-03-13
(54)【発明の名称】ハードウェアアクセラレータ中の競合カーネルのためのロック回路
(51)【国際特許分類】
   G06F 12/00 20060101AFI20240306BHJP
   G06F 9/52 20060101ALI20240306BHJP
   G06F 9/38 20180101ALI20240306BHJP
   G06F 15/167 20060101ALI20240306BHJP
【FI】
G06F12/00 572A
G06F9/52 120Z
G06F9/38 370C
G06F15/167 615A
【請求項の数】 15
(21)【出願番号】P 2021563615
(86)(22)【出願日】2020-03-11
(65)【公表番号】
(43)【公表日】2022-06-29
(86)【国際出願番号】 US2020022035
(87)【国際公開番号】W WO2020222915
(87)【国際公開日】2020-11-05
【審査請求日】2023-02-13
(31)【優先権主張番号】16/401,104
(32)【優先日】2019-05-01
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110002077
【氏名又は名称】園田・小林弁理士法人
(72)【発明者】
【氏名】ジェイン, スニタ
(72)【発明者】
【氏名】ラオ, スウェサ
【審査官】松平 英
(56)【参考文献】
【文献】特開平2-77868(JP,A)
【文献】特開昭57-207957(JP,A)
【文献】米国特許第9817703(US,B1)
【文献】米国特許出願公開第2005/0100017(US,A1)
【文献】米国特許第6480918(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
9/38
9/455-9/54
12/00-12/128
13/16-13/18
15/16-15/177
(57)【特許請求の範囲】
【請求項1】
計算システム中のハードウェアアクセラレータであって、
前記計算システムの周辺バスに結合されたバスインターフェースと、
前記バスインターフェースに結合されたロック回路と、
前記ロック回路と前記バスインターフェースとに結合された複数のカーネル回路と
を備え、
前記複数のカーネル回路が前記ロック回路にロック要求を与え、前記ロック要求が、前記計算システムのシステムメモリに記憶されたデータについてのものであり、
前記ロック回路が、前記複数のカーネル回路からの前記ロック要求を処理し、前記ロック要求に基づいて前記バスインターフェースを通して前記周辺バスを介してアトミックトランザクションを発行するように構成された、ハードウェアアクセラレータ。
【請求項2】
前記ロック回路が、カーネルロックアレイを維持するように構成され、前記カーネルロックアレイが、それぞれ保留要求フィールドとロックステータスフィールドとを有する複数の要素を含む、請求項1に記載のハードウェアアクセラレータ。
【請求項3】
前記保留要求フィールドが、前記複数のカーネル回路に対応する複数のエントリを含み、前記ロックステータスフィールドが、前記複数のカーネル回路に対応する複数のエントリを含む、請求項2に記載のハードウェアアクセラレータ。
【請求項4】
前記ロック回路が、前記ロック要求の各々について、前記カーネルロックアレイ中の対応する要素の前記ロックステータスフィールドを検査することと、利用可能な場合、前記対応する要素の前記ロックステータスフィールド中にロックを設定することと、ロックが利用可能でない場合、前記保留要求フィールド中の保留ロック要求を示すこととを行うように構成された、請求項3に記載のハードウェアアクセラレータ。
【請求項5】
前記ロック回路が、カーネルロックアレイを維持するように構成され、前記カーネルロックアレイが、それぞれカウンタフィールドとロックステータスフィールドとを有する複数の要素を含む、請求項1に記載のハードウェアアクセラレータ。
【請求項6】
前記カウンタフィールドが値を含み、前記ロックステータスフィールドが、前記複数のカーネル回路に対応する複数のエントリを含む、請求項5に記載のハードウェアアクセラレータ。
【請求項7】
前記ロック回路が、前記ロック要求の各々について、前記カーネルロックアレイ中の対応する要素の前記ロックステータスフィールドを検査することと、前記対応する要素の前記ロックステータスフィールド中にロックを設定することと、前記対応する要素の前記カウンタフィールド中の前記値を増分することとを行うように構成された、請求項6に記載のハードウェアアクセラレータ。
【請求項8】
システムメモリと、
前記システムメモリに結合されたプロセッサと、
前記システムメモリに結合された周辺バスと、
前記周辺バスに結合された請求項1に記載のハードウェアアクセラレータと
を備える計算システム。
【請求項9】
前記ロック回路が、カーネルロックアレイを維持するように構成され、前記カーネルロックアレイが、それぞれ保留要求フィールドとロックステータスフィールドとを有する複数の要素を含む、請求項8に記載の計算システム。
【請求項10】
計算システムのハードウェアアクセラレータ中で実行する複数のカーネル間でメモリに記憶されたデータへのロックを管理する方法であって、前記方法が、
前記ハードウェアアクセラレータ中のロック回路において、前記複数のカーネルのうちの1つのカーネルからのロック要求を受信することと、
ロックが前記複数のカーネルのうちの別のカーネルによって保持されるかどうかを決定することと、
前記ロックが別のカーネルによって保持されることに応答して、前記カーネルについての保留要求を示すことと、
前記ロックが別のカーネルによって保持されないことに応答して、前記ロックを取得するために、前記ロック回路から、前記計算システムのバスインターフェースを介して前記ロックについてのアトミック要求を発行することと
を含む、方法。
【請求項11】
前記カーネルが前記ロックを有することを示すことをさらに含む、請求項10に記載の方法。
【請求項12】
前記ロック回路において前記カーネルからのロック解放要求を受信することと、
前記複数のカーネルのうちの別のカーネルが保留ロック要求を有するかどうかを決定することと、
保留ロック要求の不在に応答して、前記ロック回路から、前記計算システムの前記バスインターフェースを介して前記ロックを解放するための別のアトミック要求を発行することと、
保留ロック要求の存在に応答して、前記ロック回路によって、前記複数のカーネルのうちの別のカーネルの前記ロックを許可することと
をさらに含む、請求項10に記載の方法。
【請求項13】
前記ロック回路が、カーネルロックアレイを維持するように構成され、前記カーネルロックアレイが、それぞれ保留要求フィールドとロックステータスフィールドとを有する複数の要素を含む、請求項10に記載の方法。
【請求項14】
前記保留要求フィールドが、複数のカーネル回路に対応する複数のエントリを含み、前記ロックステータスフィールドが、前記複数のカーネル回路に対応する複数のエントリを含む、請求項13に記載の方法。
【請求項15】
前記ロック回路が、カーネルロックアレイを維持するように構成され、前記カーネルロックアレイが、それぞれカウンタフィールドとロックステータスフィールドとを有する複数の要素を含む、請求項10に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の例は、一般に、計算システムにおけるハードウェアアクセラレーションに関し、特に、ハードウェアアクセラレータ中の競合カーネルのためのロック回路に関する。
【背景技術】
【0002】
ハードウェアアクセラレーションは、いくつかの機能を、汎用CPU上で実行するソフトウェアよりも効率的に実行するためのハードウェアの使用を伴う。ハードウェアアクセラレータは、何らかの適用例のためにハードウェアアクセラレーションを実装するように設計された専用ハードウェアである。例示的な適用例は、ニューラルネットワーク、ビデオの符号化、復号化、トランスコーディングなど、ネットワークデータ処理などを含む。計算システム上で実行するソフトウェアは様々なドライバとライブラリとを通してハードウェアアクセラレータと対話する。あるタイプのハードウェアアクセラレータは、プログラマブルデバイスと、関連する回路とを含む。たとえば、プログラマブルデバイスは、フィールドプログラマブルゲートアレイ(FPGA)、または、処理システム、データ処理エンジン(DPE)アレイ、ネットワークオンチップ(NOC)など、サブシステムの中でも、FPGAプログラマブル論理を含むシステムオンチップ(SoC)であり得る。
【0003】
マルチプロセシングシステムでは、競合状態を回避するためにスレッド同期がミューテックス(mutex)ロックによって達成され得る。ミューテックスの使用は、共有データの相互排除がアトミック操作を介して達成されるソフトウェア環境において一般的である。周辺構成要素インターフェースエクスプレス(PCIe)、およびアクセラレータのためのキャッシュコヒーレント相互接続(CCIX)などのプロトコルも、ハードウェアアクセラレーションカーネルがロックを取得し、ソフトウェアスレッドと競合することを可能にする、アトミック操作のサポートを行う。並列に動作する複数のアクセラレーションカーネルを有するシステムの場合、アクセラレーションカーネルによるホストコンピュータシステムへのロック要求は、不要な周辺バス利用と、ホストコンピュータによる競合処理の増加とをもたらし得る。ハードウェアアクセラレーションシステム中の複数のアクセラレーションカーネルによる共有データへのアクセスを処理するためのより効率的な技法が必要である。
【発明の概要】
【0004】
ハードウェアアクセラレータ中の競合カーネルのためのロック回路を与えるための技法について説明する。一例では、計算システム中のハードウェアアクセラレータは、計算システムの周辺バスに結合されたバスインターフェースと、バスインターフェースに結合されたロック回路と、ロック回路とバスインターフェースとに結合された複数のカーネル回路とを含み、複数のカーネル回路はロック回路にロック要求を与え、ロック要求は、計算システムのシステムメモリに記憶されたデータについてのものであり、ロック回路は、複数のカーネル回路からのロック要求を処理し、ロック要求に基づいてバスインターフェースを通して周辺バスを介してアトミックトランザクションを発行するように構成される。
【0005】
別の例では、計算システムは、システムメモリと、システムメモリに結合されたプロセッサと、システムメモリに結合された周辺バスと、周辺バスに結合されたハードウェアアクセラレータとを含む。ハードウェアアクセラレータは、周辺バスに結合されたバスインターフェースと、バスインターフェースに結合されたロック回路と、ロック回路とバスインターフェースとに結合された複数のカーネル回路とを含み、複数のカーネル回路は、ロック回路にロック要求を与え、ロック要求は、システムメモリに記憶されたデータについてのものであり、ロック回路は、複数のカーネル回路からのロック要求を処理し、ロック要求に基づいてバスインターフェースを通して周辺バスを介してアトミックトランザクションを発行するように構成される。
【0006】
別の例では、計算システムのハードウェアアクセラレータ中で実行する複数のカーネル間でメモリに記憶されたデータへのロックを管理する方法は、ハードウェアアクセラレータ中のロック回路において、複数のカーネルのうちの1つのカーネルからのロック要求を受信することと、ロックが複数のカーネルのうちの別のカーネルによって保持されるかどうかを決定することと、ロックが別のカーネルによって保持されることに応答して、カーネルについての保留(pending)要求を示すことと、ロックが別のカーネルによって保持されないことに応答して、ロックを取得するために、ロック回路から、計算システムのバスインターフェースを介してロックについてのアトミック要求を発行することとを含む。
【0007】
これらおよび他の態様は、以下の詳細な説明を参照しながら理解され得る。
【0008】
上記で具陳された特徴が詳細に理解され得る様式のように、上記で手短に要約したより詳細な説明が、例示的な実装形態を参照することによって得られ得、それらの実装形態のうちのいくつかは添付の図面に示されている。しかしながら、添付の図面は、一般的な例示的な実装形態のみを示し、したがって、それの範囲を限定すると考えられるべきではないことに留意されたい。
【図面の簡単な説明】
【0009】
図1A】一例による、ハードウェアアクセラレーションシステムを示すブロック図である。
図1B】一例による、アクセラレーテッドアプリケーションを示すブロック図である。
図1C】一例による、アクセラレーション回路を示すブロック図である。
図2図1Aの計算システムの論理図を示すブロック図である。
図3】例示的なカーネルロックアレイを示すブロック図である。
図4】別の例示的なカーネルロックアレイを示すブロック図である。
図5】一例による、ロック要求を管理する方法を示す流れ図である。
図6】一例による、ロック解放を管理する方法を示す流れ図である。
図7A】一例による、マルチ集積回路(IC)プログラマブルデバイスを示すブロック図である。
図7B】一例による、プログラマブルICを示すブロック図である。
図7C】一例による、プログラマブルICのシステムオンチップ(SoC)実装を示すブロック図である。
図7D】一例による、プログラマブルICのフィールドプログラマブルゲートアレイ(FPGA)実装を示す図である。
【発明を実施するための形態】
【0010】
理解を促進するために、可能な場合、図に共通である同等の要素を指定するために同等の参照番号が使用されている。1つの例の要素は他の例に有利に組み込まれ得ることが企図される。
【0011】
図を参照しながら様々な特徴について以下で説明する。図は一定の縮尺で描かれていることもあり、描かれていないこともあること、および図全体にわたって同様の構造または機能の要素は同様の参照番号によって表されていることに留意されたい。図は、特徴の説明を促進するためのものにすぎないことに留意されたい。図は、クレームされる発明の網羅的な説明、またはクレームされる発明の範囲の限定としては意図されていない。さらに、示された例は、必ずしもすべての態様または利点が示されているとは限らない。特定の例に関して説明した態様または利点は、必ずしもその例に限定されるとは限らず、そのように示されていないか、またはそのように明示的に説明されていない場合でも、任意の他の例において実施され得る。
【0012】
ハードウェアアクセラレータ中の競合カーネルのためのロック回路を与えるための技法について説明する。本技法は、複数のハードウェアアクセラレーションカーネルによって開始されるアトミック操作を処理する効率的な方法を与える。ロック回路は、ハードウェアアクセラレーションカーネルを有する集積回路(IC)中に中央競合処理回路を与える。ロック回路は、共有データ構造を有するハードウェアアクセラレータを有するホストコンピュータシステムにバスインターフェースを介してアトミック要求を開始することを担当する。これは、カーネル回路がバスインターフェースを通して直接アトミック要求を発行する必要を防ぐ。したがって、本技法は、バスインターフェースを介したアトミックトランザクションの頻度を低減し、それによってホストにおける競合を低減する。本技法はまた、複数のカーネルが(使用事例に基づいて)ロックを許可され得るときに、異なるアクセラレーションカーネルが並列に実行することを可能にすることによってパフォーマンスのためになる。図面に関して、これらおよび他の態様について以下で説明する。
【0013】
図1Aは、一例による、ハードウェアアクセラレーションシステム100を示すブロック図である。ハードウェアアクセラレーションシステム100はホスト計算システム102を含む。ホスト計算システム102は、ハードウェアプラットフォーム(「ハードウェア104」)と、ハードウェア104上で実行するソフトウェアプラットフォーム(「ソフトウェア106」)とを含む。ハードウェア104は、処理システム110と、システムメモリ116と、ストレージデバイス(「ストレージ118」)と、ハードウェアアクセラレータ122とを含む。ソフトウェア106は、オペレーティングシステム(OS)144と、アクセラレーションスタック146と、ホストアプリケーション150と、競合スレッド139とを含む。
【0014】
処理システム110は、マイクロプロセッサ112と、サポート回路114と、周辺バス115とを含む。マイクロプロセッサ112は、x86ベースプロセッサ、ARM(登録商標)ベースプロセッサなど、任意のタイプの汎用中央処理ユニット(CPU)であり得る。マイクロプロセッサ112は、1つまたは複数のコアと、関連する回路(たとえば、キャッシュメモリ、メモリ管理ユニット(MMU)、割込みコントローラなど)とを含むことができる。マイクロプロセッサ112は、本明細書で説明する1つまたは複数の動作を実行し、システムメモリ116および/またはストレージ118に記憶され得るプログラムコードを実行するように構成される。サポート回路114は、マイクロプロセッサ112、システムメモリ116、ストレージ118、ハードウェアアクセラレータ122、または任意の他の周辺デバイスの間のデータフロー管理するためにマイクロプロセッサ112と協働する、様々なデバイスを含む。たとえば、サポート回路114は、チップセット(たとえば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど)、電圧レギュレータ、ファームウェア(たとえば、基本入出力システム(BIOS))などを含むことができる。サポート回路114は、マイクロプロセッサ112と、ハードウェアアクセラレータ122など様々な周辺機器がそれに接続される周辺バス115との間のデータフローを管理する。いくつかの例では、マイクロプロセッサ112は、チップセット(たとえば、ノースブリッジ、サウスブリッジなど)の機能のすべてまたは実質的な部分を引き受ける、システムインパッケージ(SiP)、システムオンチップ(SoC)などであり得る。周辺バス115は、周辺構成要素相互接続エクスプレス(PCIe)など、拡張バス規格を実装することができる。
【0015】
システムメモリ116は、実行可能命令およびデータなどの情報が記憶され、取り出されることを可能にするデバイスである。システムメモリ116は、たとえば、ダブルデータレート(DDR)ダイナミックRAM(DRAM)など、1つまたは複数のランダムアクセスメモリ(RAM)モジュールを含むことができる。ストレージ118は、ローカルストレージデバイス(たとえば、1つまたは複数のハードディスク、フラッシュメモリモジュール、固体ディスク、および光ディスク)、および/または計算システム102が1つまたは複数のネットワークデータストレージシステムと通信することを可能にするストレージインターフェースを含む。ハードウェア104は、グラフィックスカード、ユニバーサルシリアルバス(USB)インターフェースなど、計算システムの様々な他の従来のデバイスと周辺機器とを含むことができる。
【0016】
一例では、ハードウェアアクセラレータ122はプログラマブルデバイス128とRAM126とを含む。ハードウェアアクセラレータ122は随意に不揮発性メモリ(NVM)124を含むことができる。プログラマブルデバイス128は、フィールドプログラマブルゲートアレイ(FPGA)、または他の埋込型サブシステムとともにFPGAプログラマブル論理を有するSoCであり得る。NVM124は、フラッシュメモリなど、任意のタイプの不揮発性メモリを含むことができる。RAM126はDDR DRAMなどを含むことができる。RAM126は、以下でさらに説明するように、ディスクリートRAMバンク127中に編成され得る。プログラマブルデバイス128はNVM124とRAM126とに結合される。プログラマブルデバイス128はまた、処理システム110の周辺バス115に結合される。
【0017】
OS144は、Linux(登録商標)、Microsoft Windows(登録商標)、Mac OS(登録商標)など、当技術分野で知られている任意の汎用オペレーティングシステムであり得る。アクセラレーションスタック146は、ハードウェアアクセラレータ122に、それのコマンドと制御とのためにアプリケーションプログラミングインターフェース(API)を与えるドライバとライブラリとを含む。
【0018】
図1Bは、一例による、アクセラレーテッドアプリケーション180を示すブロック図である。アクセラレーテッドアプリケーション180はホストアプリケーション150とアクセラレーション回路130とを含む。アクセラレーション回路130は、ハードウェアアクセラレータ122上のプログラマブルデバイス128のプログラマブル論理(PL)3においてプログラムされる。ホストアプリケーション150は、何らかの作業を実行するためにアクセラレーションスタック146へのAPIコールを使用してアクセラレーション回路130を呼び出すマイクロプロセッサ112上で実行するソフトウェアを含む。ホストアプリケーション150は、ニューラルネットワーク、ビデオ処理、ネットワーク処理、またはハードウェアアクセラレータ122にいくつかの機能をオフロードする、同様のタイプのアプリケーションを含むことができる。
【0019】
図1Cは、一例による、アクセラレーション回路130を示すブロック図である。アクセラレーション回路130は、バスインターフェース141と、カーネル138と、ロック回路140とを含む。特に、ホストアプリケーション150は、プログラマブルデバイス128のPL3中のカーネル回路(「カーネル138」)をプログラムするためにアクセラレーションスタック146のAPIを呼び出す。カーネル138は、データを処理するための計算ユニットを含む。カーネル138がプログラムされると、ホストアプリケーション150はバスインターフェース141を通してカーネル138にアクセスすることができる。カーネル138は、システムメモリ116および/またはRAM126に記憶されたデータを処理することができる。特に、カーネル138は、バスインターフェース141を通してシステムメモリ116にアクセスし、プログラマブルデバイス128のメモリインターフェースを通してRAM126にアクセスする。カーネル138は、競合スレッド139と競合しているシステムメモリ116中のデータにアクセスすることができる。システムメモリ116は競合スレッド139とカーネル138との間で共有されるので、アクセラレーション回路130はロック回路140を含む。カーネル138は、システムメモリ116中のデータへのロックを獲得するために、ロック回路140に結合され、バスインターフェース141を介してアトミックトランザクションを発行するためにロック回路140を使用する。ロック回路140は、すべての個々のカーネル138にバスインターフェース141を介してアトミックトランザクションを発行させるのではなく、バスインターフェース141を介したアトミックトランザクションの単一のソースを与える。ロック回路140の動作について以下でさらに説明する。
【0020】
一例では、処理システム110はハードウェアアクセラレータ122とは別個に示されている。以下でさらに説明する他の例では、処理システム110とハードウェアアクセラレータ122とは同じプログラマブルデバイス(たとえば、埋込型処理システムをもつプログラマブルデバイス)内に実装され得る。そのようなケースでは、処理システム110は、アクセラレーション回路130と通信するためにPL3との代替相互接続を利用することができ、それの例について以下で説明する。さらに、本明細書で説明する例では、アクセラレーション回路130はプログラマブルデバイス128中に実装される。他の例では、プログラマブルデバイス128は、アクセラレーション回路130がその中に形成された強化回路を備える、特定用途向け集積回路(ASIC)を含む、任意の集積回路(IC)によって置き換えられ得る。したがって、本明細書で説明するロック回路140と相互排除方式とは、プログラマブルデバイス中ならびにASIC中のアクセラレーション回路に適用する。
【0021】
図2は、一例による、計算システム102の論理図を示すブロック図である。図2に示されているように、カーネル138は、バスインターフェース141と周辺バス115とを通してシステムメモリ116中のデータ202にアクセスする。競合スレッド139は、マイクロプロセッサ112上で実行し、また、システムメモリ116中のデータ202にアクセスする。競合スレッド139は、データ202へのアクセスを制御するためにロックアレイ204を使用する。ロックアレイ204は、データ202のいくつかの部分についての識別子によってインデックス付けされる。データ202の一部分にアクセスする前に、競合スレッド139は、ロックが別のスレッドによって設定されているかどうかを確かめるために、データ部分についての識別子を使用してロックアレイ204を検査する。ロックが別のスレッドによって設定されていない場合、競合スレッド139は、ロックを設定し、他の競合スレッド139を除いてデータにアクセスする。競合スレッド139は、マイクロプロセッサ112のアトミック命令を使用してロックアレイ204中のロックを設定し、検査する。
【0022】
ロック回路140はカーネルロックアレイ206を維持する。ロック回路140は、すべてのカーネル138のための中央競合処理ブロックである。N個のカーネル138を仮定し、Nは1よりも大きい整数である。ロック回路140は、データ202についての識別子によってインデックス付けされたカーネルロックアレイ206を維持する。一例では、識別子は、データ202へのキーから生成されたハッシュ値の全部または一部分である。カーネルロックアレイ206中の各要素は(2×N)ビット幅であり、下位Nビットはロックステータスを示し、上位Nビットは保留要求を示す。カーネル138のすべては、ロックについてのカーネル138の要求を、バスインターフェース141を通して周辺バス115を介して直接にではなく、ロック回路140に向ける。ロック回路140は、バスインターフェース141を通してロックを要求する唯一の回路である。
【0023】
図3は、カーネルロックアレイ206の例を示すブロック図である。その例では、カーネルロックアレイ206はアレイインデックス302を含む。アレイインデックス302は、データへのキー(たとえば、メモリアドレス、またはデータ202に関連するいくつかの他のキー)から導出されたハッシュ値の全部または一部分など、データ202についての識別子の任意のセットであり得る。カーネルロックアレイ206中の各エントリは保留要求304とロックステータス306とを含む。保留要求304は、カーネル138の各々について1つの、Nビットを含む。ロックステータス306は、カーネル138の各々について1つの、Nビットを含む。
【0024】
図5は、一例による、ロック要求を管理する方法500を示す流れ図である。図2および図5を参照すると、ロック回路140は以下のように動作する。カーネルIDとインデックス値とを含む、カーネル138からのロック要求を受信すると(ステップ502)、ロック回路140は、ロックが何らかの他のカーネル138によって保持されているかどうかを決定するために、インデックス値によってインデックス付けされたカーネルロックアレイ206を検査する(ステップ504)。ロックが保持されていない場合(ステップ506)、ロック回路140は、ロックアレイ204を検査するためにバスインターフェース141を通して周辺バス115にアトミック要求を発行する(ステップ508)。要求されたデータ部分がロックされていない場合(510)、周辺バス115はロックをロック回路140に戻す。ロック回路140は、次いで、カーネルロックアレイ206中のロックのステータスを、NカーネルIDに対応するビット位置において「1」とマークする(512)。要求されたデータ部分がロックされ得ない場合(510)、ロック回路140は、ある待機期間の後に再びアトミック要求を発行することができる。ロックのステータスが、ロックが別のカーネル138によって保持されていることを示す非0である場合(ステップ506)、ロック回路140は、代わりに、保留要求フィールド中にカーネルIDについてビットを設定する(ステップ514)。カーネル138は、その場合、要求されたデータ部分にアクセスするのを待たなければならない。
【0025】
図6は、一例による、ロック解放を管理する方法600を示す流れ図である。図2および図6を参照すると、カーネルIDとインデックスとを含む、カーネル138からのロック解放要求を受信すると(ステップ602)、ロック回路140は、そのロックインデックスの保留要求フィールドを検査する(604)。保留要求フィールドが0である場合(ステップ606)、ロック回路140は、バスインターフェース141を通して周辺バスを介してアトミックトランザクションを送ることによってロックを解放する(ステップ608)。保留要求フィールドが非0である場合(ステップ606)、ロック回路140は、代わりに、前にロックを要求し、ロックを受信しなかったが、代わりに保留要求が設定された、別のカーネル138にロックを許可する(ステップ610)。
【0026】
ロック回路140は、周辺バス115を介した不要なアトミックトラフィックを防ぎ、アクセラレーション回路関係の競合を局所的に処理する。ロックの許可を待つカーネル138は、周辺バス115を介して繰り返しアトミックトランザクションを送る必要はない。
【0027】
カーネル138が、データ(を修正せずに)にアクセスするためにのみロックを必要とする場合、複数のカーネル138がロック回路140によって同時にロックを許可され得る。保留要求フィールドは、いくつのカーネルが現在ロックを許可されているかを把握するためにカウンタに変換され得る。図4は、保留要求フィールド304ではなくカウンタフィールド308を有するカーネルロックアレイ206の例を示すブロック図である。カウンタフィールド308は、ロックを許可されたカーネルの数を示す、各エントリについての1つの値を含む。ロック回路140は、カーネル138からのロック解放要求に応じてカウンタフィールド308を減分する。カウンタフィールド308が0に達したとき、ロック回路140は、そのデータに対するロックを解放するために周辺バス115を介してアトミック要求を送る。この方式は、GET演算が複数のカーネル138にオフロードされるときに、ホストアプリケーションがSET演算の場合のようにデータを修正するのを防ぐために、基本的にロックが取られる、memcachedなどのアプリケーションにおいて有用である。このことは、ソフトウェアだけでは不可能である並列処理を可能にする利益を有する。
【0028】
アプリケーション要件に基づいて、カーネル138がロックを取るときに、書込み(たとえば、データ構造中のあるフィールドの増分)も必要とされる場合、その増分はアトミック記憶加算(store-add)演算を介して行われ得、複数のユーザカーネル138が依然として並列に動作することができ、より良い全体的性能が得られる。ロックを一定の時間期間の間保持することが競合スレッド139の枯渇を引き起こすことを、使用事例分析が暗示する場合、ロックが第1のカーネル138によって取られると、設定された数を超えるカーネル138についてロックが保持されないように、しきい値カウンタがロック回路140中に実装され得る。
【0029】
図7Aは、一例による、プログラマブルデバイス54を示すブロック図である。プログラマブルデバイス54は、ハードウェアアクセラレータ122中にプログラマブルデバイス128を実装するために使用され得る。プログラマブルデバイス54は、複数のプログラマブル集積回路(IC)1、たとえば、プログラマブルIC 1A、1B、1C、および1Dを含む。一例では、各プログラマブルIC 1は、インターポーザ(interposer)51上に配設されたICダイである。各プログラマブルIC 1は、プログラマブルデバイス54の超論理領域(SLR)53、たとえば、SLR 53A、53B、53C、および53Dを含む。プログラマブルIC 1は、(スーパーロングライン(SLL)52と呼ばれる)インターポーザ51上の導体を通して相互接続される。
【0030】
図7Bは、一例による、プログラマブルIC 1を示すブロック図である。プログラマブルIC 1は、プログラマブルデバイス128、またはプログラマブルデバイス54中のプログラマブルIC 1A~1Dのうちの1つを実装するために使用され得る。プログラマブルIC 1は、(プログラマブルファブリックとも呼ばれる)プログラマブル論理3と、構成論理25と、構成メモリ26とを含む。プログラマブルIC 1は、不揮発性メモリ27、DRAM28、および他の回路29など、外部回路に結合され得る。プログラマブル論理3は、論理セル30と、サポート回路31と、プログラマブル相互接続32とを含む。論理セル30は、複数の入力の一般的な論理関数を実装するように構成され得る回路を含む。サポート回路31は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなど、専用回路を含む。論理セルとサポート回路31とはプログラマブル相互接続32を使用して相互接続され得る。論理セル30をプログラミングするための情報と、サポート回路31のパラメータを設定するための情報と、プログラマブル相互接続32をプログラミングするための情報は構成論理25によって構成メモリ26に記憶される。構成論理25は、不揮発性メモリ27または任意の他のソース(たとえば、DRAM28または他の回路29から)から構成データを取得することができる。いくつかの例では、プログラマブルIC 1は処理システム2を含む。処理システム2は、マイクロプロセッサ、メモリ、サポート回路、IO回路などを含むことができる。いくつかの例では、プログラマブルIC 1は、ネットワークオンチップ(NOC)55とデータ処理エンジン(DPE)アレイ56とを含む。NOC 55は、PS 2とPL 3とDPEアレイ56との間など、プログラマブルIC1のサブシステム間の通信を行うように構成される。DPEアレイ56は、ベクトルプロセッサのアレイなど、データ処理を実行するように構成されたDPEのアレイを含むことができる。
【0031】
図7Cは、一例による、プログラマブルIC 1のSOC実装を示すブロック図である。その例では、プログラマブルIC 1は処理システム2とプログラマブル論理3とを含む。処理システム2は、リアルタイム処理ユニット(RPU)4、アプリケーション処理ユニット(APU)5、グラフィックス処理ユニット(GPU)6、構成およびセキュリティユニット(CSU)12、プラットフォーム管理ユニット(PMU)122など、様々な処理ユニットを含む。処理システム2はまた、オンチップメモリ(OCM)14、トランシーバ7、周辺機器8、相互接続16、DMA回路9、メモリコントローラ10、周辺機器15、および多重化入出力(MIO)回路13など、様々なサポート回路を含む。処理ユニットとサポート回路とは相互接続16によって相互接続される。PL 3も相互接続16に結合される。トランシーバ7は外部ピン24に結合される。PL 3は外部ピン23に結合される。メモリコントローラ10は外部ピン22に結合される。MIO 13は外部ピン20に結合される。PS 2は概して外部ピン21に結合される。APU 5は、CPU 17と、メモリ18と、サポート回路19とを含むことができる。
【0032】
図3Cの例では、プログラマブルIC 1は、ハードウェアアクセラレータ122中で使用され得、上記で説明したように機能することができる。アクセラレーション回路130は、PL3 中でプログラムされ得、上記で説明したように機能することができる。別の例では、上記で説明したハードウェア104の機能は、計算システムのハードウェアを通してではなく、PS 2を使用して実装され得る。そのような場合、ソフトウェア106は、PS 2上で動作し、上記で説明したように機能する。
【0033】
PS 2を参照すると、処理ユニットの各々は、1つまたは複数の中央処理ユニット(CPU)と、メモリ、割込みコントローラ、ダイレクトメモリアクセス(DMA)コントローラ、メモリ管理ユニット(MMU)、浮動小数点ユニット(FPU)など、関連する回路とを含む。相互接続16は、処理ユニットを相互接続し、ならびに、PS 2中の他の構成要素を処理ユニットに相互接続するように構成された、様々なスイッチ、バス、通信リンクなど含む。
【0034】
OCM 14は、PS 2全体にわたって分配され得る1つまたは複数のRAMモジュールを含む。たとえば、OCM 14は、バッテリーバックアップ付きRAM(BBRAM)、緊密結合メモリ(TCM)などを含むことができる。メモリコントローラ10は、外部DRAMにアクセスするためのDRAMインターフェースを含むことができる。周辺機器8、15は、PS 2へのインターフェースを与える1つまたは複数の構成要素を含むことができる。たとえば、周辺機器15は、グラフィックス処理ユニット(GPU)、(たとえば、ディスプレイポート、高精細度マルチメディアインターフェース(HDMI)ポートなどの)ディスプレイインターフェース、ユニバーサルシリアルバス(USB)ポート、イーサネットポート、汎用非同期トランシーバ(UART)ポート、シリアル周辺インターフェース(SPI)ポート、汎用IO(GPIO)ポート、シリアルアドバンストテクノロジーアタッチメント(SATA)ポート、PCIeポートなどを含むことができる。周辺機器15はMIO 13に結合され得る。周辺機器8はトランシーバ7に結合され得る。トランシーバ7は、シリアライザ/デシリアライザ(SERDES)回路、マルチギガビットトランシーバ(MGT)などを含むことができる。
【0035】
図7Dは、PL 3を含むプログラマブルIC 1のフィールドプログラマブルゲートアレイ(FPGA)実装を示す。図7Dに示されたPL 3は、本明細書で説明するプログラマブルデバイスの任意の例において使用され得る。PL 3は、トランシーバ37、構成可能論理ブロック(「CLB」)33、ランダムアクセスメモリブロック(「BRAM」)34、入出力ブロック(「IOB」)36、構成およびクロッキング論理(「CONFIG/CLOCKS」)42、デジタル信号処理ブロック(「DSP」)35、専用入出力ブロック(「I/O」)41(たとえば、構成ポートおよびクロックポート)、および、デジタルクロックマネージャ、アナログデジタル変換器、システム監視論理など、他のプログラマブル論理39を含む、多数の異なるプログラマブルタイルを含む。PL 3はまた、PCIeインターフェース40、アナログデジタル変換器(ADC)38などを含むことができる。
【0036】
いくつかのPL中で、各プログラマブルタイルは、図7Dの上部に含まれる例によって示されるように、同じタイル内でプログラマブル論理要素の入力および出力端子48への接続を有する少なくとも1つのプログラマブル相互接続要素(「INT」)43を含むことができる。各プログラマブル相互接続要素43は、同じタイルまたは他のタイル中の隣接するプログラマブル相互接続要素の相互接続セグメント49への接続をも含むことができる。各プログラマブル相互接続要素43は、論理ブロック(図示せず)間の一般的なルーティングリソースの相互接続セグメント50への接続をも含むことができる。一般的なルーティングリソースは、相互接続セグメント(たとえば、相互接続セグメント50)のトラックと、相互接続セグメントを接続するためのスイッチブロック(図示せず)とを含む、論理ブロック(図示せず)間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント(たとえば、相互接続セグメント50)は1つまたは複数の論理ブロックにわたることができる。プログラマブル相互接続要素43は、一般的なルーティングリソースと一緒にされて、示されているPLのためのプログラマブル相互接続構造(「プログラマブル相互接続」)を実装する。
【0037】
例示的な実装形態では、CLB 33は、ユーザ論理+単一のプログラマブル相互接続要素(「INT」)43を実装するようにプログラムされ得る構成可能論理要素(「CLE」)44を含むことができる。BRAM 34は、1つまたは複数のプログラマブル相互接続要素に加えてBRAM論理要素(「BRL」)45を含むことができる。一般に、タイル中に含まれる相互接続要素の数はタイルの高さに依存する。図示の例では、BRAMタイルは5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)も使用され得る。DSPタイル35は、適切な数のプログラマブル相互接続要素に加えてDSP論理要素(「DSPL」)46を含むことができる。IOB36は、たとえば、プログラマブル相互接続要素43の1つのインスタンスに加えて入出力論理要素(「IOL」)47の2つのインスタンスを含むことができる。当業者に明らかになるように、たとえば、I/O論理要素47に接続された実際のI/Oパッドは、一般に、入出力論理要素47のエリアに限定されない。
【0038】
図示の例では、(図3Dに示された)ダイの中心に近い水平エリアは、構成、クロック、および他の制御論理のために使用される。この水平エリアまたは列から延びる垂直列51は、クロックと構成信号とをPLの幅にわたって分配するために使用される。
【0039】
図5Dに示されたアーキテクチャを利用するいくつかのPLは、PLの大部分を構成する規則的な柱状構造を中断する追加の論理ブロックを含む。追加の論理ブロックはプログラマブルブロックおよび/または専用論理であり得る。
【0040】
図7Dは例示的なPLアーキテクチャのみを示すものであることに留意されたい。たとえば、行中の論理ブロックの数、行の相対幅、行の数および順序、行中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図7Dの上部に含まれる相互接続/論理実装は例にすぎない。たとえば、実際のPL中では、一般に、ユーザ論理の効率的な実装を促進するために、CLBが現れる所はどこでも、CLBの2つ以上の隣接する行が含まれるが、隣接するCLB行の数はPLの全体的サイズとともに変動する。
【0041】
本開示はまた、限定はしないが、以下の例のうちの1つまたは複数において表され得る。
【0042】
例1:計算システムの周辺バスに結合されたバスインターフェースと、バスインターフェースに結合されたロック回路と、ロック回路とバスインターフェースとに結合された複数のカーネル回路とを備える、計算システム中のハードウェアアクセラレータであって、複数のカーネル回路がロック回路にロック要求を与え、ロック要求が、計算システムのシステムメモリに記憶されたデータについてのものであり、ロック回路が、複数のカーネル回路からのロック要求を処理し、ロック要求に基づいてバスインターフェースを通して周辺バスを介してアトミックトランザクションを発行するように構成される、ハードウェアアクセラレータ。
【0043】
例2:ロック回路が、カーネルロックアレイを維持するように構成され、カーネルロックアレイが、それぞれ保留要求フィールドとロックステータスフィールドとを有する複数の要素を含む、例1のハードウェアアクセラレータ。
【0044】
例3:保留要求フィールドが、複数のカーネル回路に対応する複数のエントリを含み、ロックステータスフィールドが、複数のカーネル回路に対応する複数のエントリを含む、例2のハードウェアアクセラレータ。
【0045】
例4:ロック回路が、ロック要求の各々について、カーネルロックアレイ中の対応する要素のロックステータスフィールドを検査することと、利用可能な場合、対応する要素のロックステータスフィールド中にロックを設定することと、ロックが利用可能でない場合、保留要求フィールド中の保留ロック要求を示すこととを行うように構成された、例3のハードウェアアクセラレータ。
【0046】
例5:ロック回路が、カーネルロックアレイを維持するように構成され、カーネルロックアレイが、それぞれカウンタフィールドとロックステータスフィールドとを有する複数の要素を含む、例1のハードウェアアクセラレータ。
【0047】
例6:カウンタフィールドが値を含み、ロックステータスフィールドが、複数のカーネル回路に対応する複数のエントリを含む、例5のハードウェアアクセラレータ。
【0048】
例7:ロック回路が、ロック要求の各々について、カーネルロックアレイ中の対応する要素のロックステータスフィールドを検査することと、対応する要素のロックステータスフィールド中にロックを設定することと、対応する要素のカウンタフィールド中の値を増分することとを行うように構成された、例6のハードウェアアクセラレータ。
【0049】
例8:システムメモリと、システムメモリに結合されたプロセッサと、システムメモリに結合された周辺バスと、周辺バスに結合されたハードウェアアクセラレータと、周辺バスに結合されたバスインターフェースと、バスインターフェースに結合されたロック回路と、ロック回路とバスインターフェースとに結合された複数のカーネル回路とを備える計算システムであって、複数のカーネル回路がロック回路にロック要求を与え、ロック要求が、システムメモリに記憶されたデータについてのものであり、ロック回路が、複数のカーネル回路からのロック要求を処理し、ロック要求に基づいてバスインターフェースを通して周辺バスを介してアトミックトランザクションを発行するように構成された、計算システム。
【0050】
例9:ロック回路が、カーネルロックアレイを維持するように構成され、カーネルロックアレイが、それぞれ保留要求フィールドとロックステータスフィールドとを有する複数の要素を含む、例8の計算システム。
【0051】
例10:保留要求フィールドが、複数のカーネル回路に対応する複数のエントリを含み、ロックステータスフィールドが、複数のカーネル回路に対応する複数のエントリを含む、例9の計算システム。
【0052】
例11:ロック回路が、ロック要求の各々について、カーネルロックアレイ中の対応する要素のロックステータスフィールドを検査することと、利用可能な場合、対応する要素のロックステータスフィールド中にロックを設定することと、ロックが利用可能でない場合、保留要求フィールド中の保留ロック要求を示すこととを行うように構成された、例10の計算システム。
【0053】
例12:ロック回路が、カーネルロックアレイを維持するように構成され、カーネルロックアレイが、それぞれカウンタフィールドとロックステータスフィールドとを有する複数の要素を含む、例8の計算システム。
【0054】
例13:カウンタフィールドが値を含み、ロックステータスフィールドが複数のカーネル回路に対応する複数のエントリを含む、例12の計算システム。
【0055】
例14:ロック回路が、ロック要求の各々について、カーネルロックアレイ中の対応する要素のロックステータスフィールドを検査することと、対応する要素のロックステータスフィールド中にロックを設定することと、対応する要素のカウンタフィールド中の値を増分することとを行うように構成された、例13の計算システム。
【0056】
例15:計算システムのハードウェアアクセラレータ中で実行する複数のカーネル間でメモリに記憶されたデータへのロックを管理する方法であって、その方法は、ハードウェアアクセラレータ中のロック回路において、複数のカーネルのうちの1つのカーネルからのロック要求を受信することと、ロックが複数のカーネルのうちの別のカーネルによって保持されるかどうかを決定することと、ロックが別のカーネルによって保持されることに応答して、カーネルについての保留要求を示すことと、ロックが別のカーネルによって保持されないことに応答して、ロックを取得するために、ロック回路から、計算システムのバスインターフェースを介してロックについてのアトミック要求を発行することとを含む、方法。
【0057】
例16:カーネルがロックを有することを示すことをさらに含む、例15の方法。
【0058】
例17:ロック回路においてカーネルからのロック解放要求を受信することと、複数のカーネルのうちの別のカーネルが保留ロック要求を有するかどうかを決定することと、保留ロック要求の不在に応答して、ロック回路から、計算システムのバスインターフェースを介してロックを解放するための別のアトミック要求を発行することと、保留ロック要求の存在に応答して、ロック回路によって、複数のカーネルのうちの別のカーネルのロックを許可することとをさらに含む、例15の方法。
【0059】
例18:ロック回路が、カーネルロックアレイを維持するように構成され、カーネルロックアレイが、それぞれ保留要求フィールドとロックステータスフィールドとを有する複数の要素を含む、例15の方法。
【0060】
例19:保留要求フィールドが、複数のカーネル回路に対応する複数のエントリを含み、ロックステータスフィールドが、複数のカーネル回路に対応する複数のエントリを含む、例18の方法。
【0061】
例20:ロック回路が、カーネルロックアレイを維持するように構成され、カーネルロックアレイが、それぞれカウンタフィールドとロックステータスフィールドとを有する複数の要素を含む、例15の方法。
【0062】
上記は特定の例を対象とするが、他の例およびさらなる例が、それの基本的な範囲から逸脱することなく考案され得、それの範囲は以下の例によって決定される。
【0063】
上記は特定の例を対象とするが、他の例およびさらなる例が、それの基本的な範囲から逸脱することなく考案され得、それの範囲は以下の特許請求の範囲によって決定される。
図1A
図1B
図1C
図2
図3
図4
図5
図6
図7A
図7B
図7C
図7D