JP2023509306A - ユニタリ値セットのロックフリー読み出し - Google Patents

ユニタリ値セットのロックフリー読み出し Download PDF

Info

Publication number
JP2023509306A
JP2023509306A JP2022534155A JP2022534155A JP2023509306A JP 2023509306 A JP2023509306 A JP 2023509306A JP 2022534155 A JP2022534155 A JP 2022534155A JP 2022534155 A JP2022534155 A JP 2022534155A JP 2023509306 A JP2023509306 A JP 2023509306A
Authority
JP
Japan
Prior art keywords
value
variable
values
variables
barrier
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022534155A
Other languages
English (en)
Other versions
JPWO2021141673A5 (ja
Inventor
チャン スティーブンス,マオニ
ヘンリ ダスッド,パトリック
Original Assignee
マイクロソフト テクノロジー ライセンシング,エルエルシー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by マイクロソフト テクノロジー ライセンシング,エルエルシー filed Critical マイクロソフト テクノロジー ライセンシング,エルエルシー
Publication of JP2023509306A publication Critical patent/JP2023509306A/ja
Publication of JPWO2021141673A5 publication Critical patent/JPWO2021141673A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/70Details relating to dynamic memory management
    • G06F2212/702Conservative garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Vehicle Body Suspensions (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Input From Keyboards Or The Like (AREA)
  • Memory System (AREA)
  • Lock And Its Accessories (AREA)

Abstract

ガベージコレクタ及び他のソフトウェアは高性能のロックフリーマルチスレッドソフトウェアを利用し得る。1組の変数に対するユニタリロックフリー更新は、更新値Z、コードの実行に対する順序付けを強制する解放バリア及び取得バリア、並びに変数のアライメントから生じるアトミック性を含む。伝達は、値を配置するステップ及び値を取り出すステップによって実現される。値の配置は、ZでVar1内の未更新値を置換し、解放バリアを実行し、更新値で他の変数の未更新値を置換し、別の解放バリアを実行し、Var1の更新値でZを置換する。値の取り出しは、DestVar1A内にVar1から読み出し、取得バリアを実行し、それぞれの宛先変数内に他の変数から読み出し、別の取得バリアを実行し、DestVar1B内にVar1から読み出し、DestVar1AがZである場合又はDestVar1A及びDestVar1Bが不等である場合は繰り返す。この解決策は更新値をユニットとしてロックなしに伝達する。

Description

背景
[0001] 多くのコンピュータプログラムは複数の実行のスレッドを含む。時として、スレッドはその実行時に互いに協働するように設計される。例えばproducerスレッドは、producerが待ち行列に入れる中間計算結果又は別のアイテムを作成し得る。その後、consumerスレッドが待ち行列からアイテムを取り、それを用いて更なる作業を行う。ジョブのproducerの側面とconsumerの側面とを分けることは、producerが任意の単一のconsumerよりも高速である場合に1つのproducerが複数のconsumerにアイテムを供給することを可能にし得る。producerの側面とconsumerの側面とを分けることは、プログラムのスケーリング、デバッギング、又はアップグレードも助け得る。
[0002] 一部のソフトウェアアーキテクチャでは、相対的に簡単なやり方でスレッド間の協働を許可し又は強制するためにロックが使用される。ロックは計算資源の排他的制御を与える。ロックは、データの不整合を防ぐのを助ける協働を強制するために使用され得る。producer Pと2つのconsumer C1及びC2が如何なる協働もなく実行される場合、Pが待ち行列内にアイテムを入れたことを確実にするようにC1又はC2がPと協働していないので、C1又はC2又はその両方が例えば空の待ち行列から複製することによってアイテム待ち行列から無効なデータを取り得る。C1及びC2は互いに協働していないので、どちらも待ち行列から同じアイテムを取ろうと試みる可能性もある。しかし待ち行列にロックがある場合、Pが待ち行列にアイテムを追加する間C1及びC2をロックアウトすることができ、ロックを有するconsumerが待ち行列からアイテムを取る間、各consumerは他方をロックアウトすることができる。
[0003] ロックは広く使用されているが、次のような理由から非効率であり得る;ロックが保持されている間、ロックを保持するスレッドだけが無制限に進行することができる。或る時点において、ロックを使用する他のスレッドは自らがロックを保持することなしに行えることを行い、進行を停止する。更に、ロックを保持するスレッドがクラッシュし又はデッドロックし又は無限ループに入る場合、ロックは解放されずプログラムが機能しなくなる。従ってロックを理解する方が簡単であり得るが、スレッド協働のためのロックフリー手法が利用できるようになれば、かかる手法の方が効率的及び高信頼のソフトウェアを提供し得る。
概要
[0004] 本明細書に記載する一部の実施形態は、ロックフリーマルチスレッドソフトウェアの性能改善をもたらす。具体的には、一部はマーク済みメモリセグメントのコンパクト化中のロックの使用を回避することにより、より効率的なガベージコレクションを提供する。但し、実施形態はガベージコレクションのコンパクト化、更にはガベージコレクション全般にも限定されない。他の脈絡及び他の効率も提供され又は採用され得る。
[0005] 一部の実施形態は、ユニタリセットとしての変数値の更新のロックフリー伝達を行う。一部の実施形態では、メモリが個々の未更新値を有する1組の変数を含み、その組は変数Var1及び少なくとも1つの他の変数を含む。メモリと動作可能に通信するプロセッサが、ロックに依拠することなくユニタリセットとして変数値の更新を伝達するように構成される。伝達は、値を配置するステップ及び値を取り出すステップによって実現される。値を配置するステップは次のアクション、つまり更新が進行中であることを示す異なる値Zで変数Var1内の未更新値を置換し、第1の解放バリアを実行し、それぞれの対応する更新値で互いの変数の未更新値を置換し、第2の解放バリアを実行し、やはり更新値である異なる値で変数Var1内の値Zを置換することを順に行う。値を取り出すステップは次のアクション、つまり変数DestVar1A内にVar1から読み出し、第1の取得バリアを実行し、それぞれの宛先変数内に組の他の変数から読み出し、第2の取得バリアを実行し、変数DestVar1B内にVar1から読み出し、DestVar1Aが値Zを有する場合又はDestVar1A及びDestVar1Bが互いに異なる値を含む場合は上記の取り出しステップのアクションを繰り返すことを順に行う。このようにして、実施形態はロックに依拠することなくそれぞれの宛先変数に対して変数によって更新値を伝達し、更新値をユニタリセットとして伝達する。
[0006] 「ユニタリセット」として伝達することは、値の配置及び値の取り出しの完了後に宛先変数内の値が未更新値及び更新値の両方を含まないことを意味する。つまり、伝達が完了したものとして依拠された後で未更新値及び更新値が変数内で混合されない。
[0007] 更に、本明細書で使用する「Var1」、「DestVar1A」、「DestVar1B」、及び「Z」の特定の呼称は便宜上のものに過ぎないことを当業者なら理解されよう。同じ又は等価の伝達アクションを実行するとき、所与の実施形態は異なる識別子又は他の呼称を使用し得る。
[0008] 本明細書の教示に関する他の技術的活動及び特性も当業者に明らかになる。示す例は例示に過ぎない。この概要は、特許請求の範囲に記載する内容の重要な特徴又は本質的な特徴を識別することも、特許請求の範囲に記載する内容の範囲を限定するために使用されることも意図しない。むしろこの概要は、以下の詳細な説明の中で更に説明する一部の技術的概念を単純化した形で紹介するために提供する。技術革新は適切に理解されるものとして特許請求の範囲によって定め、この概要が特許請求の範囲と矛盾する場合に限って特許請求の範囲を優先させるものとする。
図面の説明
[0009] 添付図面に関してより具体的な説明を行う。これらの図面は選択された態様を示すに過ぎず、従って有効範囲又は範囲を完全には決定しない。
[0010]コンピュータシステムを全般的に示し、構成済み記憶媒体も全般的に示すブロック図である。 [0011]強化された更新値伝達機能を有する一部のコンピュータシステムの一部の態様を示すブロック図である。 [0012]ガベージコレクション中の様々な時点におけるメモリ状態の態様を示す図である。 [0013]ガベージコレクションスレッド及びミューテータスレッドの同時実行を示す図である。 [0014]メモリ内のオブジェクトの態様を示す図である。 [0015]変数のアライメントの態様を示す図である。 [0016]デジタルアイテムの態様を示す図である。 [0017]一部のロックフリー更新値伝達方法内のステップを示す流れ図である。 [0018]一部のロックフリー更新値伝達方法内のステップを更に示す流れ図である。
詳細な説明
[0019] 概要
[0020] 技術革新はその起源を超えて展開し得るが、技術革新の起源を理解することは技術革新をより完全に理解することを助け得る。この事例では、本明細書に記載する一部の教示は、ガベージコレクションの性能改善に取り組んでいたMicrosoftの革新者が直面した技術的課題が動機となっている。具体的には、1つの技術的課題はガベージコレクション中に「ストップザワールド」の時間をどのように短縮するのかであり、ストップザワールドの時間は事実上、管理されたメモリの全領域に対するロックをガベージコレクションスレッドが保持する時間である。別の技術的課題は、ロックが使用されない場合にデジタルアイテムに関連する特性値の正しい対をどのように読み出すのかである。
[0021] これらの及び他の課題を以下のシナリオによって示す。自動ガベージコレクションを使用することによって少なくとも部分的に、アプリケーションプログラムスレッド用のメモリを計算システムが管理すると仮定されたい。ガベージコレクションスレッドは、アプリケーションプログラムによって過去使用されていたがもはや使用されていないメモリ片を識別するためにシステム内で時々自動実行される。そのようなメモリ片は、識別後に利用可能なメモリのプール内に自動で戻され、そこからアプリケーションプログラムによって再割り当てされ又は再利用されてもよく、そのアプリケーションプログラムはそのメモリ片を前に使用したのと同じアプリケーションプログラムとすることができ、又は別のプログラムとすることができ、又はその両方であり得る。
[0022] 再割り当てに利用可能なメモリ領域のサイズを増やすために、依然として使用中のメモリのセグメントを再配置してそれらをより連続的にすることも仮定されたい。つまりメモリセグメントX内に記憶されるデータDを別のメモリセグメントYに複製し、その後データDを破損し又は失うことなしにセグメントX内のメモリを再利用し上書きすることができる。全てが上手く行く場合、メモリコンテンツ、Xのアドレスから始まるDのサイズがYのアドレスから始まるメモリに複製されるので、この複製にはXのアドレス、Yのアドレス、及びDのサイズを含む変数が関与する。
[0023] このシナリオでは、Xのアドレス及びDの長さが対にされる値であり、その一方を適切に変更することなしに他方を変更することはデータを破損し、スレッドをクラッシュし、又は他の問題を引き起こし得る。しかし、非協働スレッドは対にされる値の中の部分的更新を引き起こすことによって不整合を作り出す可能性がある。例えばDを含む変数は、スレッドがXのアドレスを読み出した後だがスレッドがDnewを現在含む変数を読み出す前に、Dnew(異なるアイテムのサイズ)を含むように変更され得る。その結果、XからDの量のデータを複製すべきコードが代わりにDnewの量のデータを複製する。同様に、実際にはDnewではなくDであるセグメントX内のデータのサイズを示すために間違って更新された変数に依拠する他のコードもDnewをデータのサイズとして扱う間違いを犯す。
[0024] より広くは、或る組の中の任意の変数が更新されるとき、その組の中の他の変数の全ても整合性を得るために更新されるべきであるように、マルチスレッドプログラム内の2つ以上の変数が組を形成し得る(「更新」は変数の値を変更することができ、又は変数の値が更新後に同じであることを単純に確認し得る)。変数を読み出すどのスレッドも、更新値及びまだ更新されていない値の混合を読み出すべきではない。更新目的で変数はユニットとして扱うべきであり、そのため組は「ユニタリセット」と呼ぶ場合がある。部分的更新を回避する願望が脈絡から明確である場合、ユニタリセット内の変数は単純に「関係する」と記載することもある。ユニタリ変数セットはガベージコレクションだけではなく、多岐にわたる他のマルチスレッドコンテキストでも生じ得る。
[0025] 不所望の部分的更新を回避する1つのやり方は、更新されている1組の変数にロックを使用することである。更新を行うスレッドがロックを取ることによって開始する。次いでそのスレッドは組の中の全ての変数を更新する。最後にそのスレッドがロックを解放する。変数を読み出すスレッドも同様にロックを取り、組の中の全ての変数を読み出し、その後ロックを解放する。
[0026] しかしロックは非効率であり、それは進行するためにロックを保持するスレッドだけが依拠され得るからである。ロックを保持するスレッドはロックを解除できない場合もあり、そのことは処理のペースを著しく下げ又は完全に停止させ得る。
[0027] 都合のよいことに、本明細書の教示を使用して1組の関係する変数に対するロックフリーの更新を実装し実行することもできる。一部の実施形態では、更新値のユニタリセットのロックフリー伝達は、(a)全ての正当な更新値と異なる値Z、(b)コードステートメントの実行に対する順序付けを強制する解放バリア及び取得バリア、並びに(c)変数の自然なアライメントから生じるアトミック性の混合を使用して実現される。様々な実施形態の詳細を以下で更に記載する。
[0028] 動作環境
[0029] 図1を参照し、一実施形態のための動作環境100は少なくとも1つのコンピュータシステム102を含む。コンピュータシステム102は、マルチプロセッサコンピュータシステムでもそうでなくてもよい。動作環境は所与のコンピュータシステム内の1つ又は複数のマシンを含むことができ、かかるマシンはクラウド内でクラスタ化され、クライアント-サーバネットワーク化され、及び/又はピアツーピアネットワーク化され得る。個々のマシンはコンピュータシステムであり、協働するマシン群もコンピュータシステムである。所与のコンピュータシステム102は、例えばアプリケーションを用いてエンドユーザ向けに、管理者向けに、サーバとして、分散処理ノードとして、及び/又は他のやり方で構成され得る。
[0030] 人間のユーザ104は、タイプ入力されるテキスト、接触、音声、動き、コンピュータビジョン、ジェスチャ、及び/又は他の形のI/Oにより、ディスプレイ、キーボード、及び他の周辺装置106を使用することによってコンピュータシステム102と対話することができる。画面126は脱着可能周辺装置106とすることができ、又はシステム102の一体部分であり得る。ユーザインタフェースが一実施形態と1人又は複数の人間のユーザとの間の対話をサポートし得る。ユーザインタフェースは、コマンド行インタフェース、グラフィカルユーザインタフェース(GUI)、ナチュラルユーザインタフェース(NUI)、ボイスコマンドインタフェース、及び/又は他のユーザインタフェース(UI)の提示を含むことができ、別個の選択肢として提示されてもよく又は統合され得る。
[0031] システム管理者、ネットワーク管理者、クラウド管理者、セキュリティ分析家、及び他のセキュリティ担当者、運営担当者、開発者、検査者、エンジニア、監査人、及びエンドユーザはそれぞれ特定の種類のユーザ104である。1人又は複数の人の代わりに動作する自動化されたエージェント、スクリプト、プレイバックソフトウェア、装置等も、例えばシステム102を検査するのを助長するためのユーザ104であり得る。プロセッサ110からの分離可能性に応じて、一部の実施形態では記憶装置及び/又はネットワーキング装置が周辺機器、及び他の実施形態ではシステム102の一部と見なされる場合がある。例えばネットワークインタフェース機器を介したネットワーク108への1つ又は複数の接続を使用し、図1に不図示の他のコンピュータシステムがコンピュータシステム102又は別のシステムの実施形態と技術的に対話し得る。
[0032] 各コンピュータシステム102は少なくとも1つのプロセッサ110を含む。コンピュータシステム102は、他の適したシステムと同様に1つ又は複数のコンピュータ可読記憶媒体112も含む。記憶媒体112は様々な物理タイプのものとすることができる。記憶媒体112は、(単に伝搬信号又は単なるエネルギとは対照的に)揮発性メモリ、不揮発性メモリ、位置固定媒体、脱着可能媒体、磁気媒体、光学媒体、ソリッドステート媒体、及び/又は他の種類の物理的な持続性記憶媒体とすることができる。具体的には、ポータブル(即ち外部の)ハードドライブ、CD、DVD、メモリスティック、又は他の脱着可能不揮発性メモリ媒体等の構成済み記憶媒体114は挿入時或いは設置時に機能的にコンピュータシステムの技術的な一部となることができ、そのコンテンツをプロセッサ110との対話及びプロセッサ110による使用のためにアクセス可能にする。脱着可能な構成済み記憶媒体114は、コンピュータ可読記憶媒体112の一例である。コンピュータ可読記憶媒体112の他の一部の例は、ユーザ104によって容易に取り外すことができない組み込み型のRAM、ROM、ハードディスク、及び他のメモリ記憶装置を含む。現行の米国の特許要件に準拠するために、米国内で未決の又は付与された如何なる請求項の下でも、コンピュータ可読媒体もコンピュータ可読記憶媒体もコンピュータ可読メモリもそれ自体が信号又は単なるエネルギではない。
[0033] 記憶媒体114は、実行可能ファイルであるバイナリ命令116を用いてプロセッサ110によって構成され、本明細書では「実行可能ファイル」は例えばマシンコード、解釈可能コード、バイトコード、及び/又は仮想マシン上で実行されるコードを含むように広い意味で使用する。記憶媒体114は、命令116を実行することによる技術的効果のために作成され、修正され、参照され、及び/又はさもなければ使用されるデータ118を用いても構成される。命令116及びデータ118は、それらがあるメモリ又は他の記憶媒体114を構成し、そのメモリ又は他のコンピュータ可読記憶媒体が所与のコンピュータシステムの機能部分である場合、命令116及びデータ118もそのコンピュータシステムを構成する。一部の実施形態では、データ118の一部が製品の特性、在庫、物理的測定、設定、画像、読取値、標的、ボリューム等の現実世界のアイテムを表す。かかるデータは、バックアップ、復元、コミット、中止、再フォーマット、及び/又は他の技術的操作によって変換されもする。
[0034] 計算装置(例えば汎用コンピュータ、サーバ、又はクラスタ)内の1つ又は複数のプロセッサによって実行されるソフトウェア命令として実装されるものとして実施形態を記載する場合があるが、かかる記載はあり得る全ての実施形態を論じ尽くすことは意図しない。同じ又は同様の技術的効果をもたらすために、同じ又は同様の機能がハードウェアロジック内に全体的に又は部分的にしばしば直接実装される場合もあることを当業者なら理解されよう。或いは又はソフトウェアの実装に加えて、本明細書に記載の技術的機能は1つ又は複数のハードウェアロジックコンポーネントによって少なくとも部分的に実行され得る。例えば、及び他の実装形態を除外することなしに、一実施形態は書換可能ゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準製品(ASSP)、システムオンチップコンポーネント(SOC)、複合プログラム可能論理装置(CPLD)、及び同様のコンポーネント等のハードウェアロジックコンポーネント110、128を含み得る。実施形態のコンポーネントは、例えばその入力、出力、及び/又はその技術的効果に基づいて相互作用機能モジュールへとグループ化することができる。
[0035] プロセッサ110(例えばCPU、ALU、FPU、TPU、及び/又はGPU)、メモリ/記憶媒体112、及びディスプレイ126に加え、動作環境は例えば電池、バス、電源、有線及び無線ネットワークインタフェースカード等の他のハードウェア128も含み得る。本明細書では「画面」及び「ディスプレイ」という名詞を同義で使用する。ディスプレイ126は、1つ又は複数のタッチスクリーン、ペン又はタブレットからの入力に応答する画面、出力のためだけに動作する画面を含み得る。一部の実施形態では、人間のユーザI/O装置(画面、キーボード、マウス、タブレット、マイクロホン、スピーカ、運動センサ等)等の周辺装置106が、1つ又は複数のプロセッサ110及びメモリと動作可能に通信して存在する。
[0036] 一部の実施形態では、システムが有線及び/又は無線ネットワーク108によって接続される複数のコンピュータを含む。ネットワーキングインタフェース機器128は、例えば所与のコンピュータシステム内に存在し得るパケット交換ネットワークインタフェースカード、無線トランシーバ、又は電話網インタフェース等のネットワークコンポーネントを使用してネットワーク108へのアクセスを提供することができる。ネットワーキングインタフェース機器及びスイッチ又はルータ又はファイアウォール等の他のネットワークコンポーネントの仮想化も、例えばソフトウェアディファインドネットワーク又はサンドボックス化された若しくは他の安全なクラウド計算環境内に存在し得る。一部の実施形態では、切断されること又は別のネットワーク化された装置若しくはリモートクラウドに断続的にしか接続されないことを理由に、1つ又は複数のコンピュータが部分的に又は完全に「エアギャップ」される。具体的には、本明細書で教示するロックフリー更新値伝達機能はエアギャップシステム上に導入し保つことができる。所与の実施形態は、直接メモリアクセス、脱着可能不揮発性記憶媒体、又は他の情報記憶-取得及び/又は伝送手法によって技術データ及び/又は技術命令を伝達することもできる。
[0037] 「動作環境」の下で本明細書で提示した上記の態様及び他の態様が所与の実施形態の一部を形成し得ることを当業者なら理解されよう。本明細書の見出しは、実施形態及び非実施形態の特徴集合へと特徴を厳密に分類することは意図しない。
[0038] 必ずしも図示の動作環境又は全ての実施形態の一部ではないが、この動作環境又は本明細書で論じる一部の実施形態内のアイテムと相互運用し得ることを強調するために、1つ又は複数のアイテムを図中で輪郭を破線にした形で示し、又は括弧内に挙げる。如何なる図面又は如何なる実施形態においても、破線の輪郭内に又は括弧形式にないアイテムは必ず必要だということにはならない。具体的には、図1は便宜上示してあり、図1にアイテムを含めることはそのアイテム又は記載されるアイテムの使用が目下の技術革新よりも前に知られていたことは含意しない。
[0039] システムに関する更なる情報
[0040] 図2は、ロックフリー更新値伝達に関して本明細書で教示する機能202の少なくとも一部を用いて強化されたシステム102である一部のシステム200の一部の態様を示す。具体的には、図示の強化システム200は、GCスレッド206内に、又はGCのマーキングフェーズコード210若しくは別の位置に導入されるガベージコレクタ(GC)204を含み得る。或いは又は加えて、機能202はミューテータスレッド208内で、アプリケーションスレッド212内で、又はカーネル120スレッド、デバイスドライバスレッド、アプリケーションスレッド、システムサービススレッド、デーモン、ガベージコレクションスレッド、ユーザインタフェーススレッド、producerスレッド、若しくはconsumerスレッドのうちの1つ又は複数の組み合わせ等の他の種類のスレッド214内で実装され得る。
[0041] 図示のシステム200は、関係する変数218の少なくとも1つのユニタリセット216を含むメモリ112を有する。メモリ112はRAM、ディスク、又は他のメモリ媒体を含むことができ、具体的には一部の実装形態は変数値220を保持するメモリとして1つ又は複数のプロセッサ110レジスタ238を使用する。各変数218はそれぞれの値220を保持し、異なる変数218は様々な時点において同じ値を保持することも異なる値を保持することもできる。変数218は、ソース変数222及び宛先変数224を含む。値228は、ロックフリー更新値伝達機能202を使用してそれぞれの宛先変数224にソース変数222によって安全に及び効率的に伝達される。つまり、更新値228がソース変数222に書き込まれ、ソース変数222から読み出され、宛先変数224内で更新前の値226と更新後の値228とを混合することなしに、及びかかる混合を防ぐためにロックに依拠することなしにそれぞれの宛先変数224に書き込まれる。本明細書では更新前の値226を「未更新値」226とも呼ぶ。
[0042] その名前が示唆するようにソース変数222の更新が進行中であることを示すために、この強化システム200では更新進行中指示値230が使用される。本明細書では更新進行中指示値230を便宜上「Z」とも呼ぶ。
[0043] この強化システム200では、一部のスレッドステートメントの実行に対する順序付けを強制するために、解放バリア232及び取得バリア234が使用される。
[0044] プログラムのソースコードリスト内で解放バリア232よりも前に示されるストア操作が実際に解放バリアの前に実行される点で、解放バリア232は操作の並べ替えを防ぐ。リスト順序は「プログラム順序」と呼ばれることもある。とりわけ、解放バリアに先行するストアの全ての結果がバリア232後の任意のストアの結果よりも前に見えるようになり、バリア232後のストアはバリア232の前に実行されない。解放バリア232は「ストアバリア」232と呼ばれることもあり、バリア(232又は234)は「フェンス」と呼ばれることもある。記憶を助けるものとして、解放バリアは解放バリアに遭遇する前に記憶されていることを理由に全ての値が何時でも解放される状態になっていることを示す。その意味で、少なくともプログラムの実際の実行順序がプログラムのリスト順序に従う。
[0045] プログラムのリスト内で(プログラム順序内で)示される全てのロード操作が取得バリアの前に実行される点で、取得バリア234も操作の並べ替えを防ぐ。取得バリア234は「ロードバリア」234と呼ばれることもある。取得バリアは、取得バリアに遭遇する前に値が取得される(ロードされる)ことを示す。とりわけバリア234に先行する全てのロードは、バリア234の後の任意のロードの前に全体的に見える。
[0046] バリアの効果は様々なやり方で実装することができる。一部の環境100は、「barrier(バリア)」又は「fence(フェンス)」等の識別子を使用してバリアをステートメントとしてソースコード内で明確に示すことをサポートする。或いは又は加えて、例えば以下のようなコードと共に変数に作用するC++のmemory_order_release又はmemory_order_acquire機能等の機能を使用することができる:
Var1.store(Z, std: :memory_order_release);
Var2.store(Var2Update Value, std: :memory_order_release);
Var1.store(Var1UpdateValue, std: :memory_order_release);
[0047] フルメモリバリア236は、解放バリアが実現すること及び取得バリアが実現することの両方を実現するものである。解放バリアに取得バリアを加えたものと完全に同じではないが、本明細書で教示する更新値の伝達に関して、フルメモリバリアは解放バリア又は取得バリア又はその両方のように動作可能だと見なすことができる。その意味で、フルメモリバリアは解放バリアとして又は取得バリアとして「動作」する。効率が下がるが、フルメモリバリア236は一部の実装形態では解放バリア232の代わりに又は取得バリア234の代わりに又はその両方の代わりに使用することができる。
[0048] 図3及び図4は、ガベージコレクションの一部の態様を更に示す。これらの態様の一部はよく知られており、又はよく知られているガベージコレクション活動内で生じるが、本明細書の教示に対するその関連性は、ロックフリー更新値伝達を伴う革新的なガベージコレクションのマーキングを理解した後でのみ明らかになる。ガベージコレクションは変数セット216の例を与えるが、ロックフリー更新値伝達機能202はガベージコレクションでの使用に限定されず、ガベージコレクションは機能202なしに実装することもできる。
[0049] 図3に示すように、ガベージコレクションコードはプログラムの実行によって連続領域302に分割されるメモリ112のセグメント300に作用する。図3のチェックマーク記号によって示すように所与の領域302は1つ又は複数のミューテータスレッドによって明確に使用されており、従って再利用のために使用禁止であり得る。図3のX印によって示すように、所与の領域302は明確に使用中でなく、従って再利用可能な場合もある。領域302の再利用可能性は未決定とすることもできる。
[0050] ガベージコレクションは、概してアドレスをトレースすること或いはメモリ領域の使用中又は未使用の状態を決定すること、及びそれに応じてメモリ領域(又は領域を表すデータ構造)をマーキングすること(308)を含む。一部のガベージコレクタはマーク済み領域を見つかった場所に留置し、再利用可能領域のうちのメモリがプログラム130に割り当てられる。この手法は所謂マークスイープガベージコレクションアルゴリズムにおいて利用される。他のガベージコレクタは、同じ再利用可能性の状態を有する複数の領域をまとめてコンパクト化306するために使用領域を再配置し、又は再利用可能領域を再配置し、又はその両方を行う。マークコンパクションとして知られるこの手法は、マークスイープ手法よりも大きい再利用可能領域304をしばしばもたらすが、コンパクションの結果と一致するようにアドレスを正しく更新する要件によって複雑さが増す。セグメントアドレス及びセグメントサイズがユニタリペアとしてのみ更新されるように、正しいアドレスの更新は機能202を使用して実装することができる。
[0051] 図3及び図4は、ガベージコレクションのフェーズ又はサブフェーズ402、及び幾らかの同時性がある場合の同時性に対するその関係を示すのを助ける。これらの図面は、マーキングフェーズ308、スイープフェーズ404、及びコンパクト化フェーズ306を含むガベージコレクションサイクル内の一部の特定のフェーズを示す。マーキング308中、到達可能オブジェクト230又はメモリの他の再利用不能領域が同じ位置で又はそれらを表すデータ構造内でマーキングされる。スイープ404中、再利用可能オブジェクトが例えば再割り当て用のプール内に配置されることによってヒープからクリアされる。コンパクト化306中、再利用可能領域が一緒に配置され、これも(現在再利用可能でない)使用領域を一緒に配置することとして見なされ得る。所与のガベージコレクタは必ずしも各フェーズを行う必要はなく、例えばコンパクト化306が省略されることもある。
[0052] ガベージコレクションに対する簡単な手法は、ガベージコレクタがメモリ領域を使用中又は再利用可能としてマーキングする(308)間、ガベージコレクタ以外の全てを中断することである。しかし、そのような徹底した「ストップザワールド」の手法はユーザプログラムの性能をあまりにも激しく低下させるので殆どのシステムで許容されない。従って、ガベージコレクションスレッド206及び任意のミューテータスレッド208の同時実行を可能にすることにより、長い「ストップザワールド」のサブフェーズ406を限定することを目的にガベージコレクタを設計することができる。マーキングフェーズは、同時部分と非同時部分とに細分することができる。機能202を使用することはマーキング中の同時性を高める傾向があり、従ってガベージコレクションの対象となるユーザコードの性能を改善する傾向がある。同時性は時間の少なくとも一部において少なくとも2つのスレッドが実行中に重複することを含むが、両方のスレッドが常に一緒に開始すること又は一緒に中断すること又は一緒に停止することは必要としない。
[0053] 図5及び図9は、異なる時点において2つの値を取るポインタ変数218、928を示す。この変数はポインタ変数なので、この変数によって取られる値220はそれぞれのメモリセグメント300のアドレスであり、メモリセグメントを指す破線矢印によって図5に示す。図5で定性的に示すように、この例では各メモリセグメントが異なるサイズである。図5は縮尺通りであることは意図しない。或る特定の所与のセグメント300のアドレス及びサイズは対にされた変数であり、つまり同じユニタリセット216に属する。図5は2つのセグメント300を示し、各セグメントは独自のアドレス及び独自のサイズを有する。
[0054] 図6は変数のアライメントを示す。メモリ112はバイト等の個々にアドレス指定可能なユニット602を含む。多くのシステム102で、単一のプロセッサ110命令が複数のバイトを一度に読み出す又は書き込むことができる。例えば32ビット(4バイト)データ移動命令はアトミック(「アトミック」はスレッドの観点から不可分であることを意味する)命令内で4バイトのデータを読み出し又は書き込み、64ビットデータ移動命令は単一の命令内で8バイトのデータを読み出し又は書き込む。しかしこれらの例では、マルチバイトデータのサイズの倍数である境界604上にアラインされたメモリを読み出す又は書き込むので、データI/Oが部分的にアトミックである。このようなアライメントを「ナチュラル」アライメントと呼ぶことがある。従って4バイトデータ変数218は、4バイトの倍数であるアドレス916に自然にアラインされ、8バイトデータ変数218は、8バイトの倍数であるアドレス916に自然にアラインされる。
[0055] 図6では変数Aが4バイト変数であり、4バイトの整数倍であるアドレス上で始まり終わるので自然にアラインされる。同様に、8バイト変数Bも8バイトの整数倍であるアドレス上で始まり終わるので自然にアラインされる。対照的に、4バイト変数Cは4バイトの整数倍であるアドレス上で始まらず終わらないので自然にアラインされない。
[0056] 図7は、対にされた2つの特性702を有するデジタルアイテム700を示す。例えば上記で論じたガベージコレクションのシナリオでは、割り当てオブジェクト700、704がアドレス特性702を有し、サイズ特性702も有する。より広くは、デジタルアーティファクト700は互いに相関すると想定され、従ってユニタリセット変数として扱うのに適している2つ以上の特性702を有することができる。多くの例があり得る。例えば在庫データベースレコードでは、在庫があるウィジェットの数と在庫があるウィジェットの総価値が対にされ、整合性を得るために一方が更新されると他方も更新されるべきである。更に、都市名コード及び郵便番号を含むデータベースレコードでは、たとえ現在値が正しいことを「更新」が単に確認するだけでも、一方が変わる場合は他方も更新されるべきである。
[0057] 具体的には一部の実施形態は、本明細書で教示するようにユニタリセットとしての変数値の更新のロックフリー伝達のために構成される、システム200又は別のシステム102等の更新値伝達機能強化システムを使用し又は提供する。強化システム200はメモリ112、及びメモリと動作可能に通信するプロセッサ110を含む。メモリはそれぞれの未更新値を有する1組の変数を含み、その組は変数Var1及び少なくとも1つの他の変数を含む。プロセッサ110は、ロックに依拠することなくユニタリセットとして変数値の更新を伝達するためのステップを行うように構成され、ステップは値を配置するステップ及び値を取り出すステップを含む。
[0058] この実施形態では、値を配置するステップが次のアクション934、つまり更新が進行中であることを示す異なる値Zで変数Var1内の未更新値を置換し、第1の解放バリアを実行し、それぞれの対応する更新値で互いの変数の未更新値を置換し、第2の解放バリアを実行し、やはり更新値である異なる値で変数Var1内の値Zを置換することを順に行う。「順に」は図示の順序を意味するが、介在する追加のアクションが行われてもよい。
[0059] この実施形態では、値を取り出すステップが次のアクション934、つまり変数DestVar1A内にVar1から読み出し、第1の取得バリアを実行し、それぞれの宛先変数内に組の他の変数から読み出し、第2の取得バリアを実行し、変数DestVar1B内にVar1から読み出し、DestVar1Aが値Zを有する場合又はDestVar1A及びDestVar1Bが互いに異なる値を含む場合は上記の取り出しステップを繰り返すことを順に行う。
[0060] このシステムはロックに依拠することなくそれぞれの宛先変数に対して変数によって更新値を伝達する。更にこのシステムは、値を配置するステップ及び値を取り出すステップの完了後に宛先変数内の値が未更新値及び更新値の両方を含まない点で更新値をユニタリセットとして伝達する。
[0061] 一部の実施形態では値Zが全ての有効な未更新値と異なり(910)、全ての有効な更新値とも異なる(912)。
[0062] 一部の実施形態では、機能202がガベージコレクションを強化する。例えば一部の実施形態では、未更新値226の1つが空きスペース領域304のアドレス916を表し(914)、対応する更新値228が割り当てアイテム700のアドレス916を表し(914)、未更新値226の別のものが空きスペース領域304のサイズ918を表し(914)、対応する更新値228が割り当てアイテム700のサイズ918を表す(914)。
[0063] 一部の実施形態では更新値がRAM内に記憶されるが、更新値はその場で使用することもでき、例えば更新値228はレジスタ238内に読み出し、RAMに複製しなくてもよい。従って一部の実施形態では、宛先変数224が、ランダムアクセスメモリ112内の位置又はプロセッサ110内のレジスタ238の少なくとも1つを含む。
[0064] 一部の実施形態は、他のものよりも性能が低いバリアを利用する。一部では以下の条件、つまり解放バリア232の少なくとも1つがフルメモリバリア236の一部として実装されること、又は取得バリア234の少なくとも1つがフルメモリバリア236の一部として実装されることのうちの少なくとも1つが成立する。しかし一部の実施形態では、値を配置するステップ及び値を取り出すステップが如何なるフルメモリバリア236にも依拠することなしにそれぞれ実行される。フルメモリバリア236は、解放バリア及び取得バリアの両方として動作する任意のメモリバリアである。
[0065] 一部の実施形態では、自然にアラインされる(924)変数218を使用することによって性能が改善される。具体的には、一部ではソース変数222及び宛先変数224が4バイト境界上でそれぞれアラインされる。
[0066] 計算ハードウェアについての本明細書の広範囲にわたる解説によって情報提供される、直接の又は記載するプロセス若しくは構成済み媒体のシステムバージョンとして導出可能な他のシステムの実施形態も本明細書に記載する。
[0067] 特定のアーキテクチャの例を図中に示すが、実施形態はそれらの例から逸脱し得る。例えば様々な図面に示すアイテムを一実施形態では一緒に含めることができ、或る図面に示すアイテムを省くことができ、様々なアイテム内に示す機能をより少ないアイテムへと又は単一のアイテムへと組み合わせることができ、アイテムを改称することができ、又はアイテムを互いに異なるように接続することができる。
[0068] 技術の側面を示すことを助けるために本開示で例を与えたが、本明細書で与える例は可能な実施形態の全てを記載するものではない。所与の実施形態は、例えば追加の又は異なる技術的特徴、メカニズム、アクションシーケンス、データ構造、又は特定の機能を含むことができ、或いは本明細書で与える例から逸脱してもよい。
[0069] プロセス(方法とも呼ぶ)
[0070] 図8は、システム200等の強化システム又は本明細書で教示する別の機能強化システムによって実行され又は支援され得る方法群800を示す。図9は、本明細書で教示する革新的機能を有するシステムの動作中に使用するのに適した値伝達方法(法的には「プロセス」とも呼ばれ得る)を更に示す。図9は、図8に示すステップに関する幾らかの洗練、補足、又は脈絡上のアクションを含む。図9は、図8に示すステップも組み込む。別段の定めがない限り、図中に示す或いは開示する技術的プロセスは自動で、例えば協働スレッド214によって行われる。人間の管理者又は他の人物によるアクションが関わる限りプロセスは部分的に自動で及び部分的に手動で行われてもよく、例えば一部の実施形態では開発者が伝達される更新値228を指定し得る。本明細書で革新的だと考えられるどのプロセスも完全に手動ではない。所与の実施形態ではプロセスのゼロ以上の図示のステップが、ことによると作用する異なるパラメータ又はデータを伴って繰り返されてもよい。実施形態のステップは、図8及び図9に示す上から下への順序と異なる順序で行われてもよい。ステップは逐次的に、部分的に重複して、又は完全に並列に実行され得る。具体的には、プロセス中に実行するステップを示すために制御流れ図800のアクションアイテム又は制御流れ図900のアクションアイテムを横断する順序はプロセスの実行ごとに異なり得る。チャートの横断順序はプロセスの実施形態ごとに異なってもよい。実行されるプロセスが動作可能であり、少なくとも1つの請求項に従うことを条件に、ステップは省く、組み合わせる、改称する、再びグループ化する、1つ又は複数のマシン上で実行する、或いは図示のフローから逸脱することもできる。
[0071] 一部の実施形態は、ユニタリセットとしての変数値の更新のロックフリー伝達をサポートする方法、以下のアクション934、つまり更新が進行中であることを示す異なる値Zで1組の変数の変数Var1内の未更新値を置換し(804)、第1の解放バリアを実行し(806)、それぞれの更新値で組の他の変数の未更新値を置換し(804)、第2の解放バリアを実行すること(806)を順に行う値を配置するステップ802を使用し又は提供する。これらの実施形態は、やはり更新値である異なる値で変数Var1内の値Zを置換すること(804)も含む。この方法は、ロックに依拠することなしにソース変数222内に更新値を配置する(802)。この方法は、値を配置するステップのアクションの完了後にソース変数222内の値が未更新値226及び更新値228の両方を含まない点で更新値をユニタリセット216としても配置する(802)。
[0072] 一部の実施形態では、この方法が以下のアクション934、つまり変数DestVar1A内にVar1から読み出し(810)、第1の取得バリアを実行し(812)、それぞれの宛先変数内に組の他の変数から読み出し(810)、第2の取得バリアを実行し(812)、変数DestVar1B内にVar1から読み出し(810)、DestVar1Aが値Zを有する場合又はDestVar1A及びDestVar1Bが互いに異なる値を含む場合は上記の取り出しステップのアクションを繰り返すこと(814)を順に行う、値を取り出すステップ808を更に含む。この方法はロックに依拠することなくそれぞれの宛先変数内に変数からの更新値を取り出し(808)、値を配置するステップ及び値を取り出すステップの完了後に宛先変数内の値が未更新値及び更新値の両方を含まない点で更新値をユニタリセットとして伝達する。
[0073] 一部の実施形態では、値を配置するステップ802がスレッドPによって行われ、値を取り出すステップ808が異なるスレッドRによって行われる。「P」及び「R」の呼称は便宜上のものに過ぎず、実施形態は他の識別子を使用してスレッドを指定することもでき又は代わりに指定することができる。
[0074] 実施形態はガベージコレクションが関与する例に厳密に限定されないが、本明細書の教示の態様はガベージコレクションの性能を改善するための取り組みの中で生じた。一部の実施形態では、未更新値226の1つが空きスペース領域のアドレスを表し、対応する更新値228が割り当てアイテムのアドレスを表し、未更新値226の別のものが空きスペース領域のサイズを表し、対応する更新値228が割り当てアイテムのサイズを表す。各アドレス値は対応するサイズ値とユニタリであるべきであり、そのためアドレスを保持する変数はサイズを保持する変数と共にユニタリセット内にある。
[0075] 幾らかより全般的に、多くの実施形態において、更新されるユニタリ変数の1つは全ての変数がもう更新されているかどうかを示すためにも使用されるポインタであることが考えられる。これらの一部ではVar1がポインタ変数928であり、ポインタ変数Var1内の未更新値を値Zで置換すること(804)はVar1をゼロにすること(926)(nullにすること)を含む。
[0076] 教示は3つ以上の変数218のユニタリセット216に適用され得るが、多くの実施形態においてユニタリセットが1対の変数で構成されることが考えられる。具体的には、一部の実施形態では厳密に2つの変数218が更新され、それらはどちらも同じデジタルアイテム700を参照するので互いに密に関係する。関与するデジタルアイテム700は例えば空きスペース領域又はオブジェクトとすることができ、ユニタリ変数によって表されるアイテム特性702は例えばアイテムのアドレス又は他の識別子、アイテムの長さ又は他のサイズであり得る。つまり一部の実施形態では、1組(216)の変数が2つの変数で構成され、方法がデジタルアイテム700を含む装置102内で実行され、組216内の変数のそれぞれがデジタルアイテムの個々の特性702を表す。
[0077] 一部の実施形態は性能が低いフルメモリバリア236を使用する一方、他の実施形態はフルメモリバリア236を使用しない。一部の実施形態では、値を配置するステップ802が、フルメモリバリアの一部として解放バリア232の何れも実装することなしに行われる。これらの一部では並びに他の一部の実施形態では、値を取り出すステップ808が、フルメモリバリアの一部として取得バリア234の何れも実装することなしに行われる。一部のシステムでは、解放バリア又は取得バリア又はその両方が潜在的に含まれ得る。例えば一部のx/86及びx64システムでは、アラインされたロード又はアラインされたストアのためにバリアが明示的に挿入されない。明示的に挿入される解放バリアはnon-temporalストアを行っていない限り省略され得る。
[0078] 一部の実施形態では、使用される(930)各置換アクション804が個々にアトミック(932)である。一部では、使用される(930)各読み出しアクション810が個々にアトミック(932)である。例えばシステム200内で変数が自然にアラインされる(924)結果として、個々のアクション804又は810又はその両方がアトミックであり得る。
[0079] 構成済み記憶媒体
[0080] 一部の実施形態は、構成済みコンピュータ可読記憶媒体112を含む。記憶媒体112は、ディスク(磁気、光学、又は他のもの)、RAM、EEPROM、若しくは他のROM、及び/又は(単なる伝搬信号ではない)とりわけコンピュータ可読記憶媒体を含む他の構成可能メモリを含み得る。構成される記憶媒体は、とりわけCD、DVD、又はフラッシュメモリ等の脱着可能記憶媒体114であり得る。構成済み記憶媒体を形成するために、脱着可能でも脱着不能でもよい及び揮発性でも不揮発性でもよい汎用メモリが、脱着可能記憶媒体114及び/又はネットワーク接続等の別のソースから読み出されるデータ118及び命令116形式で、ユニタリセット216、ソース変数222、宛先変数224、未更新値226、更新値228、更新進行中指示値230、解放バリア232、取得バリア234、アライメント境界604、スレッド214、及び伝達プロセス800等のアイテムを使用する実施形態へと構成され得る。本明細書で開示するように、構成済み記憶媒体112はユニタリ値伝達のための技術的プロセスステップをコンピュータシステム102に行わせることができる。かくして図面は、構成済み記憶媒体の実施形態、及びプロセス(方法とも呼ぶ)の実施形態、並びにシステム及びプロセスの実施形態を示すのを助ける。具体的には、図8又は図9に示す或いは本明細書で教示するプロセスステップの何れも、構成済み記憶媒体の実施形態を形成するように記憶媒体を構成するのを助けるために使用することができる。
[0081] 一部の実施形態は、少なくとも1つのプロセッサ110によって実行されるとき、ユニタリセットとしての変数値の更新のロックフリー伝達をサポートする方法を計算システムに行わせるデータ118及び命令116によって構成されるコンピュータ可読記憶媒体112、114を使用し又は提供する。この方法は以下のアクション、つまり変数DestVar1A内に1組の変数の変数Var1から読み出し(810)、第1の取得バリアを実行し(812)、それぞれの宛先変数内に組の他の変数から読み出し(810)、第2の取得バリアを実行し(812)、変数DestVar1B内にVar1から読み出し(810)、更新が進行中であることを示す値ZをDestVar1Aが有する場合又はDestVar1A及びDestVar1Bが互いに異なる値を含む場合は上記の取り出しステップのアクションを繰り返すこと(814)を順に行う、値を取り出すステップ808を含む。この方法はロックに依拠することなくそれぞれの宛先変数224内に変数222からの更新値228を取り出す(808)。この方法は、値を取り出すステップのアクションの完了後に宛先変数内の値が未更新値及び更新値の両方を含まない点で更新値をユニタリセット216として取り出す(808)。
[0082] 一部の実施形態では、この方法は以下のアクション、つまり更新が進行中であることを示す値ZでVar1内の未更新値を置換し(804)、第1の解放バリアを実行し(806)、それぞれの更新値で組の他の変数の未更新値を置換し(804)、第2の解放バリアを実行し(806)、やはり更新値である異なる値で変数Var1内の値Zを置換すること(804)を順に行う、値を配置するステップ802を更に含む。この方法は、ロックに依拠することなしに変数内に更新値を配置する(802)。この方法は、値を配置するステップのアクションの完了後に変数内の値が未更新値及び更新値の両方を含まない点で更新値をユニタリセット216として配置する。
[0083] 一部の実施形態では、更新が進行中であることを示す値Z 230はゼロ、非数値、又はマイナス1のうちの1つも表す。例えばVar1変数がポインタ変数928、即ちメモリ112のアドレス916を保持するように設計される変数である場合、Zはゼロ(NULL)であり得る。Var1変数が数値変数、例えば整数値又は浮動小数点数の表現を保持するように設計される変数である場合、Zは非数値(例えばNaN)であり得る。Var1変数が非負値、例えば現実世界の又はシミュレートされたゼロ以上の量又は測定値を保持するように設計される場合、Zはマイナス1であり得る。
[0084] 一部の実施形態では、この方法がガベージコレクションソフトウェア204によって実行される。一部では、この方法がマルチスレッドアプリケーション124ソフトウェアによって実行される。しかし本教示は、ガベージコレクション以外の目的で他の計算の脈絡において、例えばカーネル120内で適用されてもよい。
[0085] 更なる詳細、例、及び考察
[0086] 上記の解説のための更なる裏付けを以下に示す。便宜上、この更なる裏付けの題材は様々な見出しの下で登場する。それでもなお、この更なる裏付けは全て予期される実施形態についての本開示の解説の一体部分及び不可欠な部分として理解されることを意図する。
[0087] 一部の実施形態は、グローバル同期なしに所与のシナリオにおいて値の正しい対を読み出すことをサポートする。一部のシナリオは、値の或る対から別の対、例えば(MT1,L1)から(MT2,L2)に進む遷移状態を含む。この脈絡では、変数がテーブル内のメソッドアドレス及びメモリ領域の長さ(サイズ)を含むので、「MT」が「メソッドテーブル」の略記として生じ、「L」が「長さ」の略記として生じる。しかし本開示によって情報提供される当業者なら、他の種類のユニタリ変数セット及び3つ以上の変数を有するユニタリ変数セットの両方に容易に汎用化することができる。
[0088] 特定のガベージコレクションの例を続け、構築されているオブジェクト704の時点を含む、オブジェクトを見るGCスレッドがあると仮定されたい。一部の実施形態は間欠的なゼロ状態を使用し、そのため本明細書で教示する慎重な読み出し及び検査により、たとえ実施形態がグローバル同期の使用を回避しても他のスレッドは(MT1,L2)又は(MT2,L1)を決して観測しない。他の手法は、例えばオブジェクトを構築する持続時間にわたって排他的ロックを取ること又は別のスレッドを中断することによりグローバル同期を不利に使用する場合があり、そのそれぞれが著しい性能オーバヘッドを加える。対照的に、本明細書で教示する解決策は非常に軽量である。
[0089] 一部の実施形態では、割り当てオブジェクトがそこから構築される空き領域を示す状態である(MT1,L1)からオブジェクトの構築が始まる。構築後、状態変数の値は構築済みオブジェクトを(MT2,L2)として表す。
[0090] 従って疑似コードに関して、構築プロセスの値を配置する部分を次のように記述することができる:
(MT1,L1)として開始する
状態S1:(0,L1)に遷移する
解放バリア(前の書き込みが次の書き込みの前に生じることを確実にするため)
状態S2:(0,L2)に遷移する
解放バリア(前の書き込みが次の書き込みの前に生じることを確実にするため)
(MT2,L2)として終了する
[0091] 値の消費は、サイズを正しく計算するためにオブジェクト情報を読み出すGCスレッド上で生じる。このコードは(MT1,L1)又は(MT2,L2)を読み出すが、他の2つの組み合わせ(未更新値を更新値と混合する矛盾した更新の組み合わせ)、つまり(MT1,L2)、(MT2,L1)は読み出さない。
[0092] MTが様々な時点における値MT1及びMT2を保持する変数であり、Lが様々な時点における値L1及びL2を保持する変数であり、「<-」が割り当てを示し、「!=」が等しくないことを示し、「==」が等しいことを示し、「Loop」がジャンプラベルである疑似コードに関して、構築プロセスの値を取り出す(消費する)部分を次のように記述することができる:
Loop:
MT1<-Read(MT)
取得バリア(次の読み出しが前の読み出しの後に生じることを確実にするため)
L<-Read(L)
取得バリア(次の読み出しが前の読み出しの後に生じることを確実にするため)
MT2<-Read(MT)
if(MT1!=MT2)goto Loop
if(MT1==0)goto Loop
[0093] 課される順序付けを理由に、リーダはMTを二度読み出すことによってMT1をL2と共に読み出さず、第2の読み出しは0又はMT2を認める。第2の読み出しもMT1を読み出し得るが、その場合コードもL1を読み出し、ループを出ることになる。更にリーダはMT2及びL1を読み出さず、その理由はL1がMT2よりも前に書き込まれており、リーダがバリアによって課される順序付けに従うからである。
[0094] 技術的特性
[0095] 本明細書に記載する実施形態の技術的特性が当業者に明らかになり、幅広い注意深い読者にも幾つかの点で明らかになる。一部の実施形態は、デジタルシステム変数218を読み出すこと(810)、デジタルシステム変数218を書き込むこと(804)、変数218によって含まれる値220内の整合性を保つこと、メモリ112内の変数をアラインすること(924)、並びにメモリバリア232及び234を使用することによって命令116を順序付けすること等の技術的活動に対処し、これらはそれぞれ計算技術に深く根差している活動である。論じる技術的メカニズムの一部は、例えば解放バリア232、取得バリア234、変数アライメント924、及び更新が依然として進行中であることを示す際に使用するために専ら費やされる専用値Zを含む。論じる技術的効果の一部は、例えば更新値228のユニタリ伝達902、変数の更新の伝達のためにロック908に依拠することを回避すること(904)、及びそのようにロックを回避することによってマルチスレッドソフトウェアの性能を改善すること(936)を含む。従って純粋に知的なプロセスは明確に除外される。本教示の技術的特性に基づく他の利点も提供する説明から当業者に明らかになる。
[0096] 本明細書に記載する一部の実施形態をより広範な脈絡でとらえる人もいる。例えば整合性、排他性、順序付け、更新、及び有効性等の概念は特定の実施形態に関連すると見なされる場合がある。しかし、広範な脈絡が得られることから抽象観念に関する独占権が本明細書で求められていることにはならず、そのようなことはない。むしろ本開示は、1組の変数が読み出されるとき未更新値だけ又は更新値だけが読み出され、未更新値と更新値との混合が決して読み出されないように1組の変数をどのように効率的に更新するのか等、その技術的効果が特定の技術的問題を完全に又は部分的に解決する適切に具体的な実施形態を提供することに焦点を当てる。整合性、排他性、順序付け、更新、又は有効性を含む他の構成済み記憶媒体、システム、及びプロセスは本発明の範囲外である。従って本開示を適切に理解することにより、曖昧さ、単なる抽象性、技術的特性の欠如、及び付随する証明問題も回避される。
[0097] 更なる組み合わせ及び改変形態
[0098] コード、データ構造、ロジック、コンポーネント、通信、及び/又はその機能的な等価物のこれらの組み合わせの何れも、上記のシステム及びその改変形態の何れかと組み合わせることもできる。プロセスは本明細書に記載の任意のステップを、動作可能な任意のサブセット又は組み合わせ又は順序で含み得る。それぞれの改変形態は単独で、又は他の改変形態の何れか1つ若しくは複数と組み合わせて生じ得る。それぞれの改変形態はプロセスの何れかと生じることができ、各プロセスは他のプロセスの何れか1つ又は複数と組み合わせることができる。各プロセス又は改変形態を含むプロセスの組み合わせは、上記の構成済み記憶媒体の組み合わせ及び改変形態の何れかと組み合わせることができる。
[0099] より全般的に、本開示の全ての部分又はその中の任意の具体的詳細が、実施可能性、明細書記載、又は最良の形態等の法的基準を満たすために必ずしも必要ではないことを当業者なら理解されよう。更に、実施形態は本明細書に記載の特定の動機を与える例、プログラミング言語若しくはライブラリ若しくはランタイム、ソフトウェアプロセス、開発ツール、識別子、データ構造、データ編成、注釈、制御フロー、疑似コード、命名規則、又は他の実装の選択に限定されない。本技術革新の所有者のものでも、他の任意の特許開示との如何なる明らかな矛盾も本特許開示で提示する特許請求の範囲を解釈する際には役に立たない。
[00100] 頭字語、略語、名称、及び記号
[00101] 幾つかの頭字語、略語、名称、及び記号を以下に定める。他のものは本明細書の他の箇所で定められており、又は当業者によって理解されるために本明細書で定められる必要がない。
[00102] ALU:算術論理演算ユニット
[00103] API:アプリケーションプログラムインタフェース
[00104] BIOS:基本入出力システム
[00105] CD:コンパクトディスク
[00106] CPU:中央処理装置
[00107] DVD:デジタル多用途ディスク又はデジタルビデオディスク
[00108] FPGA:書換可能ゲートアレイ
[00109] FPU:浮動小数点処理装置
[00110] GPU:グラフィカル処理ユニット
[00111] GUI:グラフィカルユーザインタフェース
[00112] IaaS又はIAAS:サービスとしてのインフラ
[00113] IoT:モノのインターネット
[00114] LAN:ローカルエリアネットワーク
[00115] OS:オペレーティングシステム
[00116] PaaS又はPAAS:サービスとしてのプラットフォーム
[00117] RAM:ランダムアクセスメモリ
[00118] ROM:読取専用メモリ
[00119] TPU:テンソル処理ユニット
[00120] UEFI:ユニファイドエクステンシブルファームウェアインタフェース
[00121] WAN:広域ネットワーク
[00122] 幾つかの更なる用語
[00123] 本明細書では図中に示すような例示的実施形態を参照し、かかる実施形態を説明するために本明細書では特定の言語を使用する。しかし、関連技術の及び本開示の所有権を有する当業者なら思い付く、本明細書に示す特徴の改変形態及び更なる修正形態、並びに本明細書の特定の実施形態によって示す抽象的原理の更なる技術的応用が特許請求の範囲に含まれると見なされるべきである。
[00124] 本開示の中で用語の意味を明確化し、そのためそれらの明確化に注意して特許請求の範囲を読むべきである。特定の例を与えるが、使用される用語の意味に及び1つ又は複数の請求項の範囲に他の例も含まれ得ることを当業者なら理解されよう。本明細書では用語が一般的用法(とりわけ非技術的用法)、又は特定の業界の用法、又は特定の辞書若しくは1組の辞書で有するのと必ずしも同じ意味を有さない。用語の広さを示すのを助けるために、参照番号は様々な表現法と共に使用され得る。所与のテキスト片から参照番号が省かれることは、必ずしも図面の内容がそのテキストによって論じられていないことを意味しない。本発明者らは、特定の及び選択された辞書編集に対する権利を主張し行使する。引用符でくくった用語は明確に定められているが、引用符を使用することなしに用語を暗示的に定める場合もある。ここでは詳細な説明及び/又は出願ファイル内の他の箇所で用語が明示的に又は暗示的に定められ得る。
[00125] 「Var1」、「DestVar1A」、「DestVar1B」、及び「Z」の呼称は本明細書で便宜上使用するに過ぎない。更に、上記の呼称を有する変数又はコンピュータによって実装される他のデータ構造に特許請求の範囲を限定することは意図しない。むしろ、上記のような呼称を特許請求の範囲において括弧で囲むとき、明確な意図は契約内の当事者又は概念を正確に識別するために「以下~と呼ぶ(hereinafter referred to)」という語句が使用され得るのと同様のやり方で、その呼称に先行する変数又は他のデータ構造をその呼称が指すことである。実際、特許請求の範囲において括弧で囲む呼称は、その呼称に先行する変数又は他のデータ構造の別名だと考えることができる。
[00126] 代わりの呼称の可用性を更に示すために、Var1は例えば「更新状態指示変数」と呼ぶこともでき、DestVar1Aは例えば「第1の宛先状態変数」と呼ぶこともでき、DestVar1Bは例えば「第2の宛先状態変数」と呼ぶこともでき、Zは例えば「更新進行中値」と呼ぶこともできる。
[00127] 本明細書で使用するとき、「コンピュータシステム」(「計算システム」としても知られる)は、例えば1つ又は複数のサーバ、マザーボード、処理ノード、ラップトップ、タブレット、(携帯型又はそうではない)パーソナルコンピュータ、携帯情報端末、スマートフォン、スマートウォッチ、スマートバンド、セルフォン又は携帯電話、少なくともプロセッサ及びメモリを有する他のモバイル装置、テレビゲーム機、拡張現実システム、ホログラフィック投影システム、テレビ、着用可能型計算システム、及び/又は命令によって少なくとも部分的に制御される1つ若しくは複数のプロセッサを設ける他の装置を含み得る。命令はメモリ及び/又は特殊回路内のファームウェア又は他のソフトウェアの形を取り得る。
[00128] 「マルチスレッド」コンピュータシステムは、複数の実行スレッドをサポートするコンピュータシステムである。「スレッド」という用語は、スケジューリング及びことによると同期が可能な又はその対象となるコードを含むように理解すべきである。例えば「タスク」、「プロセス」、又は「コルーチン」等、スレッドは本開示の外では別の名称で知られる場合もある。但し、スレッドがプロセス内の実行パスを定める点で本明細書ではスレッドとプロセスとを区別する。更に、プロセスのスレッドは所与のアドレス空間を共有するのに対し、異なるプロセスは異なる個々のアドレス空間を有する。プロセスのスレッドは並列に、逐次的に、又は並列実行と逐次的実行との組み合わせ(例えばタイムスライス)で実行され得る。
[00129] 「プロセッサ」は、同時マルチスレッディング実装におけるコア等のスレッド処理ユニットである。プロセッサはハードウェアを含む。所与のチップが1つ又は複数のプロセッサを保持し得る。プロセッサは汎用とすることができ、又はベクトル処理、グラフィックス処理、信号処理、浮動小数点算術処理、暗号化、I/O処理、機械学習等の特定用途向けにカスタマイズされ得る。
[00130] 「カーネル」は、オペレーティングシステム、ハイパーバイザ、仮想マシン、BIOS又はUEFIコード、及び同様のハードウェアインタフェースソフトウェアを含む。
[00131] 「コード」は、プロセッサ命令、(定数、変数、及びデータ構造を含む)データ、又は命令とデータとの両方を意味する。本明細書では「コード」及び「ソフトウェア」を同義で使用する。実行コード、解釈コード、及びファームウェアはコードの一部の例である。
[00132] 「プログラム」は、アプリケーション、カーネル、ドライバ、インタラプトハンドラ、ファームウェア、状態機械、ライブラリ、及び(開発者とも呼ぶ)プログラマによって書かれる及び/又は自動生成される他のコードを含むように本明細書では広く使用される。
[00133] 「ルーチン」は、ルーチンが呼び出されたプログラム実行内の時点の直後に命令に制御を通常返す呼び出し可能なコード片である。使用される用語にもよるが、「関数」と「手続き」とを他の箇所で区別することがあり、関数は値を通常返すのに対して手続きは値を返さない。本明細書で使用するとき「ルーチン」は関数及び手続きの両方を含む。ルーチンは値(例えばsin(x))を返すコードを有することができ、又は値を提供することもなく単純に返すことができる(例えばvoid関数)。
[00134] 「クラウド」は、測定されるオンデマンドサービスに弾性的に利用可能な計算、記憶、及びネットワーキングのためのプールされた資源を意味する。クラウドは、プライベート、パブリック、コミュニティ、又はハイブリッドとすることができ、クラウドサービスはサービスとしてのインフラ(IaaS)、サービスとしてのプラットフォーム(PaaS)、サービスとしてのソフトウェア(SaaS)、又は別のサービスの形で提供され得る。別段の定めがない限り、ファイルからの読み出し又はファイルへの書き込みについての如何なる解説もローカルファイルの読み出し/書き込み、又はクラウドネットワーク若しくは他のネットワークであり得るネットワーク上の読み出し/書き込み、又はその両方(ローカル及びネットワーク化された読み出し/書き込み)を行うことを含む。
[00135] 「IoT」又は「モノのインターネット」は、アドレス指定可能な埋め込み型計算ノードの任意のネットワーク化された集合を意味する。かかるノードは本明細書で定めるコンピュータシステムの例だが、以下の特性、つまり(a)人間可読なローカルディスプレイがないこと、(b)ローカルキーボードがないこと、(c)主たる入力源が非言語的データのソースを追跡するセンサであること、(d)ローカル回転ディスク記憶域がないこと(RAMチップ又はROMチップが唯一のローカルメモリを提供する)、(e)CD又はDVDドライブがないこと、(f)家庭電化製品又は家庭付属設備に埋め込むこと、(g)植え込み型の又は装着可能な医療装置に埋め込むこと、(h)車両に埋め込むこと、(i)プロセスオートメーション制御システムに埋め込むこと、又は(j)環境モニタリング、都市インフラのモニタリング、産業機器のモニタリング、エネルギ使用量のモニタリング、人間若しくは動物の健康のモニタリング、物理的セキュリティ、又は物理的輸送システムのモニタリングのうちの1つに焦点を当てた設計のうちの少なくとも2つを更に有する。IoTストレージは、クラウドによる、別のネットワークによる、又は直接的なローカルアクセスの試みによる不正アクセスの標的になり得る。
[00136] 計算資源への「アクセス」は、資源を読み出す、修正する、書き込む、実行する、或いは利用するための許可又は他の機能を使用することを含む。試行済みアクセスは実際のアクセスと明確に区別され得るが、「試行済み」の修飾子がない「アクセス」は試行済みアクセス及び実際に行われる又は提供されるアクセスの両方を含む。
[00137] 本明細書で使用するとき、別段の定めがない限り「含む(include)」は追加の要素を認める(即ちincludesはcomprisesを意味する)。
[00138] 「最適化」は、必ずしも完全とまでは行かないが改善することを意味する。例えば、最適化されているプログラム又はアルゴリズムを更に改善することが可能であり得る。
[00139] 「プロセス」は電子計算学分野の用語として本明細書で使用することがあり、その技術的意味で例えばコルーチン、スレッド、タスク、割り込みハンドラ、アプリケーションプロセス、カーネルプロセス、手続き、又はオブジェクトメソッドも含み得る又はそのようにも呼ばれ得る計算資源ユーザを包含する。実際問題として、「プロセス」はWindows(登録商標)Task Manager、Linux(登録商標)ps(それぞれMicrosoft Corporation、Linus Torvaldsの商標である)、又は他のオペレーティングシステム環境内の同様のユーティリティ等のシステムユーティリティによって識別される計算エンティティである。「プロセス」は、例えばシステムクレーム又は製品(構成済み記憶媒体)クレームとは対照的にプロセスクレームを記載する際の特許法の専門用語としても本明細書で使用する。同様に「方法」は、電子計算学分野における技術用語(「ルーチン」の一種)として、及び特許法の専門用語(「プロセス」)としても本明細書で時々使用する。本明細書では特許法の意味での「プロセス」及び「方法」を同義で使用する。当業者は特定の例においてどちらの意味を意図するのかを理解し、特許請求の範囲に記載する所与の(特許法の意味での)プロセス又は方法が(電子計算学の意味での)1つ又は複数のプロセス又は方法を使用して実装されることもあり得ることも理解されよう。
[00140] 「自動的に」は、自動化なしとは対照的に自動化(例えば本明細書で論じた特定の操作及び技術的効果に関してソフトウェアによって構成される汎用計算ハードウェア)を使用することを意味する。具体的には、「自動的に」行われるステップは紙の上で手によって又は人の頭の中で行われないが、人間によって開始されてもよく又は人間によって対話的に導かれてもよい。そのように与えられる技術的対話なしには実現することのない1つ又は複数の技術的効果を得るために自動のステップがマシンによって実行される。自動的に行われるステップは、事前対応的に行われる少なくとも1つの操作を含むと推定される。
[00141] 技術的効果は技術的実施形態の推定目的であることを当業者なら理解されよう。例えば実施形態に計算が関与し、一部の計算が技術的コンポーネントなしに(例えば紙と鉛筆、更には知的ステップによって)実行することもできるという単なる事実は技術的効果の存在を除去せず、又は実施形態の具体的及び技術的性質を変えることはない。値220の置換804、値220の読み出し810、バリアの実行806、812、アラインされた変数の使用922等の値伝達操作、及び本明細書で論じた他の多くの操作は本質的にデジタルであることが理解されよう。必要なデータを読み書きして本明細書で教示したユニタリ更新値伝達ステップを実行するために、人間の考えはCPU若しくは他のプロセッサと又はRAM若しくは他のデジタル記憶域と直接インタフェースすることはできない。本開示に鑑みてこのことは全て当業者によって十分に理解されよう。
[00142] 「計算的に」は計算装置(少なくともプロセッサとメモリ)が使用されていることを同様に意味し、単なる人間の思考又は単なる人間の活動だけによって結果を得ることを除外する。本明細書で理解されるように、例えば紙と鉛筆を使って算術を行うことは算術を計算的に行うことではない。計算的結果の方が高速であり、広範であり、深く、正確であり、一貫しており、包括的であり、及び/又は人間性能だけの範囲を上回る技術的効果をさもなければもたらす。「計算的ステップ」は計算的に行われるステップである。「自動的に」も「計算的に」も必ずしも「即座に」を意味しない。本明細書では「計算的に」及び「自動的に」を同義で使用する。
[00143] 「事前対応的に」は、ユーザからの直接の要求がないことを意味する。実際ユーザは、実施形態による事前対応的ステップが可能であったことをステップの結果がユーザに提示されるまで認識することさえない場合がある。別段の定めがある場合を除き、本明細書に記載した任意の計算的な及び/又は自動的なステップが事前対応的にも行われ得る。
[00144] 本明細書の全体を通して、任意選択的な複数形「(s)」、「(es)」、又は「(ies)」は示された特徴の1つ又は複数が存在することを意味する。例えば「processor (s)」は「1つ又は複数のプロセッサ」又は等価に「少なくとも1つのプロセッサ」を意味する。
[00145] 米国法及び慣習では、本明細書で、特許請求の範囲で、又は他の箇所で「ステップ」という言葉を使用することはミーンズプラスファンクション、ステッププラスファンクション、又は米国特許法第112条第6項/第112条(f)の請求項の解釈を引き起こすことを意図しない。その効果に対する如何なる推定も本明細書で明確に反駁される。
[00146] 米国法及び慣習では、「~のための手段」という語句を使用しない限り、特許請求の範囲がミーンズプラスファンクションの解釈を引き起こすことは意図しない。もしある場合、ミーンズプラスファンクションの言語として解釈されることが意図される請求項の言語は、「~のための手段」という語句を使用することによってその意図を明確に説明する。「~のための手段」を使用することによって及び/又は請求項の言語についての法廷の法的解釈によってミーンズプラスファンクションの解釈が該当する場合、所与の名詞又は所与の動詞に関して本明細書で列挙される手段は、請求項の言語にリンクするように、及び図面のブロック図の中の同じブロック内に登場すること、同じ又は同様の名称で表記すること、同じ参照番号で表記すること、図面の何れかの中で示す機能的な関係、本開示のテキスト内で述べる機能的な関係のうちの何れかによって本明細書で互いにリンクされるように理解されるべきである。例えば請求項の限定事項が「zac widget」を列挙し、その請求項の限定事項がミーンズプラスファンクションの解釈の対象となる場合、最低でも「zac widget」に言及する任意の図面のブロック、段落、又は例の中で本明細書の何処かで識別される、又はzac widgetに割り当てられる任意の参照番号によって互いに結び付けられる、又はzac widgetの構造若しくは動作と機能的な関係を有するものとして開示される全ての構造がzac widgetに関する出願内で識別される構造の一部と見なされ、zac widgetの構造に関する1組の等価物を定義することを助ける。
[00147] 当業者は、この技術革新の開示が様々なデータ値及びデータ構造について論じることを理解し、かかるアイテムがメモリ(RAM、ディスク等)内にあり、それによりメモリを構成することを理解されよう。当業者は、この技術革新の開示が所与の実装形態において実行コード内に埋め込まれる様々なアルゴリズムステップを論じること、及びかかるコードもメモリ内にあること、及びかかるコードがかかるコードを実行する任意の汎用プロセッサを効果的に構成し、それによりそのプロセッサを汎用プロセッサから機能的に専用ハードウェアである専用プロセッサに変えることも理解されよう。
[00148] 従って当業者は、(a)請求項に列挙されるメモリ及び(b)請求項に列挙されるデータ構造又はデータ値又はコードを非重複アイテムとして扱う間違いを犯さない。言及されるあらゆるデータ構造又はデータ値又はコード片があることを請求項が明確に列挙しなくても、データ構造及びデータ値及びコードがそのようにメモリ内にあることが理解されよう。従って、そのようにあることを明確に列挙することは要求されない。しかしそのように列挙することは禁止されてもおらず、他の全てのデータ値及びデータ構造及びコードがあることを除外することなしに1つ又は2つの選択列挙が強調のために存在する場合もある。同様に、請求項に列挙されるコードの機能は、その構成品質が請求項の中で明確に列挙されていようがいまいがプロセッサを構成するように理解される。
[00149] 本明細書の全体を通して、別段の定めがない限り、プロセス内のステップへの如何なる言及もそのステップが利害関係人によって直接実行され得ること、及び/又は介在するメカニズム及び/又は介在するエンティティを介して当事者によって間接的に実行され得ること、並びにステップの範囲に依然として含まれることを推定する。つまり利害関係人によってステップが直接実行されることは、直接の実行が明確に述べられた要件でない限り不要である。例えば宛先又は他の対象に関して取得すること、アラインすること、収集すること、伝達すること、実行すること、ループすること、nullにすること、実行すること、配置すること、読み出すこと、解放すること、置換すること、表現すること、取り出すこと、更新すること、使用すること、ゼロイングすること、(及び取得する、取得された、アラインする、アラインされた等)等の利害関係人によるアクションを含むステップは、本明細書で列挙される任意のアクションを含むが利害関係人によって直接行われるものとして依然として理解される、他の何らかの当事者による上記のような又は転送する、複製する、アップロードする、ダウンロードする、符号化する、復号する、圧縮する、解凍する、暗号化する、解読する、認証する、呼び出す等の介在するアクションを伴う場合がある。
[00150] データ又は命令に言及するときは常に、それらのアイテムがコンピュータ可読メモリ及び/又はコンピュータ可読記憶媒体を構成し、それにより例えば単純に紙の上で、人の頭の中で、又は配線上で伝搬される単なる信号として存在するのとは対照的に、そのメモリ又は媒体を特定の品物に変えることが理解されよう。米国内での特許保護のために、メモリ又は他のコンピュータ可読記憶媒体は、In re Nuijten事件の米国特許商標局(USPTO)の解釈の下で特許を受けることができる内容の範囲外の伝搬信号又は搬送波又は単なるエネルギではない。米国では如何なる請求項も信号自体又は単なるエネルギを対象として含まず、本開示に鑑みて別様に主張する如何なる請求項の解釈も文言上不当である。米国外で付与された請求項の中で明示的に別段の定めがない限り、請求項は信号自体又は単なるエネルギを対象として含まない。
[00151] 更に、本明細書の他の箇所の相反する規定にも関わらず、(a)一方でコンピュータ可読記憶媒体及びコンピュータ可読メモリと、(b)他方で信号媒体とも呼ばれる伝送媒体との間の明確な区別が理解されるべきである。伝送媒体は、伝搬信号又は搬送波のコンピュータ可読媒体である。対照的に、コンピュータ可読記憶媒体及びコンピュータ可読メモリは伝搬信号又は搬送波のコンピュータ可読媒体ではない。特許請求の範囲の中で明示的に別段の定めがある場合を除き、「コンピュータ可読媒体」は伝搬信号自体ではなく、単なるエネルギではなく、コンピュータ可読記憶媒体を意味する。
[00152] 本明細書の「実施形態」は例である。「実施形態」という用語は「本発明」と同義ではない。結果として生じる側面の組み合わせがそれ自体で本明細書に明確に記載されていなくても、実施形態は他の実施形態を作り出すために(結果が動作可能であることを条件に)側面を自由に共有又は借用することができる。許可されたあらゆる組み合わせが明確に及び個別に記載されることを要求することは当業者にとって不要であり、特許明細書が当業者である読者に向けて書かれていると認識するポリシに反する。組み合わせることができる少数の特徴からさえ生じる可能な組み合わせの数に関する公式の組み合わせの計算及び非公式の一般的な直感は、本明細書に記載した態様について多数の態様の組み合わせが存在することも示す。従って、あらゆる組み合わせを明確に列挙することを要求することは、特許明細書が簡潔であること及び関係する技術分野を読者がよく知っていることを求めるポリシに反する。
[00153] 参照番号の一覧
[00154] 以下の一覧は便宜上、及び作図を支援するために、及び複数のアイテムを参照することによって技術革新を表す本明細書のテキストの一部として与える。ここに挙げないアイテムは、それでもなお所与の実施形態の一部であり得る。テキストをより読み易くするために、テキスト内の参照アイテムの全てではないが一部の記述の近くに所与の参照番号を記述する。所与のアイテムの異なる例又は異なるインスタンスに関して同じ参照番号が使用される場合がある。参照番号の一覧は下記の通りである:
[00155] 100 計算環境とも呼ばれる動作環境
[00156] 102 計算システム(computational system又はcomputing system)とも呼ばれるコンピュータシステム
[00157] 104 ユーザ、例えばソフトウェア開発者
[00158] 106 周辺装置
[00159] 108 例えばLAN、WAN、ソフトウェアディファインドネットワーク、クラウド、及び他の有線又は無線ネットワークを含むネットワーク全般
[00160] 110 プロセッサ
[00161] 112 コンピュータ可読記憶媒体、例えばRAM、ハードディスク
[00162] 114 脱着可能な構成済みコンピュータ可読記憶媒体
[00163] 116 プロセッサを用いて実行可能な命令。脱着可能記憶媒体上に又は他のメモリ内(揮発性又は不揮発性又はその両方)にあり得る
[00164] 118 データ
[00165] 120 カーネル、例えばオペレーティングシステム、BIOS、UEFI、デバイスドライバ
[00166] 122 ツール、例えばアンチウイルスソフトウェア、ファイアウォール、パケットスニッファソフトウェア、侵入検出システム、侵入阻止システム、他のサイバセキュリティツール、デバッガ、プロファイラ、コンパイラ、インタプリタ、デコンパイラ、アセンブラ、逆アセンブラ、ソースコードエディタ、自動補完ソフトウェア、シミュレータ、ファザー、リポジトリアクセスツール、バージョン制御ツール、オプティマイザ、コラボツール、他のソフトウェア開発ツール及びツールスイート(例えば統合開発環境を含む)、ハードウェア開発ツール及びツールスイート、診断等
[00167] 124 アプリケーション、例えばワードプロセッサ、ウェブブラウザ、スプレッドシート、ゲーム、電子メールツール、コマンド
[00168] 126 「ディスプレイ」とも呼ばれる表示画面
[00169] 128 参照番号106、108、110、112、114にさもなければ関連しない計算ハードウェア
[00170] 130 ソフトウェア全般、例えばカーネル、アプリケーション、ツール、クラウドサービス
[00171] 200 機能202の一部又は全てを含む更新値伝達機能によって強化されたシステム
[00172] 202 本明細書に記載の任意の形式の更新値伝達機能
[00173] 204 「GC」又は「ガベージコレクタコード」とも呼ぶガベージコレクタ
[00174] 206 GCスレッド、つまりガベージコレクタコードに少なくとも主に(命令の50%超)充てられるスレッド
[00175] 208 ミューテータスレッド、つまりガベージコレクタコード以外のコードに少なくとも主に(命令の50%超)充てられるスレッド。ミューテータスレッドはしばしばユーザスレッドだがカーネルスレッドでもよい。用語の中の「ミューテータ」は、ミューテータスレッドがガベージコレクション中に使用されるアドレスを変化させ得る(即ち変更し得る)ことを示す
[00176] 210 ガベージコレクタのマーキングフェーズコード
[00177] 212 アプリケーションスレッド
[00178] 214 スレッド全般、例えばカーネルスレッド、デバイスドライバスレッド、アプリケーションスレッド、システムサービススレッド、デーモン、ガベージコレクションスレッド、ユーザインタフェーススレッド、producerスレッド、consumerスレッド、又は別の実行のスレッド
[00179] 216 変数のユニタリセット
[00180] 218 変数全般
[00181] 220 変数値全般
[00182] 222 ソースから宛先への伝達に関するソース変数
[00183] 224 伝達に関する宛先変数
[00184] 226 未更新値、例えば伝達される更新値を保持するようにソース変数が更新される前のソース変数内の値
[00185] 228 伝達される更新値
[00186] 230 「Z」とも呼ぶ更新進行中値。所与のプログラム内の、有効な未更新値又は有効な更新値だとそのプログラムによって見なされない任意の値であり得る。例えば変数がオブジェクトアドレスを保持する場合、NULLがZの適切な値であり、その理由はNULLが有効なオブジェクトアドレスではないからである。参照番号230はアクションを示すために、つまり更新が進行中であることを示すためにも使用される。
[00187] 232 解放バリア
[00188] 234 取得バリア
[00189] 236 フルメモリバリア
[00190] 238 プロセッサ内のレジスタ
[00191] 300 メモリのセグメント、例えばガベージコレクションによって少なくとも部分的に管理されるメモリの区域、ページ、ブロック、又は他の領域
[00192] 302 割り当てられており、使用中又は再利用可能か分からない(図3の
Figure 2023509306000002

によって示す)、或いはその領域を割り当てたプログラムによってもはや使用されていないことが分かっているので再利用可能だと分かっている(図3のXによって示す)、メモリの連続領域
[00193] 304 コンパクト化によって生じる再利用可能メモリの連続領域
[00194] 306 コンパクト化、例えば再利用可能なより大きい連続領域を作成するために1つ又は複数の再利用可能領域を再配置すること
[00195] 308 マーキング。(i)使用中若しくは再利用可能か分からない、又は(ii)再利用可能だと分かっているものとしてメモリ領域をマーキングするためにガベージコレクション中に行われるアクション
[00196] 402 ガベージコレクションのフェーズ及びサブフェーズ
[00197] 404 ガベージコレクションのスイープフェーズ
[00198] 406 「STW」とも呼ばれる、ガベージコレクションのストップザワールドサブフェーズ
[00199] 602 個々にアドレス指定可能なメモリのユニット、例えばバイト
[00200] 604 4バイト境界
[00201] 700 メモリ112内で表されるデジタルアイテム、例えばレコード、オブジェクト、データ構造、変数、又は他のアーティファクト
[00202] 702 デジタルアイテムの特性、例えば位置、サイズ、古さ、信頼性、所有権、アクセスカウント等
[00203] 704 オブジェクト指向プログラミングの意味でのオブジェクト
[00204] 800 流れ図。800は図8の流れ図によって示す又は図8の流れ図と一致するユニタリ値伝達方法も指す
[00205] 802 ユニタリ値の配置
[00206] 804 値を値で置換する。置換は異なる値、又は別段の定めがない限り(置換が異なることをZ又は値230又は不等式の言及がそれぞれ示さない限り)同じ値の複製であり得る。置換804は置換される値の上に置換値を書き込むことを含む。
[00207] 806 解放バリアの実行。この実行は記載した他の命令以上に任意の追加のプロセッサ命令自体を実行することを必ずしも含まないが、本明細書で論じるようにそれらの他の命令の少なくとも一部に対して順序を課す
[00208] 808 ユニタリ値の取り出し
[00209] 810 値の読み出し
[00210] 812 取得バリアの実行。この実行は記載した他の命令以上に任意の追加のプロセッサ命令自体を実行することを必ずしも含まないが、本明細書で論じるようにそれらの他の命令の少なくとも一部に対して順序を課す
[00211] 814 例えば本明細書で与える流れ図又は疑似コードループによって示すように1つ又は複数の命令を繰り返す
[00212] 900 流れ図。900は(図8のステップを組み込む)図9の流れ図によって示す又は図9の流れ図と一致するユニタリ値伝達方法も指す
[00213] 902 ソース変数から宛先変数に更新値を伝達する
[00214] 904 ユニタリ値の伝達を行うためにロックの使用に依拠することを回避する
[00215] 906 ユニタリ値の伝達を行うためにロックの使用に依拠する
[00216] 908 ロック。例えば相互排除、セマフォ、又はクリティカルセクションを使用して実装され得る
[00217] 910 有効な未更新値と異なる
[00218] 912 有効な更新値と異なる。多くの事例で有効な未更新値のグループと有効な更新値のグループは同じグループだが、他の事例では異なる場合もあり、例えば更新がアドレスを指定の範囲に制限する、又は量をNの倍数(N>1)に制限することがある
[00219] 914 特性702をデジタル形式で表し、表現は直接的とすることができ又は間接性を含む場合があり、例えば変数はアドレスのテーブル内のエントリを指定することによって、又はポインタへのポインタとして、又はポインタへのポインタへのポインタとして、又は表される特性を含む構造へのポインタ等としてアドレスを表すことができる
[00220] 916 メモリアドレス、例えばRAM内の変数の位置
[00221] 918 サイズ、例えばメモリの空き領域又はオブジェクト内のバイト数
[00222] 922 アラインされた変数の使用
[00223] 924 変数を例えばNバイト境界上でアラインし、但しN>1でありNは2の倍数である
[00224] 926 変数をゼロにし、例えば全てゼロのビットで上書きする。変数の「null化」と呼ばれることもある
[00225] 928 ポインタ変数、つまりメモリアドレスを保持するように設計される変数
[00226] 930 アトミックアクションの使用
[00227] 932 アトミックアクション
[00228] 934 アクション全般。特許用語ではアクションはそれ自体でステップと見なすことができ、又はより大きいステップの一部と見なされ得る
[00229] 936 ソフトウェアの遂行又は実行
[00230] 938 実行され得る行為としてのガベージコレクション。ガベージコレクションソフトウェアを実行することによって行われる活動
[00231] 940 アプリケーション実行。アプリケーションソフトウェアを実行することによって行われる活動
[00232] 942 他の何らかの参照番号が割り当てられていない本開示で論じる任意のステップ
[00233] 結論
[00234] 手短に言えば、本明細書の教示は、マルチスレッドソフトウェアの性能を強化する多岐にわたる計算システム102の変数のユニタリ更新機能202を提供する。ガベージコレクション938はそのような高性能のロックフリーマルチスレッドソフトウェア130の一例である。1組(216)の変数218に対するユニタリロックフリー更新は、更新値Z 230、コード130の実行936に対する順序付けを強制する解放バリア232及び取得バリア234、並びに変数のアライメント924から生じるアトミック性932を含む。伝達902は、値を配置するステップ802及び値を取り出すステップ808によって実現される。値の配置802は、Z 230で変数Var1 222内の未更新値226を置換し(804)、解放バリア232を実行し(806)、更新値228で他の変数222の未更新値226を置換し(804)、別の解放バリア232を実行し(806)、Var1 222の更新値228でZ 230を置換する(804)。値の取り出し808は、DestVar1A 224内にVar1 222から読み出し(810)、取得バリア234を実行し(812)、それぞれの宛先変数224内に他の変数222から読み出し(810)、別の取得バリア234を実行し(812)、DestVar1B 224内にVar1 222から読み出し(810)、DestVar1AがZである場合又はDestVar1A及びDestVar1Bが不等である場合は814を繰り返す。これらの解決策200、900はソース変数222内に、そこから宛先変数224内に更新値228をユニット216としてロック908なしにそれぞれ伝達する(902)。
[00235] 実施形態は、一般データ保護規則(GDPR)等の検査された及び適切なセキュリティ制御及びプライバシ制御をそれ自体で更に含むように又はその利益を得るように理解され、例えばソフトウェア内へのマルウェアの注入又は活性化による計算システムの不正使用を防ぐのを助けるために適切な措置を講じるべきであることが理解されよう。本明細書で教示するツール及び技法の使用はかかる制御の使用と両立し得る。
[00236] 動機を与える一部の例ではMicrosoftの技術が使用されているが、本明細書の教示はMicrosoftによって供給され又は管理される技術での使用に限定されない。例えば適切なライセンスの下、本教示は他のクラウドサービスプロバイダ又は他の開発環境プロバイダ又は他のランタイムプロバイダによって提供されるソフトウェア又はサービス内に具体化され得る。
[00237] 本明細書では特定の実施形態をプロセスとして、構成済み記憶媒体として、又はシステムとして特に図示し説明したが、或る種類の実施形態の解説は概して他の実施形態の種類にも及ぶことが理解されよう。例えば図8及び図9に関するプロセスの説明は構成済み記憶媒体の説明も助け、他の図面に関して論じるようなシステム及び製造物の技術的効果及び動作の説明も助ける。或る実施形態の限定が必ずしも別の実施形態に取り込まれることはない。具体的には、プロセスは、構成済みメモリ等のシステム又は製造物を論じながら提示したデータ構造及び構成に必ずしも限定されない。
[00238] 実装形態の詳細は、特定の閾値、比較、サンプルフィールド、特定の種類のランタイム又はプログラミング言語又はアーキテクチャ、特定のスクリプト又は他のタスク等の特定のコード及び特定の計算環境に関係することができ、従って全ての実施形態で登場する必要がないことを当業者なら理解されよう。詳細を論じる際に使用したプログラム識別子及び他の一部の用語は実装形態に固有のものであり、従って全ての実施形態に関係する必要がないことも当業者なら理解されよう。それでもなお、本明細書にあることは必ずしも要求されないが、かかる詳細は脈絡を与えることによって一部の読者を助けることができ、及び/又は本明細書で論じた技術の多くの可能な実装形態の幾つかを示すことができる。
[00239] 特許請求の範囲に記載する又は記載可能な全ての実施形態の網羅ではなく例示である技術的プロセス、技術的効果、技術的メカニズム、及び技術的詳細を含む本明細書で提供したアイテムに十分注目することにより、本開示及び本明細書に記載の実施形態は技術分野外の内容、又は主要な若しくは当初の要因若しくは動機等のその任意の発想、又は単なる結果自体、又は知的プロセス若しくは知的ステップ、又はビジネス方法若しくは普及している経済的慣行、又は人間の活動を組織化する単なる方法、又は自然の法則自体、又は自然に起こる事柄又はプロセス、又は生物若しくは生物の一部、又は数学的公式自体、又は隔離されたソフトウェア自体、又は単に従来型のコンピュータ、又は完全に知覚不能な任意の物事若しくは任意の抽象観念自体、又は重要でない解決後の活動、又は未指定の機器上で完全に実装される任意の方法、又は有用及び具体的な結果をもたらさない任意の方法、又は全ての使用分野の任意の専占、又は特許保護が求められる若しくは認可されている若しくは強制されている管轄区の法の下で特許保護に不適格である他の任意の内容を対象としないことを当業者なら理解されよう。
[00240] 何らかの特徴Xを有する実施形態に本明細書で言及すること、及び何らかの特徴Yを有する実施形態に本明細書の他の箇所で言及することは、除外することが本明細書で明確に述べられていない限り、特徴X及び特徴Yの両方を有する実施形態を本開示から除外しない。或る実施形態の一部だと述べられる任意の特徴が別の実施形態への包含から明確に除外される場合も、たとえその特定の除外が本明細書のどの例にも示されていなくてもあり得るという意味で、あり得る全ての請求項の否定的限定事項が本開示の範囲に含まれる。本明細書では「実施形態」という用語は、「プロセス、システム、製品、構成済みコンピュータ可読記憶媒体、及び/又は準拠法と合致するやり方で適用される本明細書の教示の他の例」のより簡便な形として使用するに過ぎない。従って、実施形態が少なくとも1つの請求項と合致する限り、所与の「実施形態」は本明細書で開示した特徴の任意の組み合わせを含み得る。
[00241] 図示の全てのアイテムが全ての実施形態で存在しなければならないわけではない。逆に、実施形態は図面で明確に示されていないアイテムを含んでもよい。一部の可能性を具体例によってテキスト及び図面で本明細書に示したが、実施形態はそれらの例から逸脱してもよい。例えば或る例の特定の技術的効果又は技術的特徴が省かれ、改称され、異なるようにグループ化され、繰り返され、ハードウェア及び/又はソフトウェア内に異なるようにインスタンス化されてもよく、又は例の2つ以上の中に登場する効果若しくは特徴の混合であり得る。一部の実施形態では或る位置に示す機能を異なる位置において提供することもでき、全体として見た相互作用モジュールの集合から所望の技術的効果を必ずしも省くことなしに、所与の実装形態において機能モジュールを様々なやり方で定めることができることを当業者なら理解されよう。空間が限られていることにより又は便宜上、別個のステップは図中の単一のボックス内に一緒に示す場合があるが、それでもなお別々に実行可能であり、例えば方法の所与の実行において或るステップを他のステップなしに実行することができる。
[00242] 全体を通して参照番号によって図面を参照してきた。図中又はテキスト内の所与の参照番号に関連する表現法の如何なる明らかな不一致も、その数字によって参照される内容の範囲を単に広げるものとして理解すべきである。たとえ同じ参照番号が使用されても、所与の参照番号の異なるインスタンスが異なる実施形態を指す場合がある。同様に、所与の参照番号は動詞、名詞、及び/又はそれぞれの対応するインスタンスを指すために使用する場合があり、例えばプロセッサ110は命令を実行することによって命令を処理すること(110)ができる。
[00243] 本明細書で使用するとき、「a」、「an」、及び「the」等の用語は示されているアイテム又はステップの1つ又は複数を包含する。具体的には、特許請求の範囲では、アイテムへの言及はそのアイテムが少なくとも1つ存在することを広く意味し、ステップへの言及はステップの少なくとも1つのインスタンスが実行されることを意味する。同様に、文法上の誤り又は誤解を避けるために、「is」及び他の単数動詞の形は文脈が認める場合「are」及び他の複数形の可能性を包含すると理解すべきである。
[00244] 見出しは便宜上のものに過ぎず、所与のトピックに関する情報は、その見出しがそのトピックを示す節の外で見つかることがある。
[00245] 出願する全ての請求項及び要約は本明細書の一部である。
[00246] 本明細書で使用する任意の用語が業界標準を含意し或いは業界標準に言及する限りにおいて、及び準拠法が標準等、の特定のバージョンの識別を要求する限りにおいて、本開示は準拠する特許法による本開示の最先の優先日の時点で少なくともドラフト形式で公開されているその標準の最新バージョンを指すように理解すべきである(より新しい場合は最終形式が優先する)。
[00247] 例示的実施形態を図示し上記で説明してきたが、特許請求の範囲に記載する原理及び概念から逸脱することなしに数多くの修正を加えることができること、及びかかる修正が完全な抽象概念を包含する必要がないことが当業者に明らかになる。本内容は構造上の特徴及び/又は手続き上の行為に固有の言語で記載してきたが、添付の特許請求の範囲の中で定める内容は上記の特定の技術的特徴又は行為に必ずしも限定されないことを理解すべきである、特許請求の範囲。所与の定義又は例の中で識別した全ての手段又は側面又は技術的効果が全ての実施形態の中で存在する又は利用される必要はない。むしろ、記載した特定の特徴及び行為及び効果は特許請求の範囲を実装するときに考慮するための例として開示した。
[00248] 全抽象観念を含むに及ばないが特許請求の範囲の等価物の意味及び範囲に含まれる全ての変更は、法が認める限界まで特許請求の範囲に包含されるものとする。

Claims (15)

  1. 個々の未更新値を有する1組の変数を含むメモリであって、前記組は更新状態指示変数(Var1)及び少なくとも1つの他の変数を含む、メモリと、
    前記メモリと動作可能に通信するプロセッサであって、ロックに依拠することなくユニタリセットとして変数値の更新を伝達するためのステップを行うように構成され、前記ステップは値を配置するステップ及び値を取り出すステップを含む、プロセッサと
    を含む、ユニタリセットとしての変数値の更新のロックフリー伝達のために構成されるシステムであって、
    前記値を配置するステップは、更新が進行中であることを示す異なる値(Z)で前記更新状態指示変数(Var1)内の未更新値を置換することと、第1の解放バリアを実行することと、それぞれの対応する更新値で互いの変数の前記未更新値を置換することと、第2の解放バリアを実行することと、更新値である異なる値で前記更新状態指示変数(Var1)内の前記値(Z)を置換することを順に行うことを含み、
    前記値を取り出すステップは、第1の宛先状態変数(DestVar1A)内に前記更新状態指示変数(Var1)から読み出すことと、第1の取得バリアを実行することと、それぞれの宛先変数内に前記組の他の変数から読み出すことと、第2の取得バリアを実行することと、第2の宛先状態変数(DestVar1B)内に前記更新状態指示変数(Var1)から読み出すことと、前記第1の宛先状態変数(DestVar1A)が前記値(Z)を有する場合又は前記第1の宛先状態変数(DestVar1A)及び前記第2の宛先状態変数(DestVar1B)が互いに異なる値を含む場合は上記の取り出すステップのアクションを繰り返すことを順に行うことを含み、
    これにより前記システムはロックに依拠することなくそれぞれの宛先変数に対して前記変数によって前記更新値を伝達し、前記値を配置するステップ及び前記値を取り出すステップの完了後に前記宛先変数内の前記値が未更新値及び更新値の両方を含まない点で前記更新値をユニタリセットとして伝達する、
    システム。
  2. 前記値(Z)が全ての有効な未更新値と異なり、全ての有効な更新値とも異なる、請求項1に記載のシステム。
  3. 前記未更新値の1つが空きスペース領域のアドレスを表し、前記対応する更新値が割り当てアイテムのアドレスを表し、前記未更新値の別のものが前記空きスペース領域のサイズを表し、前記対応する更新値が前記割り当てアイテムのサイズを表す、請求項1に記載のシステム。
  4. 前記宛先変数が、ランダムアクセスメモリ内の位置又はプロセッサ内のレジスタの少なくとも1つを含む、請求項1に記載のシステム。
  5. 前記解放バリアの少なくとも1つがフルメモリバリアの一部として実装されること、又は前記取得バリアの少なくとも1つがフルメモリバリアの一部として実装されることのうちの少なくとも1つが成立する、請求項1に記載のシステム。
  6. 前記値を配置するステップ及び前記値を取り出すステップが如何なるフルメモリバリアにも依拠することなしにそれぞれ実行され、フルメモリバリアは解放バリア及び取得バリアの両方として動作するメモリバリアである、請求項1に記載のシステム。
  7. 前記変数がそれぞれ自然にアラインされる、請求項1に記載のシステム。
  8. ユニタリセットとしての変数値の更新のロックフリー伝達をサポートする方法であって、
    前記方法は、
    更新が進行中であることを示す異なる値(Z)で1組の変数の更新状態指示変数(Var1)内の未更新値を置換することと、
    第1の解放バリアを実行することと、
    それぞれの更新値で前記組の他の変数の未更新値を置換することと、
    第2の解放バリアを実行することと、
    更新値である異なる値で前記更新状態指示変数(Var1)内の前記値(Z)を置換すること
    を順に行う、値を配置するステップを含み、
    これにより前記方法はロックに依拠することなく前記変数内に更新値を配置し、前記値を配置するステップのアクションの完了後に前記変数内の前記値が未更新値及び更新値の両方を含まない点で前記更新値をユニタリセットとして配置する、
    方法。
  9. 値を取り出すステップであって、 第1の宛先状態変数(DestVar1A)内に前記更新状態指示変数(Var1)から読み出すことと、
    第1の取得バリアを実行することと、
    それぞれの宛先変数内に前記組の他の変数から読み出すことと、
    第2の取得バリアを実行することと、
    第2の宛先状態変数(DestVar1B)内に前記更新状態指示変数(Var1)から読み出すことと、
    前記第1の宛先状態変数(DestVar1A)が前記値(Z)を有する場合又は前記第1の宛先状態変数(DestVar1A)及び前記第2の宛先状態変数(DestVar1B)が互いに異なる値を含む場合は上記の取り出すステップのアクションを繰り返すこと
    を順に行う、値を取り出すステップを更に含み、
    これにより前記方法はロックに依拠することなくそれぞれの宛先変数内に前記変数から前記更新値を取り出し、前記値を配置するステップ及び前記値を取り出すステップの完了後に前記宛先変数内の前記値が未更新値及び更新値の両方を含まない点で前記更新値をユニタリセットとして伝達する、
    請求項8に記載の方法。
  10. 前記値を配置するステップがスレッド(P)によって行われ、前記値を取り出すステップが異なるスレッド(R)によって行われる、請求項9に記載の方法。
  11. 前記未更新値の1つが空きスペース領域のアドレスを表し、前記対応する更新値が割り当てアイテムのアドレスを表し、前記未更新値の別のものが前記空きスペース領域のサイズを表し、前記対応する更新値が前記割り当てアイテムのサイズを表す、請求項9に記載の方法。
  12. 前記更新状態指示変数(Var1)内の前記未更新値を前記値(Z)で置換することは前記更新状態指示変数(Var1)をゼロにすることを含む、請求項8に記載の方法。
  13. 前記1組の変数が2つの変数で構成され、前記方法がデジタルアイテムを含む装置内で実行され、前記組内の前記変数のそれぞれが前記デジタルアイテムの個々の特性を表す、請求項8に記載の方法。
  14. 前記値を配置するステップが、フルメモリバリアの一部として前記解放バリアの何れも実装することなしに行われる、請求項8に記載の方法。
  15. 各置換アクションが個々にアトミックである、請求項8に記載の方法。
JP2022534155A 2020-01-06 2020-11-17 ユニタリ値セットのロックフリー読み出し Pending JP2023509306A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/735,418 US11392427B2 (en) 2020-01-06 2020-01-06 Lock-free reading of unitary value sets
US16/735,418 2020-01-06
PCT/US2020/060813 WO2021141673A1 (en) 2020-01-06 2020-11-17 Lock-free reading of unitary value sets

Publications (2)

Publication Number Publication Date
JP2023509306A true JP2023509306A (ja) 2023-03-08
JPWO2021141673A5 JPWO2021141673A5 (ja) 2023-10-19

Family

ID=73793820

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022534155A Pending JP2023509306A (ja) 2020-01-06 2020-11-17 ユニタリ値セットのロックフリー読み出し

Country Status (11)

Country Link
US (1) US11392427B2 (ja)
EP (1) EP4088187B1 (ja)
JP (1) JP2023509306A (ja)
KR (1) KR20220119400A (ja)
CN (1) CN114930297A (ja)
AU (1) AU2020421583A1 (ja)
BR (1) BR112022011124A2 (ja)
CA (1) CA3166321A1 (ja)
IL (1) IL294304A (ja)
MX (1) MX2022008352A (ja)
WO (1) WO2021141673A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10802965B2 (en) 2019-02-05 2020-10-13 Microsoft Technology Licensing, Llc Reducing synchronization reliance in garbage collection marking
US11422932B2 (en) 2019-12-20 2022-08-23 Microsoft Technology Licensing, Llc Integrated reference and secondary marking
US12020064B2 (en) * 2020-10-20 2024-06-25 Micron Technology, Inc. Rescheduling a failed memory request in a processor
US11797344B2 (en) * 2020-10-30 2023-10-24 Red Hat, Inc. Quiescent state-based reclaiming strategy for progressive chunked queue
US11954023B2 (en) 2022-07-20 2024-04-09 Microsoft Technology Licensing, Llc Garbage collection prefetching state machine

Family Cites Families (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6047295A (en) 1998-05-05 2000-04-04 International Business Machines Corporation Computer system, program product and method of managing weak references with a concurrent mark sweep collector
EP1174791B1 (en) 2000-07-10 2017-09-27 Microsoft Technology Licensing, LLC Unified data type system and method
US6502111B1 (en) 2000-07-31 2002-12-31 Microsoft Corporation Method and system for concurrent garbage collection
US6865585B1 (en) 2000-07-31 2005-03-08 Microsoft Corporation Method and system for multiprocessor garbage collection
US6598141B1 (en) 2001-03-08 2003-07-22 Microsoft Corporation Manipulating interior pointers on a stack during garbage collection
US7203756B2 (en) 2001-04-27 2007-04-10 International Business Machines Corporation Mechanism to cache references to Java RMI remote objects implementing the unreferenced interface
US6980997B1 (en) 2001-06-28 2005-12-27 Microsoft Corporation System and method providing inlined stub
US7254597B2 (en) * 2002-01-11 2007-08-07 Sun Microsystems, Inc. Lock-free implementation of dynamic-sized shared data structure
US9141539B2 (en) 2002-05-24 2015-09-22 Oracle International Corporation System and method for object deletion in persistent memory using bitmap windows
US6973554B2 (en) 2003-04-23 2005-12-06 Microsoft Corporation Systems and methods for multiprocessor scalable write barrier
US7529775B2 (en) 2003-08-20 2009-05-05 Microsoft Corporation Method and system for collecting information about applications on a computer system
US8578380B1 (en) * 2003-12-17 2013-11-05 Vmware, Inc. Program concurrency control using condition variables
US8131955B2 (en) 2004-04-15 2012-03-06 Microsoft Corporation Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles
US7665077B2 (en) 2004-10-18 2010-02-16 Microsoft Corporation System and method for sharing objects between applications in a virtual runtime environment
US7822938B2 (en) 2004-10-20 2010-10-26 Microsoft Corporation System and method for performing garbage collection based on unmanaged memory allocations
US7610579B2 (en) 2004-12-10 2009-10-27 Microsoft Corporation Critical finalizers
US7937709B2 (en) 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US7577657B2 (en) 2005-03-18 2009-08-18 Microsoft Corporation System and method for updating objects in a multi-threaded computing environment
US8713524B2 (en) 2005-04-06 2014-04-29 Microsoft Corporation Memory management configuration
US7389395B1 (en) 2005-06-26 2008-06-17 Sun Microsystems, Inc. Split-reference, two-pass mark-compaction
US7441094B2 (en) 2005-07-05 2008-10-21 Microsoft Corporation Memory management configuration
US8701095B2 (en) 2005-07-25 2014-04-15 Microsoft Corporation Add/remove memory pressure per object
US7926071B2 (en) 2005-10-20 2011-04-12 Microsoft Corporation Load balancing interfaces
US8234378B2 (en) 2005-10-20 2012-07-31 Microsoft Corporation Load balancing in a managed execution environment
US20070100919A1 (en) 2005-11-01 2007-05-03 Electronics And Telecommunications Research Institute Garbage collection unit and method thereof
US20070156967A1 (en) 2005-12-29 2007-07-05 Michael Bond Identifying delinquent object chains in a managed run time environment
US7774389B2 (en) 2007-01-17 2010-08-10 Microsoft Corporation Optimized garbage collection techniques
US7685182B2 (en) 2007-05-08 2010-03-23 Microsoft Corporation Interleaved garbage collections
US7716192B2 (en) 2007-05-08 2010-05-11 Microsoft Corporation Concurrent, lock-free object copying
US9208081B1 (en) 2007-11-30 2015-12-08 Oracle America, Inc. Concurrent object management
US8065491B2 (en) * 2007-12-30 2011-11-22 Intel Corporation Efficient non-transactional write barriers for strong atomicity
US7801872B2 (en) 2008-04-08 2010-09-21 Microsoft Corporation Providing a publishing mechanism for managed objects
US7831640B2 (en) 2008-04-15 2010-11-09 Microsoft Corporation Using an overflow list to process mark overflow
US7987215B2 (en) 2008-04-22 2011-07-26 Microsoft Corporation Efficiently marking objects with large reference sets
US7953778B2 (en) * 2008-05-20 2011-05-31 International Business Machines Corporation Efficient support of consistent cyclic search with read-copy update and parallel updates
US7860906B2 (en) 2008-05-28 2010-12-28 Microsoft Corporation Overflow per segment
US8028008B2 (en) 2008-09-25 2011-09-27 International Business Machines Corporation System and method for optimizing write barrier in garbage collection
US8825719B2 (en) 2008-10-30 2014-09-02 Microsoft Corporation Incremental lock-free stack scanning for garbage collection
US8612493B2 (en) 2008-10-30 2013-12-17 International Business Machines Corporation Allocation cache premarking for snap-shot-at-the-beginning concurrent mark-and-sweep collector
US20100318584A1 (en) 2009-06-13 2010-12-16 Microsoft Corporation Distributed Cache Availability During Garbage Collection
US8924984B2 (en) * 2009-06-26 2014-12-30 Microsoft Corporation Lock-free barrier with dynamic updating of participant count
US8782306B2 (en) 2010-02-03 2014-07-15 Oracle America Low-contention update buffer queuing for large systems
US8850166B2 (en) * 2010-02-18 2014-09-30 International Business Machines Corporation Load pair disjoint facility and instruction therefore
US8527559B2 (en) 2010-04-23 2013-09-03 Clausal Computing Oy Garbage collector with concurrent flipping without read barrier and without verifying copying
US8566368B2 (en) 2010-09-29 2013-10-22 Microsoft Corporation Garbage collection extensibility via managed code
US10754770B2 (en) 2011-10-10 2020-08-25 Microsoft Technology Licensing, Llc Work stealing of partially-marked objects
US20150227414A1 (en) * 2012-08-31 2015-08-13 Pradeep Varma Systems And Methods Of Memory And Access Management
US9489406B1 (en) 2013-03-15 2016-11-08 Google Inc. Linear time processing of weak properties in a garbage collected environment
US9519668B2 (en) 2013-05-06 2016-12-13 International Business Machines Corporation Lock-free creation of hash tables in parallel
US9804962B2 (en) 2015-02-13 2017-10-31 Microsoft Technology Licensing, Llc Garbage collection control in managed code
US10558566B2 (en) 2015-04-16 2020-02-11 Microsoft Technology Licensing, Llc Garbage collection of non-pinned objects within heap
US10929201B2 (en) 2015-10-22 2021-02-23 Wind River Systems, Inc. Method and system for implementing generation locks
US10013347B2 (en) 2015-10-27 2018-07-03 Sybase, Inc. Non-blocking parallel memory mechanisms
US9921959B2 (en) 2016-03-11 2018-03-20 Oracle International Corporation Efficient reference classification and quick memory reuse in a system that supports concurrent garbage collection
US9846645B1 (en) 2016-05-27 2017-12-19 Hewlett Packard Enterprise Development Lp Managing objects stored in memory
US10120655B2 (en) 2016-06-03 2018-11-06 Microsoft Technology Licensing, Llc. Seamless high performance interoperability between different type graphs that share a garbage collector
US10761979B2 (en) 2016-07-01 2020-09-01 Intel Corporation Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value
US10248471B2 (en) * 2016-09-15 2019-04-02 Oracle International Corporation Lockless execution in read-mostly workloads for efficient concurrent process execution on shared resources
US10572181B2 (en) 2017-02-01 2020-02-25 Microsoft Technology Licensing, Llc Multiple stage garbage collector
US10628306B2 (en) 2017-02-01 2020-04-21 Microsoft Technology Licensing, Llc Garbage collector
US10459771B2 (en) 2017-02-22 2019-10-29 Red Hat Israel, Ltd. Lightweight thread synchronization using shared memory state
US10360079B2 (en) * 2017-06-16 2019-07-23 GM Global Technology Operations LLC Architecture and services supporting reconfigurable synchronization in a multiprocessing system
US10558564B2 (en) 2017-09-28 2020-02-11 Hewlett Packard Enterprise Development Lp Pointers in a memory managed system
WO2020005597A1 (en) 2018-06-28 2020-01-02 Microsoft Technology Licensing, Llc Managing global and local execution phases
US11301602B2 (en) * 2018-11-13 2022-04-12 Gauntlet Networks, Inc. Simulation-based testing of blockchain and other distributed ledger systems
US10802965B2 (en) 2019-02-05 2020-10-13 Microsoft Technology Licensing, Llc Reducing synchronization reliance in garbage collection marking
US11422932B2 (en) 2019-12-20 2022-08-23 Microsoft Technology Licensing, Llc Integrated reference and secondary marking

Also Published As

Publication number Publication date
US20210208954A1 (en) 2021-07-08
EP4088187B1 (en) 2024-10-09
US11392427B2 (en) 2022-07-19
BR112022011124A2 (pt) 2022-08-23
CN114930297A (zh) 2022-08-19
IL294304A (en) 2022-08-01
MX2022008352A (es) 2022-08-04
WO2021141673A1 (en) 2021-07-15
KR20220119400A (ko) 2022-08-29
CA3166321A1 (en) 2021-07-15
EP4088187A1 (en) 2022-11-16
AU2020421583A1 (en) 2022-08-25

Similar Documents

Publication Publication Date Title
CN113383318B (zh) 减少垃圾回收标记中的同步依赖
US10824420B2 (en) Caching build graphs
EP4088187B1 (en) Lock-free reading of unitary value sets
US8732674B1 (en) Revertable managed execution image instrumentation
Deligiannis et al. Fast and precise symbolic analysis of concurrency bugs in device drivers (t)
US8595175B2 (en) Fluent API patterns for managing object persistence
JP2023507709A (ja) 統合された参照及び二次のマーキング
Lawall et al. Automating program transformation with Coccinelle
RU2805768C2 (ru) Уменьшение зависимости от синхронизации в пометке сбора мусора
US12099556B2 (en) Working context transfer across development environments
Madieu Linux Device Driver Development: Everything you need to start with device driver development for Linux kernel and embedded Linux
Demsky et al. Integrating file operations into transactional memory
Khan C# 7 and. NET Core 2.0 High Performance: Build highly performant, multi-threaded, and concurrent applications using C# 7 and. NET Core 2.0
Bharadwaj Explicit-State Model Checking of Concurrent x86-64 Assembly
Vennaro iOS Development at Scale
García Ortega SimpleOpenCL: desenvolupament i documentació d'una llibreria que facilita la programació paral· lela en OpenCL

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231011

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20231011