JP2017517792A - マルチクラスメモリシステムにおけるメモリ割り当てのシステム及び方法 - Google Patents

マルチクラスメモリシステムにおけるメモリ割り当てのシステム及び方法 Download PDF

Info

Publication number
JP2017517792A
JP2017517792A JP2016558775A JP2016558775A JP2017517792A JP 2017517792 A JP2017517792 A JP 2017517792A JP 2016558775 A JP2016558775 A JP 2016558775A JP 2016558775 A JP2016558775 A JP 2016558775A JP 2017517792 A JP2017517792 A JP 2017517792A
Authority
JP
Japan
Prior art keywords
memories
data structure
memory
assigning
library
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.)
Granted
Application number
JP2016558775A
Other languages
English (en)
Other versions
JP6205506B2 (ja
Inventor
ロー ガブリエル
ロー ガブリエル
メスワニ マイテシュ
メスワニ マイテシュ
イグナトウスキー マイケル
イグナトウスキー マイケル
ナッター マーク
ナッター マーク
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2017517792A publication Critical patent/JP2017517792A/ja
Application granted granted Critical
Publication of JP6205506B2 publication Critical patent/JP6205506B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0605Improving or facilitating administration, e.g. storage management by facilitating the interaction with a user or administrator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0685Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/205Hybrid memory, e.g. using both volatile and non-volatile memory
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

マルチクラスメモリシステム(101)におけるメモリ割り当てシステム(100)は、統合メモリアドレス空間を共有する複数のメモリ(106,107,108,109)に結合可能なプロセッサ(102)と、ソフトウェア関数のライブラリを記憶するライブラリ(120,620)と、を備える。プロセッサは、データ構造をメモリに割り当てるための、ライブラリへのメモリ割り当て関数呼び出し(126)に応じて、データ構造(128)のタイプを識別する。プロセッサは、ライブラリを用いて、データ構造のタイプに基づいて、データ構造の各部分を、マルチクラスメモリシステムの複数のメモリに割り当てる。【選択図】図1

Description

本開示は、概して、メモリシステムに関し、より具体的には、複数のメモリを用いるメモリシステムに関する。
処理システムは、様々な設計要件を満たすために、マルチタイプ又はレベルのメモリ(例えば、揮発性及び不揮発性のメモリアーキテクチャの組み合わせや、パッケージ内メモリ及び外部メモリの組み合わせ等)を実装し得る。例えば、マルチレベルメモリを用いて、帯域幅、容量及び拡張性の増加という特徴のうち1つ以上を提供するメモリを組み合わせて、これらの特徴を活用してもよい。統合(unified)メモリアドレス空間を有するマルチレベルメモリシステムのメモリ間でデータ構造を割り当てると、システム性能に影響を与えることがある。従来、オペレーティングシステム又は当該オペレーティングシステムのハードウェアは、静的な所定の条件に基づいて、又は、表面上では任意の割り当てに基づいて、マルチレベルメモリシステムのメモリ間でデータ構造をどのように割り当てるのかを決定していた。この結果、マルチレベルメモリシステムの異なるメモリの利用が非効率になったり、効果が無くなったりすることが多い。
本開示は、添付図面を参照することによって、より良く理解されであろうし、本開示の多くの特徴及び長所が当業者に明らかになるであろう。異なる図面における同一の符号は、類似又は同一の項目を示している。
いくつかの実施形態に係る、マルチクラスメモリシステムを用いた処理システムのブロック図である。 いくつかの実施形態に係る、リンクリストデータ構造の例示的なメモリ割り当てを示す図である。 いくつかの実施形態に係る、マップデータ構造の例示的なメモリ割り当てを示す図である。 いくつかの実施形態に係る、二分木データ構造の例示的なメモリ割り当てを示す図である。 いくつかの実施形態に係る、マルチクラスメモリシステムのメモリ間でデータ構造のメモリ割り当てを行う方法を示すフロー図である。 いくつかの実施形態に係るマルチクラスメモリシステムを用いた処理システムのブロック図である。 いくつかの実施形態に係る、マルチクラスメモリシステムのメモリ間でデータ構造のメモリ割り当てを行う方法を示すフロー図である。
図1〜図7は、マルチクラスメモリシステムを用いた処理システムにおいて、ソフトウェアプログラムのデータ構造のメモリ割り当てを行うシステム及び技術を例示する図である。いくつかの実施形態においては、処理システムは、マルチクラスメモリシステムと、処理コア及びメモリコントローラを有するプロセッサと、を備える。マルチクラスメモリシステムは、統合メモリアドレス空間を共有する少なくとも2つの異なるメモリクラス(各クラスは、レベル及びタイプのうち1つ以上を規定する)からなる複数のメモリを備える。プロセッサが、データ構造をメモリに割り当てるために、ライブラリへのメモリ割り当て関数呼び出し(例えば、malloc)を実行したことに応じて、ライブラリは、データ構造のタイプを識別し、オペレーティングシステムは、データ構造のタイプに基づいて、データ構造の一部をマルチクラスメモリシステムの複数のメモリに割り当てる。例えば、いくつかの実施形態においては、オペレーティングシステムは、より頻繁に検索、アクセスされるデータ構造の一部が、アクセス時間の速いメモリに割り当てられ、あまり頻繁に検索、アクセスされないデータ構造の一部が、アクセス時間の遅いメモリに割り当てられるように、データ構造の一部をメモリに割り当てる。いくつかの実施形態においては、関数呼び出しは複数のパラメータを含み、プロセッサが関数呼び出しを実行すると、オペレーティングシステムは、当該パラメータに基づいてデータ構造の一部を割り当てる。別の実施形態においては、関数呼び出しは、マルチクラスメモリシステムのメモリレベルのインジケータを含み、プロセッサが当該インジケータを含む関数呼び出しを実行すると、オペレーティングシステムは、データ構造の識別された一部を、インジケータされたメモリレベルに割り当てる。記載された技術は、処理コアが、データ構造の一部をどのように検索又はアクセスする可能性が高いのかに基づいて、データ構造の一部をより効率的に割り当てることを可能にし、これにより、性能を向上させ、消費電力を低減する。
図1は、いくつかの実施形態に係る、マルチクラスメモリシステム101を用いた処理システム100のブロック図である。処理システム100は、プロセッサ102と、メモリ階層104と、を備えている。メモリ階層104は、2つ以上の異なるクラスに属する複数のメモリを含む。各クラスは、レベル及びタイプのうち一方又は両方を規定する。メモリレベルは、メモリの位置的なアクセス速度に基づいている。例えば、パッケージ内メモリ及びパッケージ外メモリ(すなわち、「オンチップ」メモリ及び「オフチップ」メモリ)間では、一般的に、パッケージ内メモリのアクセス速度がより速い。少なくとも1つの実施形態においては、マルチクラスメモリシステム101は、マルチレベルのメモリシステムである。メモリタイプは、メモリの個々のアーキテクチャに基づいており、各メモリは、様々なメモリタイプの任意のタイプを含んでもよい。例えば、粒度の低い分け方では、揮発性メモリ対不揮発性メモリであってもよいし、ダイナミックランダムアクセスメモリ(DRAM)対スタティックランダムアクセスメモリ(SRAM)対相変化メモリ対メモリスタメモリ等であってもよい。粒度の高い分け方では、同じタイプの一般的なメモリアーキテクチャ内の異なるアーキテクチャ(例えば、DDR3 SDRAM(double data rate type three synchronous dynamic random access memory)、GDDR5 SDRAM(graphics double data rate version five synchronous dynamic random access memory)、及び、LPDDR SDRAM(low power double data rate synchronous dynamic random access memory)等)であってもよい。
統合メモリアドレス空間116内のメモリ106,107,108,109の各々は、そのレベル若しくはタイプ又はこれら両方に基づいて、各メモリクラス(クラス「I」,「II」と示す)に分類される。従って、いくつかの実施形態においては、メモリ106,107,108,109は、同じクラス内のメモリが、同じレベル、同じタイプ、及び、例えばアクセスタイム、帯域幅、データ転送速度等の他の操作特性のうち1つ以上を共有するように、分類されてもよい。例示すると、メモリ106,107は、両方とも同じレベル(例えば、パッケージ内)に存在するとしてクラスIに分類されてもよく、メモリ108,109は、両方とも同じレベル(例えば、パッケージ外)に存在するとしてクラスIIに分類されてもよい。また、メモリ106,107は、両方とも例えばDRAMアーキテクチャを実装しているとしてクラスIに分類されてもよく、メモリ108,109は、両方とも例えばSRAMアーキテクチャを実装しているとしてクラスIIに分類されてもよい。
メモリ階層104は、2つのパッケージ内メモリ106,107と、2つのパッケージ外メモリ108,109として図1の実施形態に示されているが、他の実施形態では、少なくとも2つのクラスに亘る任意の数のメモリを用いてもよい。さらに、いくつかの実施形態においては、メモリ階層104は、全てのパッケージ外メモリと全てのパッケージ内メモリとを含む、パッケージ内メモリ及びパッケージ外メモリの任意の組み合わせを含んでもよい。メモリ階層104のいくつかの実施形態では、全体としてのフットプリントを小さくしたまま容量を増やす又は複数のメモリを活用するために、ダイスタックメモリを実装してもよい。ダイスタックメモリは、シリコン貫通電極(TSV)又は他の垂直相互接続技術を用いて垂直に積層するように実装されてもよいし、メモリダイがインターポーザを介して接続されるように、プロセッサ若しくは互いに対して水平方向に「スタック」される水平配置であってもよい。図1の実施形態において、パッケージ内メモリ106,107は、(クラス「I」で表される)同じクラスであるものとして示され、パッケージ外メモリ108,109は、(クラス「II」で表される)同じクラスであるものとして示されている。さらに、他の実施形態のマルチクラスメモリシステム101は、異なるレベル若しくは異なるタイプ又はこれらの組み合わせのメモリを含んでもよい。例えば、少なくとも1つの実施形態においては、マルチクラスメモリシステム101は、レベルが全て同じであるがタイプが異なるメモリを含む。
プロセッサ102は、プロセッサコア110,111と、メモリコントローラ112と、を備えている。図示した実施形態では、プロセッサ102に実装されるメモリコントローラ112を示しているが、他の実施形態では、メモリコントローラ112は、他の場所(例えば、メモリ108,109のうち1つ以上を実装するスタックメモリ装置のメモリインタフェース)において実装されてもよい。さらに、いくつかの実施形態では、プロセッサ102は、複数のメモリコントローラ112を含む。メモリコントローラ112は、アドレス空間の割り当てに基づくメモリアドレス要求に応じて、メモリ106,107,108,109からデータを読み出す。従って、図示した実施形態では、メモリコントローラ112及び処理システム100は、メモリ106,107,108,109を、単一のフラットな統合メモリアドレス空間116として扱う。結果として、異なるクラス(I,II)のメモリは、同じメインメモリ又はシステムメモリ内に存在するという点において、論理的に、従来のメモリ階層の同じレベルの部分となる。従って、異なるクラス(I,II)の全てのメモリは、同一の、統合された、フラットな物理メモリアドレス空間を介してアクセス可能である。
従来、オペレーティングシステム又は当該オペレーティングシステムのハードウェアは、静的な所定の条件に基づいて、又は、表面上では任意の割り当てに基づいて、マルチクラスメモリシステムのメモリ間でデータ構造をどのように割り当てるのかを決定していた。かかる従来のアプローチでは、データがどのようにアクセスされるかという、より高いレベル(例えば、ソフトウェア、データ構造、アルゴリズム等)のセマンティック又はドメイン固有の知識を活用できないので、データ構造において頻繁にアクセスされる部分が性能の低いメモリによく割り当てられることによって、効率を低下させ、全体としての性能を低下させる。
一方、図示した実施形態においては、ライブラリストアは、ライブラリ120を含む。ライブラリ120は、ライブラリ120のバックエンド実装がメモリ割り当ての決定を動的に処理するように、データ構造、アルゴリズム及び他のサービスを、アプリケーションプログラミングインタフェース(API)122を介してプログラマ又は他のユーザに提供する。これにより、データがどのようにアクセスされるかという高レベルのセマンティック又はドメイン固有の知識に基づいて、割り当てを決定することができる。例えば、いくつかの実施形態では、ライブラリ120は、マルチレベルのメモリ認識ソフトウェアインタフェースを用いて、データ構造を、マルチクラスメモリシステム101のメモリ106,107,108,109に選択的に割り当ててもよい。また、ライブラリ120は、異なるメモリレベルからの自身のメモリページのプールを維持してもよく、データ構造が適切であると判断すると、これらのページへのデータ構造の割り当てを明示的に処理してもよい。ライブラリ120は、例えば、C++標準テンプレートライブラリ(STL)、Java(登録商標)標準ライブラリ、C♯及び.NET Framework、カスタムライブラリ、ドメイン固有ライブラリ等のように、メモリ割り当てを透過的に管理する任意のライブラリであってもよい。ライブラリ120のメモリ割り当て決定に基づいて、処理システム100のオペレーティングシステム121は、統合フラットアドレス空間をメモリ106,107,108,109に割り当てる。
図示した実施形態において、プロセッサコア111は、ライブラリ120へのメモリ割り当て関数呼び出し126を含むソフトウェアプログラム124を実行して、データ構造128をメモリに割り当てる。ソフトウェアプログラム124は、API122を介してライブラリ120にアクセスする。少なくとも1つの実施形態においては、ライブラリ120は、データ構造タイプテーブル130を参照して、割り当てられるデータ構造128のタイプに基づいて、データ構造128を、どのようにマルチクラスメモリシステム101のメモリ106,107,108,109に割り当てるのかを決定する。データ構造タイプテーブル130は、静的な割り当てルールを含んでもよく、メモリアクセス履歴又は他の情報等に基づいて更新されるヒューリスティックを維持してもよい。データ構造128は、様々なデータ構造のうち任意のデータ構造(例えば、リンクリスト、マップ構造、二分木、グラフ構造、アレイ、タプル(tuple)等)であってもよい。ライブラリ120は、プロセッサ102の効率的な性能を維持するために、データ構造128のタイプに基づいて、オペレーティングシステム121が、データ構造128の異なる部分をマルチクラスメモリシステム101の異なるメモリに割り当てることを決定してもよい。
例えば、図示した実施形態においては、ライブラリ120は、オペレーティングシステム121が、データ構造128の第1の部分132をメモリ106に割り当て、データ構造128の第2の部分134をメモリ109に割り当てることを示している。ライブラリ120は、データ構造のタイプの動的アクセスパターンに基づく決定(例えば、より頻繁に用いられる部分を、より速いアクセスタイムを有するメモリに割り当てるべきである)、各メモリ106,107,108,109又はクラスの利用可能なメモリの量に基づく決定(例えば、利用可能なメモリ空間が存在する限り、データ構造128のうち可能な限り多くの部分を、アクセスタイムの速いメモリに割り当てるべきである)、又は、これらの組み合わせに基づく決定等を行ってもよい。少なくとも1つの実施形態においては、各部分132,134は、データ構造128のメタデータ及びデータを表し、メタデータ部分132は、複数のメモリ106,107,108,109のうち第1のセットのメモリ106に割り当てられ、データ部分134は、複数のメモリ106,107,108,109のうち第2のセットのメモリ109に割り当てられる。図示した例においては、第1の部分132(例えば、データ構造128のメタデータ等)は、メモリ109よりも速いアクセスを提供するクラスIのメモリ106に割り当てられ、第2の部分134(例えば、データ構造128のデータ等)は、メモリ109に割り当てられる。かかる割り当ては、メタデータがデータ構造128のデータより小さいため、メタデータがデータより頻繁にアクセスされるため、又は、これらの組み合わせ等の理由によって、プロセッサ102の性能を向上し得る。
図示した実施形態では、ライブラリ120は、データ構造128を2つの部分132,134に分け、各々の部分が2つのメモリ106,109に割り当てられる場合を示しているが、他の実施形態では、データ構造128をより多くの部分に分けてもよいし、データ構造をより多くのメモリに割り当ててもよいし、データ構造128を複数の部分に分けずに割り当ててもよい。さらに、いくつかの実施形態においては、ライブラリ120は、データ構造128の各部分132,134をオペレーティングシステム121の特定のメモリクラス(I、II)に割り当てて、当該各部分のサブセクションを、均等の、任意の、又は、1つ以上のヒューリスティックスに基づいて、特定のクラスのメモリ間に分散させる(例えば、部分132をクラスIに割り当てる場合には、オペレーティングシステム121は、当該部分132のサブセクションを、クラスIのメモリ106,107に分散させる)。さらに、部分及びサブセクションは、データ構造128の任意の部分又はサブセクションを表してもよく、連続している必要はない。
いくつかの実施形態においては、ライブラリ120は、データ構造128をどのようにマルチクラスメモリシステム101のメモリ106,107,108,109に割り当てるかということに関してプログラマが入力又は指示することを可能にするために、様々なインタフェース又はフック(hook)のうち任意のものを提供してもよい。この任意のものはオプションであってもよい。例えば、少なくとも1つの実施形態において、ライブラリ120は、プログラマ又は他のユーザがパラメータ136をメモリ割り当て関数呼び出し126に提供するのを可能にし、オペレーティングシステム121は、パラメータ136(又は複数のパラメータ)に基づいて、データ構造128の部分132,134を、マルチクラスメモリシステム101の複数のメモリ106,109に割り当てる。パラメータ136は、例えば、データ構造128のタイプ、データ構造128をどのように部分132,134に分けるのか、メモリ106,107,108,109のうち幾つのメモリを使用するのか、メモリ106,107,108,109のうち何れのメモリを使用するのか、何れのクラス(I,II)を使用するのか、1つ以上の制限(例えば、最初のn行に関するデータからメタデータのみを分けて割り当てる)等を示してもよい。
少なくとも1つの実施形態においては、ライブラリ120は、ドメイン固有のライブラリを含む。ドメイン固有のライブラリの例としては、基本線形代数サブプログラム(BLAS:basic linear algebra subprograms)、ATLAS(automatically tuned linear algebra software)、PETSc(portable extensible toolkit for scientific computation)及びアプリケーションマークアップ言語(APPML)等のように、基本線形代数専用のルーチンが挙げられる。例えば、ATLASは、最適化パラメータ空間(ブロック化因数、アンロール)及び実装アルゴリズムを検索して、高度に最適化されたハードウェア固有の線形代数ルーチンを生成する自己最適化ライブラリである。かかるライブラリの例は、行列積のブロックの使用である。一実施態様は、メモリ階層104のレベル毎に異なるブロック機構を想定し、データを下位レベルから最内側ループに対応する上位レベルに移動させるように、ライブラリ120を構成することを含む。かかるルーチンは、DRAMへのアクセスは固定コストであるが、複数のクラスのメモリを含むシステムにおいては、アルゴリズムが、より速いメモリに関してリファクタリングされる必要があると想定している。疎行列ベクトル積(SpMV:sparse matrix vector multiplies)は、多くの高性能コンピューティング(HPC)アプリケーションの性能において重要なアルゴリズムの他の例である。SpMVは、一般的に、CSR(compressed row format)を用いて表される。CSRにおいては、非ゼロ行要素が値アレイに記憶され、列インデックスが列アレイに記憶され、各行の始まりに関する列アレイへのインデックスが行インデックス列に記憶される。一実施形態においては、ライブラリ120は、インデックスアレイの記憶を速い方のメモリ(例えば、クラスI)に割り当て、大きい値アレイを遅い方のメモリ(例えば、クラスII)に割り当てることによって、速い検索を可能にする。これらのライブラリは、実行中、マルチクラスメモリシステム101の静的最適化に加えて、プロファイルに基づく動的最適化を挿入して、異なるメモリレベル間のデータ構造の構成要素を移動させることができる。
図2は、いくつかの実施形態に係る、図1の処理システム100によるリンクリストデータ構造200のメモリ割り当ての例を示す図である。リンクリストデータ構造200は、リンクされたノード204〜215を含み、ノード204はノード205へのリンク又は他の参照を含み、ノード205はノード206へのリンクを含み、ノート206はノード207へのリンクを含む、というように、最後のノード215まで同様にリンクされる。1つ以上のノードからデータを読み出すためのメモリアクセスは、リンクリストデータ構造200の第1のノード204から所望のノードまでの各ノードの走査(traversing)が必要となる。例えば、ノード207のメモリアクセスは、プロセッサ102が、第1のノード204から開始して、ノード204からノード205へのリンクを通り、ノード205からノード206へのリンクを通り、最後に、ノード206からノード207へのリンクを通ることを必要とする。従来のメモリ割り当てでは、様々なノード204〜215を、マルチクラスメモリシステム101のメモリ106,107,108,109に任意に割り当てて、ノード204,205,206,207は、別々のメモリ106,107,108,109に記憶されてもよく、ノード207のメモリアクセスは、プロセッサ102が、リンクリストのノード204,205,206,207を走査して、個別のメモリ106,107,108,109の各々にアクセスする必要がある。これらの従来のアプローチは、あるノードに到達するために、複数のメモリに複数回アクセスする必要があり得るので非効率的であり、頻繁にアクセスされるデータが、アクセスタイムの遅いメモリに記憶される場合がある。一方、図示した例においては、オペレーティングシステム121は、リンクリストデータ構造200のうちアクセス順の早いノードを有するセグメントが、アクセスタイムの速いメモリに割り当てられ、リンクリストデータ構造200のアクセス順の遅いノードを有するセグメントが、アクセスタイムの遅いメモリに割り当てられるように、ノード204〜215のアクセス順に基づいてリンクリストデータ構造200の一部を割り当てる。
ライブラリ120は、データ構造128をメモリに割り当てるためのAPI122を介した、ライブラリ120へのメモリ割り当て関数呼び出し126に応じて、データ構造128をリンクリストデータ構造200として識別する。ライブラリ120は、タイプテーブル130、プログラム124によって提供された1つ以上のパラメータ136、又は、データ構造128自体に基づいて、リンクリストデータ構造200がどのように各部分に分割され、マルチクラスメモリシステム101間に割り当てられるのかを決定する。図示した実施形態においては、2つの部分が示されており、第1の部分は、リンクリストデータ構造200の最初のセグメント250を表しており、第2の部分は、リンクリストデータ構造200最後のセグメント252を表している。最初のセグメント250のノード204〜208は、最後のセグメント252のノード209〜215と少なくとも同じくらい頻繁に(おそらくは、より頻繁に)アクセスされるので、オペレーティングシステム121は、最初のセグメント250を、比較的速いアクセスタイムを有するメモリ106,107を含むメモリクラスIに割り当て、最後のセグメント252を、比較的遅いアクセスタイムを有するメモリ108,109を含むメモリクラスIIに割り当てる。結果として、ノード207のメモリアクセスは、クラスIの1つ以上のメモリ106,107にのみアクセスする必要があり、ノード213のメモリアクセスは、ノード204〜208に対するクラスIの1つ以上のメモリ106,107と、ノード209〜213に対するクラスIIの1つ以上のメモリ108,109と、にアクセスする必要がある。ノード204〜208は、比較的速いアクセスタイムを有するメモリ106,107からアクセスされるので、プロセッサ102は、リストの最初のセグメント250を比較的迅速に走査することが可能になり、リンクリストデータ構造200のより効率的なメモリアクセスを可能にし得る。 このリンクリストメモリ割り当て技術は、例えば、単一にリンクされたリスト、二重にリンクされたリスト等のように、任意のタイプのリンクリストに適用されてもよい。リンクリストデータ構造200は、所定のメモリ内に連続して割り当てられてもよいし、割り当てられなくてもよい。
図示した例では、リンクリストデータ構造200が、2つの異なるメモリクラス(I,II)に割り当てられた最初のセグメント250及び最後のセグメント252を表す2つの部分に分けられている場合を示しているが、ライブラリ120は、リンクリストデータ構造200の部分の数を任意に決定してもよく、当該部分を、任意の数のメモリクラス又は個々のメモリに割り当ててもよい。さらに、いくつかの実施形態においては、ライブラリ120は、プログラム124によって提供された1つ以上のパラメータ136に基づいて、割り当てを決定してもよい。例えば、パラメータ136は、リンクリストデータ構造200をどのように各部分に分けるか、部分を幾つ生成するか、何れのメモリクラス(I,II)を使用するか、メモリ106,107,108,109のうち何れのメモリを使用するか、リンクリストデータ構造200のどの部分を何れのメモリ106,107,108又は何れのクラス(I,II)に割り当てるか、リンクリストデータ構造200の最初のノード204等を示してもよい。
図3は、いくつかの実施形態に係る、マップデータ構造300に関する図1の処理システム100によるメモリ割り当ての例を示す図である。マップデータ構造300は、複数の値312〜321に結合された複数のキー302〜311を含み、メモリアクセスは、例えば、対応する値315を読み出すためにキー305のルックアップ操作が必要になる。従来のメモリ割り当てでは、様々なキー302〜311及び値312〜321を、マルチクラスメモリシステム101のメモリ106,107,108,109に任意に割り当てていた。これらの従来のアプローチでは、(例えば、線形連鎖又は他のハッシュ衝突処理技術のために)ある値に到達するために複数のメモリに複数回アクセスする必要があることから非効率であり、頻繁にアクセスされるデータが、アクセスタイムの遅いメモリに記憶される場合がある。一方に、図示した例においては、オペレーティングシステム121は、マップデータ構造300のうちキー302〜311が、アクセスタイムの速いメモリに割り当てられ、マップデータ構造300のうち対応する値312〜321が、アクセスタイムの遅いメモリに割り当てられるように、マップデータ構造300の各部分を割り当てる。
ライブラリ120は、データ構造128をメモリに割り当てるためのAPI122を介した、ライブラリ120へのメモリ割り当て関数呼び出し126に応じて、データ構造128を、マップデータ構造300として識別する。ライブラリ120は、タイプテーブル130、プログラム124によって提供された1つ以上のパラメータ136、又は、データ構造128自体に基づいて、マップデータ構造300がどのように各部分に分割され、マルチクラスメモリシステム101間に割り当てられるのかを決定する。図示した実施形態においては、2つの部分が示されており、第1の部分は、マップデータ構造300のキー部分350を表しており、第2の部分は、マップデータ構造300の値部分352を表している。オペレーティングシステム121は、キー部分350を、比較的速いアクセスタイムを有するメモリ106,107を含むメモリクラスIに割り当て、値部分352を、比較的遅いアクセスタイムを有するメモリ108,109を含むメモリクラスIIに割り当てる。結果として、メモリコントローラ112は、キーのルックアップ操作を迅速に進めることができ、対応する値を、アクセスタイムの遅いメモリから読み出し得る。処理システム100は、複数のルックアップを含む状況において、かかるメモリ割り当ての効率性をさらに実感するであろう。さらに、マップデータ構造300が、比較的大きいサイズの1つ以上の値312〜321を含む場合には、アクセスタイムが遅くなるが、容量の大きいメモリへの割り当てが有益となり得る。このマップデータ構造メモリ割り当て技術は、任意のタイプのマップ又は他の関連するアレイデータに適用されてもよい。マップデータ構造300のキー302〜311及び値312〜321は、所定のメモリ内で連続して割り当てられてもよいし、割り当てられなくてもよい。
図示した例では、マップデータ構造300が、2つの異なるメモリクラス(I,II)に割り当てられたキー部分350及び値部分352を表す2つの部分に分けられている場合を示しているが、ライブラリ120は、マップデータ構造300の部分の数を任意に決定してもよく、当該部分を、任意の数のメモリクラス又は個々のメモリに割り当ててもよい。さらに、ある実施形態においては、ライブラリ120は、プログラム124によって提供された1つ以上のパラメータ136に基づいて、割り当てを決定してもよい。例えば、パラメータ136は、マップデータ構造300をどのように各部分に分けるか、部分を幾つ生成するか、何れのメモリクラス(I,II)を使用するか、メモリ106,107,108,109のうち何れのメモリを使用するか、マップデータ構造300のどの部分を何れのメモリ106,107,108,109又は何れのクラス(I,II)に割り当てるか等を示してもよい。
図4は、いくつかの実施形態に係る、二分木データ構造400に関する、図1の処理システム100によるメモリ割り当ての例を示す図である。二分木データ構造400は複数のノードを含み、各ノードは、ノードメタデータ402〜412(例えば、ノードID、キー、ポインタ、又は、他のノードへのリンクに関する情報)と、ノードデータ422〜432と、を記憶している。例えばノードデータ426等のノードデータを読み出すためのメモリアクセスでは、通常、様々な走査スキームのうち何れかのスキームに従って、二分木データ構造400の複数のノードを走査することが必要である。例えば、間順走査スキーム(in-order traversal scheme)の場合には、ノードデータ426を読み出すためのメモリアクセスは、プロセッサ102が、二分木400を、最初にノードメタデータ409、次にノードメタデータ405、ノードメタデータ403、最後にノードメタデータ406と走査して、ノードデータ426を読み出す必要がある。レベル順走査スキーム(level-order traversal scheme)の場合、ノードデータ426を読み出すためのメモリアクセスは、プロセッサ102が、二分木400を、最初にルートノードメタデータ402、次にノードメタデータ403、ノードメタデータ404、ノードメタデータ405、最後にノードメタデータ406と走査して、ノードデータ426を読み出す必要がある。
従来のメモリ割り当てでは、ノードメタデータ402〜412及びノードデータ422〜432を、マルチクラスメモリシステム101のメモリ106,107,108,109に任意に割り当てていたので、走査スキームに従って連続的に走査されるノードが別々のメモリに割り当てられ、二分木データ構造400の走査において、別々のメモリ106,107,108,109の各々にアクセスする必要があった。これらの従来のアプローチでは、要求されたノードに到達するために複数のメモリに複数回アクセスする必要があることから非効率であり、また、二分木データ構造400のうち頻繁にアクセスされる部分が、アクセスタイムの遅いメモリに記憶される場合がある。一方、図示した例においては、オペレーティングシステム121は、二分木データ構造400のうちノードメタデータ402〜412が、アクセスタイムの速いメモリに割り当てられ、二分木データ構造400のうち対応するノードデータ422〜432が、アクセスタイムの遅いメモリに割り当てられるように、二分木データ構造400の各部分を割り当てる。
ライブラリ120は、データ構造128をメモリに割り当てるためのAPI122を介した、ライブラリ120へのメモリ割り当て関数呼び出し126に応じて、データ構造128を、二分木データ構造400として識別する。ライブラリ120は、タイプテーブル130、プログラム124によって提供された1つ以上のパラメータ136、又は、データ構造128自体に基づいて、二分木データ構造400がどのように各部分に分割され、マルチクラスメモリシステム101間に割り当てられるのかを決定する。図示した実施形態においては、2つの部分が示されており、第1の部分は、二分木データ構造400のノードメタデータ部分450を表しており、第2の部分は、二分木データ構造400のノードデータ部分452を表している。説明の容易さのために、ノードメタデータ部分450及びノードデータ部分452は、二分木データ構造400のうち選択されたノードのみを示しているが、ノードメタデータ部分450は、ノードメタデータ402〜412の全てを表しており、ノードデータ部分452は、ノードデータ422〜432の全てを表している。
オペレーティングシステム121は、ノードメタデータ部分450を、比較的アクセスタイムの速いメモリ106,107を含むメモリクラスIに割り当て、ノードデータ部分452を、比較的アクセスタイムの遅いメモリ108,109を含むメモリクラスIIに割り当てる。結果として、二分木データ構造400の走査は、ノードメタデータ402〜412が、アクセスタイムの速い1つ以上のメモリ106,107からアクセスされ、次にメモリコントローラ112が、要求したノードデータを、アクセスタイムの遅いメモリから読み出すことから、迅速に進み得る。さらに、アクセスタイムが遅いが容量の多いメモリへの割り当ては、比較的大きいサイズのノードデータ422〜432を含む二分木データ構造400のノードに有益となり得る。
別の実施形態においては、オペレーティングシステム121は、ノードの走査順に基づいて二分木データ構造400の各部分を割り当てるので、二分木データ構造400の走査スキームによる走査順の早いノードを有するセグメントが、アクセスタイムの速いメモリに割り当てられ、二分木データ構造400の走査スキームによる走査順の遅いノードを有するセグメントが、アクセスタイムの遅いメモリに割り当てられる。例えば、レベル順走査スキームのコンテキストにおいて、上位レベル(すなわち、ルートノードにより近い)のノードメタデータは、下位レベルの(すなわち、分岐により近い)ノードメタデータと少なくとも同じくらい頻繁に(おそらくは、より頻繁に)アクセスされるので、オペレーティングシステム121は、(ノードメタデータ402〜408を含む)第1の3つのレベルを、アクセスタイムの比較的速いメモリ106,107を含むメモリクラスIに割り当て、(メタデータ409〜412を含む)分岐レベルを、アクセスタイムの比較的遅いメモリ108,109を含むメモリクラスIIに割り当ててもよい。結果として、ノードデータ427のメモリアクセスは、クラスIの1つ以上のメモリ106,107にのみアクセスする必要があり、ノードデータ430のメモリアクセスは、ノードメタデータ402〜408についてはクラスIの1つ以上のメモリ106,107と、ノードメタデータ409,410についてはクラスIIの1つ以上のメモリ108,109と、にアクセスする必要がある。ノードメタデータ402〜408は、比較的速いアクセスタイムを有するメモリ106,107からアクセスされるので、プロセッサ102は、第1の3つのレベルを比較的迅速に走査することができ、二分木データ構造400の効率のより良いメモリアクセスを可能にする。
これらの二分木データ構造メモリ割り当て技術は、例えば三分木構造、B+木構造、有向非巡回グラフ(DAG)等の任意のタイプのグラフデータ構造に適用されてもよい。さらに、ノードメタデータ402〜412及びノードデータ422〜432は、所定のメモリ内に連続して割り当てられてもよいし、割り当てられなくてもよい。図示した例では、二分木データ構造400が、ノードメタデータ部分450及びノードデータ部分452を表す2つの部分に分かれて、2つの異なるメモリクラス(I,II)に割り当てられているが、ライブラリ120は、二分木データ構造400の部分の数を任意に決定してもよく、各部分を任意の数のメモリクラス又は個々のメモリに割り当ててもよい。さらに、いくつかの実施形態においては、ライブラリ120は、プログラム124によって提供された1つ以上のパラメータ136に基づいて、割り当てを決定してもよい。例えば、パラメータ136は、二分木データ構造400をどのように各部分に分けるか、部分を幾つ生成するか、何れのメモリクラス(I,II)を使うか、メモリ106,107,108,109の何れのメモリを使うか、二分木データ構造400のどの部分を何れのメモリ106,107,108,109又は何れのクラス(I,II)に割り当てるか、を示してもよいし、走査スキーム等を示してもよい。
図5は、いくつかの実施形態に係る、マルチクラスメモリシステムのメモリ間でデータ構造をメモリに割り当てる例示的な方法500を示すフロー図である。参照の容易さのために、方法500は、図1のマルチクラスメモリシステム101の例示的なコンテキストにおいて以下に記載する。方法500は、ブロック502で始まり、処理システム100が、メモリ割り当て関数呼び出し126を受信する。この場合、プロセッサコア111は、データ構造128をメモリに割り当てるための、ライブラリ120へのメモリ割り当て関数呼び出し126を含むソフトウェアプログラム124を実行する。
ブロック504では、処理システム100は、API122を介してライブラリ120にアクセスする。ライブラリ120は、データ構造、アルゴリズム及び他のサービスを、API122を介してプログラマ又は他のユーザに提供し、ライブラリ120のバックエンド実装によって、メモリ割り当て決定を動的に処理する。これにより、データがどのようにアクセスされるのかという高レベルのセマンティック又はドメイン固有の知識に基づく割り当て決定が可能になる。例えば、いくつかの実施形態においては、ライブラリ120は、マルチレベルメモリ認識ソフトウェアインタフェースを用いて、データ構造を、マルチクラスメモリシステム101のメモリ106,107,108,109に選択的に割り当ててもよいし、異なるメモリレベルからのメモリページの自身のプールを維持してもよく、データ構造が適切であると判断すると、これらのページへのデータ構造の割り当てを明示的に処理してもよい。ライブラリ120は、メモリ割り当てを透過的に管理する任意のライブラリ(例えば、C++標準テンプレートライブラリ(STL)、Java(登録商標)標準ライブラリ、C♯及び.NET Framework、カスタムライブラリ、ドメイン固有のライブラリ等)であってもよい。
ブロック506では、ライブラリ120は、例えば、メモリ割り当て関数呼び出しと共に含まれる1つ以上のパラメータ136、ヒューリスティックス等に基づいて、データ構造128のタイプを識別する。少なくとも1つの実施形態においては、ライブラリ120は、データ構造タイプテーブル130を参照して、データ構造128のマルチクラスメモリシステム101のメモリ106,107,108,109への割り当てに関する情報を決定する。例えば、ライブラリ120は、ブロック508に従って、タイプテーブル130を用いて、データ構造128の各部分を識別してもよい。ライブラリ120は、データ構造タイプに基づいて、データ構造128の各部分132,134を識別する。いくつかの実施形態においては、ライブラリ120は、プログラム124によって提供された1つ以上の複数のパラメータ136に基づいて、データ構造128の各部分132,134を識別する。各部分は、アクセス頻度、データサイズ等に基づいて決定されてもよい。ライブラリ120は、各部分132,134に基づいて、データ構造128をどのように割り当てるのかを、オペレーティングシステム121に示す。
ブロック510では、オペレーティングシステム121は、データ構造の各部分132,134を、マルチクラスメモリシステム101の複数のメモリ106,109に割り当てる。割り当ては、データ構造のタイプの動的アクセスパターンに基づく決定(例えば、より頻繁に使用する部分を、より速いアクセスタイムを有するメモリに割り当てるべきである)、各メモリ106,107,108,109又はクラスの利用可能なメモリの量に基づく決定(例えば、利用可能なメモリ空間がある限り、データ構造128のうち可能な限り多くの部分を、より速いアクセスタイムのメモリに割り当てるべきである)、又は、これらの組み合わせ等に基づく決定等を行ってもよい。少なくとも1つの実施形態においては、各部分132,134は、データ構造128のメタデータ及びデータを表し、メタデータ部分132は、複数のメモリ106,107,108,109のうち第1のセットのメモリ106に割り当てられ、データ部分134は、複数のメモリ106,107,108,109のうち第2のセットのメモリ109に割り当てられる。かかる割り当ては、メタデータがデータ構造128のデータより小さいため、メタデータがデータより頻繁にアクセスされるため、又は、これらの組み合わせ等の理由によってプロセッサ102の性能を向上させるために行われてもよい。
図6は、いくつかの実施形態に係る、データ構造128を、マルチクラスメモリシステム101のメモリ106,107,108,109に割り当てるためのメモリ割り当てを行う図1の処理システム100のブロック図である。図示した実施形態においては、ライブラリ620は、ソフトウェア624に対してインタフェースを提供し、メモリ位置情報やプリファレンス等を、基本システムソフトウェア(例えば、オペレーティングソフトウェア(OS)、ハイパーバイザ等)に通信する。すなわち、ライブラリは、API622を介して、データ構造、アルゴリズム及び他のサービスを提供し、プログラマ又は他のユーザは、関数呼び出し602,604を用いて、オペレーティングシステム621が、データ構造128を、マルチクラスメモリシステム101のメモリ106,107,108,109にどのように割り当てるべきかを示してもよい。例えば、少なくとも1つの実施形態においては、API622は、各メモリ106,107,108,109の関数呼び出し602、各メモリクラス(I,II)、各メモリレベル、又は、各メモリタイプを含む。関数呼び出し602は、メモリ割り当てをメモリ106に示すメモリインジケータ(「I―1」として示す)を含む。関数呼び出し602は、何れのデータ構造又は他のメモリオブジェクトを当該メモリ106に割り当てるか、データサイズ基準、どのメモリ(関数呼び出しメモリインジケータが特定のメモリではなく、メモリクラス、レベル又はタイプを示す場合)か等を示すパラメータをさらに含んでもよい。
ある実施形態においては、API622は、一般的なメモリ割り当て関数呼び出し604を含み、当該呼び出し604は、割り当てられるデータ構造128(関数呼び出し604では「DS」として示される)と、当該データ構造128を何れのメモリ106に割り当てるのかを示すメモリインジケータ(「I―1」)と、を含むパラメータを受け入れる。いくつかの実施形態においては、メモリインジケータ(「I―1」)は、メモリクラス(I,II)、複数のメモリ、複数のメモリクラス等を示してもよい。さらに、異なる実施形態では、例えば、データ構造タイプ、データ構造部分、割り当てサイズ制限等の任意の数のパラメータを許容又は必要としてもよい。図示したように、プロセッサコア111は、API622を介して、ライブラリ620へのメモリ割り当て関数呼び出し602,604,606の何れかを含むソフトウェアプログラム624を実行する場合、ライブラリ620は、オペレーティングシステム621が、データ構造128を、メモリインジケータ(「I―1」)によって識別されたメモリ106に割り当てることを示す。図示した実施形態では、メモリ割り当て関数呼び出し602,604に関して標準Cライブラリ「malloc」を使用しているが、これらの技術は、他のプログラミング言語及びそれらの各メモリ割り当てインタフェースにも容易に適用され得る。いくつかの実施形態においては、ディレクティブ606、又は、他の注釈のようなシンタックスを用いて、メモリインジケータを介して、特定のメモリ又はメモリクラスをコンパイラに直接指定することによって、メモリ割り当てを指定する。例えば、いくつかの実施形態においては、ディレクティブ606がコンパイラによって処理され、情報は、ライブラリ620又はオペレーティングシステム621に渡される。
異なる実施形態は、割り当ての処理に対して異なる規定を用いてもよい。例えば、いくつかの実施形態においては、関数呼び出し602,604又はディレクティブ606のメモリインジケータによって指定されたメモリ割り当てが厳しい要件であって、示されたメモリ106が、メモリ割り当て要求を満たすメモリ空間を十分に持たない場合には、割り当てが失敗する(例えば、関数呼び出し602,604によって、「I―1」メモリインジケータと共に「NULL」ポインタが返されてもよい)。他の実施形態においては、関数呼び出し602,604又はディレクティブ606によって指定されたメモリ割り当ては、むしろ提案として扱われ、示されたメモリ106が、メモリ割り当て要求を満たすのに十分なメモリ空間を持たない場合には、オペレーティングシステム621は、データ構造128を、例えば、他のヒューリスティックスに従って割り当てたり、任意に割り当てる等のように、指定されたもの以外の方法で割り当てる。少なくとも1つの実施形態においては、関数呼び出し又はディレクティブによって指定されたメモリ割り当てに従わない場合には、処理システム100は、実際の割り当てに関する追加の情報をプログラマ又は他のユーザに返信する。
ライブラリ620のいくつかの実施形態では、既存の割り当てを新しいレベルのメモリに再割り当てすること(オプションで、同時に割り当てのサイズを変更すること)をOSに命令(提案)する「realloc」又は「remap」関数呼び出しを提供する。変形例として、既存のメモリ割り当てのサブセット又は領域への再マッピングを可能にするインタフェースを含んでもよい。さらに、ライブラリ620のいくつかの実施形態では、追加のインタフェース関数を提供して、割り当てが何処から来たのかを区別するのをサポートする。例えば、一実施形態においては、関数呼び出し「typewhichMemory(ptr)」は、「ptr」がメモリ106の物理メモリ位置と関連付けられている場合に、「I―l」を返す。いくつかの実施形態においては、これらのメモリ割り当て技術は、不均等メモリアクセス(NUMA)ベースのメモリ割り当てスキームと組み合わせて用いられる。
図7は、ある実施形態に係る、マルチクラスメモリシステムのメモリ間でデータ構造をメモリに割り当てる例示的な方法700を示すフロー図である。参照の容易さのために、方法700は、図6のマルチクラスメモリシステム101の例示的なコンテキストにおいて以下に記載する。方法700は、ブロック702で開始し、これにより、処理システム100は、プロセッサコア111が、データ構造128をメモリに割り当てるために、ライブラリ620へのメモリ割り当て関数呼び出し602,604を含むソフトウェアプログラム624を実行する場合に、メモリ割り当て関数呼び出し602,604を受信する。
ブロック704では、処理システム100は、API622を介してライブラリ620にアクセスする。ライブラリ620は、メモリ位置情報やプリファレンス等を基本システムソフトウェアに通信するソフトウェア624のインタフェースとして機能するように、データ構造、アルゴリズム及び他のサービスを、API622を介してプログラマ又は他のユーザに提供する。従って、ライブラリ620は、プログラマ又は他のユーザが関数呼び出しを介してメモリ割り当てを指定するのを促進する。
ブロック706では、処理システム100は、関数呼び出し602,604のメモリインジケータ(図6に「I−1」として示す)を識別して、割り当てに指定された位置を決定する。例えば、メモリインジケータ(「I−1」)は、1つ以上のメモリ106,107,108,109、1つ以上のクラス(I,II)、1つ以上のメモリレベル、1つ以上のメモリタイプ等を指定してもよい。メモリインジケータ(「I−1」)は、関数呼び出しを介して渡されたパラメータ、関数呼び出しとは別のシンタックスインデックス、又は、関数呼び出し自体を含んでもよい。
ブロック708では、処理システム100は、関数呼び出し126のパラメータに基づいて、データ構造128の各部分を識別する。いくつかの実施形態においては、パラメータは、データ構造128のタイプ、各部分の境界、各部分のデータサイズ、各部分のデータタイプ等を識別することによって、データ構造128の各部分を指定してもよい。データ構造128は、単一の部分がデータ構造128全体を表す場合を含む、任意のサイズの任意の数のデータ部分に分けられてもよい。
ブロック710では、オペレーティングシステム621は、メモリインジケータ(「I−1」)に基づいて、データ構造128の各部分を、マルチクラスメモリシステム101の複数のメモリ106,107,108,109に割り当てる。例えば、オペレーティングシステム621は、メモリインジケータ「I−1」及びパラメータ「DS」を含む関数呼び出し604に応じて、データ構造128全体を、クラスIの第1のメモリ106に割り当てる。いくつかの実施形態においては、処理システム100は、関数呼び出し602,604と、その指定されたメモリインジケータ「I−1」及びパラメータを、要件ではなく提案として扱ってもよい。一般的に、方法700は、プログラマ又は他のユーザ(アプリケーションソフトウェアを含む)が、メモリインジケータを含む関数呼び出し又はディレクティブを用いて、マルチクラスメモリシステムの複数のメモリ間のデータ構造の割り当てを管理可能にすることによって、マルチクラスメモリシステムの効率的な活用を促進する。
いくつかの実施形態では、前述した技術の一定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実行されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体上に記憶又は有形に具体化された1つ以上のセットの実行可能命令を含む。ソフトウェアは、命令及び一定のデータを含むことができ、当該命令及びデータは、1つ以上のプロセッサによって実行されると、1つ以上のプロセッサが上記の技術の1つ以上の態様を実行するように操作する。非一時的コンピュータ可読記憶媒体は、例えば、磁気若しくは光学ディスク記憶装置、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶装置、又は、他の不揮発性メモリ装置等を含み得る。非一時的コンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈される若しくは実行可能な他の命令フォーマットであってもよい。
概略的に記載した上記行動又は要素は、全て必要なわけではなく、特定の行動または装置の一部が必須でなくてもよい。上記のものに加えて、1つ以上のさらなる行動を行ってもよく、要素を含み得ることに注意されたい。さらに、行動の列挙順は、必ずしも行動の実行順序ではない。また、特定の実施形態を参照して概念を説明したが、当業者は、請求項に記載の本開示の範囲を逸脱することなく、様々な修正及び変更を行い得ることを理解するであろう。従って、明細書及び図面は、限定的な意味ではなく例示的なものとみなすべきであり、かかる修正は、全て、本開示の範囲内に含まれるものとする。
利点、他の長所、及び、課題の解決手段を特定の実施形態に関連して述べてきたが、当該利点、長所、課題の解決手段と、任意の利点、長所、解決手段を生じさせ、若しくは、より明白にする任意の特徴と、は、何れか又は全ての請求項の重要、必要又は必須の特徴とみなすべきではない。さらに、上述した特定の実施形態は、例示目的のみであり、開示した発明の主題は、本明細書の教示の利点を有する、当業者に明らかな、異なるが同等の方法で修正及び実践されてよい。請求項に別段の記載のない限り、本明細書に示した構造又は設計の詳細に限定する意図はない。よって、上記に開示の特定の実施形態を変更、修正してもよく、かかる全ての変形は、開示の発明の主題の範囲内とみなされることは、明らかである。従って、本明細書で求める保護範囲は、請求項に記載される通りである。

Claims (16)

  1. マルチクラスメモリシステム(101)において、データ構造(128)をメモリに割り当てるための、ライブラリ(120,620)へのメモリ割り当て関数呼び出し(126,602,604)に応じて、
    前記マルチクラスメモリシステムのプロセッサ(102)において、前記データ構造のタイプを識別することと、
    前記マルチクラスメモリシステムの前記プロセッサにおいて、前記ライブラリを用いて、前記データ構造の前記タイプに基づいて、前記データ構造の各部分を前記マルチクラスメモリシステムの複数のメモリ(106,107,108,109)に割り当てることと、を含む、
    方法。
  2. 前記データ構造の各部分を複数のメモリに割り当てることは、
    前記データ構造のメタデータ(402,403,404,405,406,407,408,409,410,411,412)を、前記複数のメモリのうち第1のセットの1つ以上のメモリに割り当てることと、
    前記データ構造のデータ(422、423、424、425、426、427、428、429、430、431、432)を、前記複数のメモリのうち第2のセットの1つ以上のメモリに割り当てることと、をさらに含む、
    請求項1に記載の方法。
  3. 前記データ構造は、順序付けされたデータ構造(200,400)を含み、
    前記順序付けされたデータ構造の各部分を割り当てることは、
    前記順序付けされたデータ構造の最初の部分(250)を、前記複数のメモリのうち第1のセットの1つ以上のメモリに割り当てることと、
    前記順序付けされたデータ構造の最後の部分(252)を、前記複数のメモリのうち第2のセットの1つ以上のメモリに割り当てることと、を含む、
    請求項1に記載の方法。
  4. 前記順序付けされたデータ構造は、木構造(400)を含み、
    前記順序付けされたデータ構造の前記最初の部分は、前記木構造の最初のレベルのノード(402,403,404,405,406,407,408)を含み、
    前記順序付けされたデータ構造の前記最後の部分は、前記木構造の最後のレベルのノード(409,410,411,412)を含む、
    請求項3に記載の方法。
  5. 前記メモリ割り当て関数呼び出しは、複数のパラメータ(136)をさらに含み、
    前記データ構造の各部分を前記マルチクラスメモリシステムの複数のメモリに割り当てることは、
    前記複数のパラメータに基づいて、前記データ構造の各部分を、前記マルチクラスメモリシステムの複数のメモリに割り当てることをさらに含む、
    請求項1に記載の方法。
  6. 前記データ構造は、リンクリスト(200)を含み、
    前記データ構造の各部分を前記マルチクラスメモリシステムの複数のメモリに割り当てることは、
    前記リンクリストの最初のセグメント(250)を、前記複数のメモリのうち第1のセットの1つ以上のメモリに割り当てることと、
    前記リンクリストの最後のセグメント(252)を、前記複数のメモリのうち第2のセットの1つ以上のメモリに割り当てることと、をさらに含み、
    前記第1のセットの1つ以上のメモリは、前記第2のセットの1つ以上のメモリよりも速いアクセスを提供する、
    請求項1に記載の方法。
  7. 前記データ構造は、マップ構造(300)を含み、
    前記データ構造の各部分を前記マルチクラスメモリシステムの複数のメモリに割り当てることは、
    前記マップ構造のキー部分(350)を、前記複数のメモリのうち第1のセットの1つ以上のメモリに割り当てることと、
    前記マップ構造の値部分(352)を、前記複数のメモリのうち第2のセットの1つ以上のメモリに割り当てることと、をさらに含み、
    前記第1のセットの1つ以上のメモリは、前記第2のセットの1つ以上のメモリよりも速いアクセスを提供する、
    請求項1に記載の方法。
  8. 前記データ構造は、グラフ構造(400)を含み、
    前記データ構造の各部分を前記マルチクラスメモリシステムの複数のメモリに割り当てることは、
    グラフ構造のノードメタデータ(402,403,404,405,406,407,408,409,410,411,412)を、前記複数のメモリのうち第1のセットの1つ以上のメモリに割り当てることと、
    前記グラフ構造のノードデータ部分(422,423,424,425,426,427,428,429,430,431,432)を、前記複数のメモリのうち第2のセットの1つ以上のメモリに割り当てることと、を含み、
    前記第1のセットの1つ以上のメモリは、前記第2のセットの1つ以上のメモリよりも速いアクセスを提供する、
    請求項1に記載の方法。
  9. マルチクラスメモリシステム(101)のプロセッサ(102)において、前記マルチクラスメモリシステムの複数のメモリレベルのうち指定されたメモリレベルのインジケータを有するメモリ割り当て関数呼び出し(602,604)を実行することと、
    前記メモリ割り当て関数呼び出しの実行に応じて、前記指定されたメモリレベルにおいて、データ構造(128)をメモリに割り当てることと、を含む、
    方法。
  10. 前記インジケータは、前記関数呼び出しのタイプ、前記関数呼び出しを介して渡されたパラメータ(136)、及び、前記関数呼び出しとは別のシンタックスインデックス、のうち少なくとも1つを含む、
    請求項9に記載の方法。
  11. ライブラリを記憶するライブラリ(120,620)ストアと、
    統合メモリアドレス空間を共有する複数のメモリ(106,107,108,109)に結合可能なプロセッサ(102)と、を備え、
    前記プロセッサは、
    データ構造をメモリに割り当てるための、前記ライブラリへのメモリ割り当て関数呼び出し(126,602,604)に応じて、
    前記データ構造のタイプを識別し、
    前記ライブラリを用いて、前記データ構造の各部分を、前記データ構造の前記タイプに基づいて、前記複数のメモリのうち複数のメモリ間で割り当てる、
    システム(100)。
  12. 前記プロセッサは、
    前記データ構造のメタデータ(402,403,404,405,406,407,408,409,410,411,412)を、前記複数のメモリのうち第1のセットの1つ以上のメモリに割り当てることと、
    前記データ構造のデータ(422,423,424,425,426,427,428,429,430,431,432)を、前記複数のメモリのうち第2のセットの1つ以上のメモリに割り当てることと、
    によって、前記データ構造の各部分を複数のメモリ間で割り当てる、
    請求項11に記載のシステム。
  13. 前記メモリ割り当て関数呼び出しは、複数のパラメータ(136)をさらに含み、
    前記プロセッサは、前記データ構造の各部分を、前記複数のパラメータに基づいて、前記複数のメモリのうち複数のメモリに割り当てることによって、前記データ構造の各部分を、前記複数のメモリのうち複数のメモリに割り当てる、
    請求項11に記載のシステム。
  14. 前記データ構造は、リンクリスト(200)を含み、
    前記プロセッサは、
    前記リンクリストの最初のセグメント(250)を、前記複数のメモリのうち第1のセットの1つ以上のメモリに割り当てることと、
    前記リンクリストの最後のセグメント(252)を、前記複数のメモリのうち第2のセットの1つ以上のメモリに割り当てることと、
    によって、前記データ構造の各部分を、前記複数のメモリのうち複数のメモリに割り当て、
    前記第1のセットの1つ以上のメモリは、前記第2のセットの1つ以上のメモリよりも速いアクセスを提供する、
    請求項11に記載のシステム。
  15. 前記データ構造は、マップ構造(300)を含み、
    前記プロセッサは、
    前記マップ構造のキー部分(350)を、前記複数のメモリのうち第1のセットの1つ以上のメモリに割り当てることと、
    前記マップ構造の値部分(352)を、前記複数のメモリのうち第2のセットの1つ以上のメモリに割り当てることと、
    によって、前記データ構造の各部分を、前記複数のメモリのうち複数のメモリに割り当て、
    前記第1のセットの1つ以上のメモリは、前記第2のセットの1つ以上のメモリよりも速いアクセスを提供する、
    請求項11に記載のシステム。
  16. 前記データ構造は、グラフ構造(400)を含み、
    前記プロセッサは、
    前記グラフ構造のノードメタデータ(402,403,404,405,406,407,408,409,410,411,412)を、前記複数のメモリのうち第1のセットのメモリに割り当てることと、
    前記グラフ構造のノードデータ部分(422,423,424,425,426,427,428,429,430,431,432)を、前記複数のメモリのうち第2のセットのメモリに割り当てることと、
    によって、前記データ構造の各部分を、前記複数のメモリのうち複数のメモリに割り当て、
    前記第1のセットの1つ以上のメモリは、前記第2のセットの1つ以上のメモリよりも速いアクセスを提供する、
    請求項11に記載のシステム。
JP2016558775A 2014-05-09 2015-05-06 マルチクラスメモリシステムにおけるメモリ割り当てのシステム及び方法 Active JP6205506B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/273,751 2014-05-09
US14/273,751 US9377954B2 (en) 2014-05-09 2014-05-09 System and method for memory allocation in a multiclass memory system
PCT/US2015/029369 WO2015171695A1 (en) 2014-05-09 2015-05-06 System and method for memory allocation in a multiclass memory system

Publications (2)

Publication Number Publication Date
JP2017517792A true JP2017517792A (ja) 2017-06-29
JP6205506B2 JP6205506B2 (ja) 2017-09-27

Family

ID=54367891

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016558775A Active JP6205506B2 (ja) 2014-05-09 2015-05-06 マルチクラスメモリシステムにおけるメモリ割り当てのシステム及び方法

Country Status (6)

Country Link
US (1) US9377954B2 (ja)
EP (1) EP3140746A4 (ja)
JP (1) JP6205506B2 (ja)
KR (1) KR101779994B1 (ja)
CN (1) CN106133706A (ja)
WO (1) WO2015171695A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9977730B2 (en) * 2015-05-08 2018-05-22 Dell Products, Lp System and method for optimizing system memory and input/output operations memory
US10515430B2 (en) * 2015-11-03 2019-12-24 International Business Machines Corporation Allocating device buffer on GPGPU for an object with metadata using access boundary alignment
US9847105B2 (en) * 2016-02-01 2017-12-19 Samsung Electric Co., Ltd. Memory package, memory module including the same, and operation method of memory package
JP6423809B2 (ja) * 2016-02-19 2018-11-14 イーソル株式会社 オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法
US20180314945A1 (en) * 2017-04-27 2018-11-01 Advanced Micro Devices, Inc. Graph matching for optimized deep network processing
JP6682599B2 (ja) * 2018-10-19 2020-04-15 イーソル株式会社 オペレーティングシステム及びメモリ割り当て方法
US11150962B2 (en) * 2019-07-17 2021-10-19 Memverge, Inc. Applying an allocation policy to capture memory calls using a memory allocation capture library
US11580019B2 (en) * 2020-04-17 2023-02-14 Microsoft Technology Licensing, Llc Computer memory management in computing devices
US11093169B1 (en) * 2020-04-29 2021-08-17 EMC IP Holding Company LLC Lockless metadata binary tree access

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08194643A (ja) * 1995-01-19 1996-07-30 Fanuc Ltd メモリ制御方式
JP2002351741A (ja) * 2001-05-30 2002-12-06 Matsushita Electric Ind Co Ltd 半導体集積回路装置
JP2006174265A (ja) * 2004-12-17 2006-06-29 Matsushita Electric Ind Co Ltd ストリームパケット受信装置
JP2009020684A (ja) * 2007-07-11 2009-01-29 Kawasaki Microelectronics Kk 端末装置
US20120246403A1 (en) * 2011-03-25 2012-09-27 Dell Products, L.P. Write spike performance enhancement in hybrid storage systems

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1537275A (zh) * 2001-02-24 2004-10-13 �Ҵ���˾ 低等待时间存储器系统访问
US7177985B1 (en) * 2003-05-30 2007-02-13 Mips Technologies, Inc. Microprocessor with improved data stream prefetching
US7293051B1 (en) * 2004-07-01 2007-11-06 Sun Microsystems, Inc. Collection-set selection using a small priority queue
US7926043B2 (en) 2006-06-20 2011-04-12 Microsoft Corporation Data structure path profiling
US8060719B2 (en) * 2008-05-28 2011-11-15 Micron Technology, Inc. Hybrid memory management
US20110107042A1 (en) 2009-11-03 2011-05-05 Andrew Herron Formatting data storage according to data classification
US8615636B2 (en) * 2011-03-03 2013-12-24 International Business Machines Corporation Multiple-class priority-based replacement policy for cache memory
US9009392B2 (en) * 2012-04-25 2015-04-14 International Business Machines Corporation Leveraging a hybrid infrastructure for dynamic memory allocation and persistent file storage
US9652289B2 (en) * 2012-04-27 2017-05-16 Microsoft Technology Licensing, Llc Systems and methods for S-list partitioning

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08194643A (ja) * 1995-01-19 1996-07-30 Fanuc Ltd メモリ制御方式
JP2002351741A (ja) * 2001-05-30 2002-12-06 Matsushita Electric Ind Co Ltd 半導体集積回路装置
JP2006174265A (ja) * 2004-12-17 2006-06-29 Matsushita Electric Ind Co Ltd ストリームパケット受信装置
JP2009020684A (ja) * 2007-07-11 2009-01-29 Kawasaki Microelectronics Kk 端末装置
US20120246403A1 (en) * 2011-03-25 2012-09-27 Dell Products, L.P. Write spike performance enhancement in hybrid storage systems

Also Published As

Publication number Publication date
EP3140746A4 (en) 2018-03-07
EP3140746A1 (en) 2017-03-15
KR101779994B1 (ko) 2017-09-19
US20150324131A1 (en) 2015-11-12
US9377954B2 (en) 2016-06-28
JP6205506B2 (ja) 2017-09-27
KR20160122851A (ko) 2016-10-24
WO2015171695A1 (en) 2015-11-12
CN106133706A (zh) 2016-11-16

Similar Documents

Publication Publication Date Title
JP6205506B2 (ja) マルチクラスメモリシステムにおけるメモリ割り当てのシステム及び方法
US10956331B2 (en) Cache partitioning in a multicore processor
CN107636625B (zh) 用于共享系统高速缓存的虚拟化控制的方法和装置
JP6378417B2 (ja) 動的パーティショニングを用いる共有されるキャッシュのための方法および装置
JP6214815B2 (ja) セットおよびウェイによるコンポーネントキャッシュへの柔軟なキャッシュパーティショニングのための方法および装置
EP2645259B1 (en) Method, device and system for caching data in multi-node system
US10255190B2 (en) Hybrid cache
KR20130018597A (ko) 키­값 스토어를 포함하는 메모리 시스템
KR20120123127A (ko) 이종 플랫폼에서 포인터를 공유시키는 방법 및 장치
US20210173574A1 (en) Allocating variable media types of memory devices in a memory system
JP5591969B1 (ja) マルチコアプロセッサおよび制御方法
US20190042415A1 (en) Storage model for a computer system having persistent system memory
CN109791510B (zh) 在异构计算中管理数据流
JP2017076396A (ja) コンピューティングシステムとその動作方法
US20180046474A1 (en) Method for executing child kernels invoked on device side utilizing dynamic kernel consolidation and related non-transitory computer readable medium
Kaczmarski Experimental B+-tree for GPU
US8914779B2 (en) Data placement for execution of an executable
CN105612505B (zh) Cpu调度的方法和装置
JPH0844577A (ja) データ分割方法及びマルチプロセッサシステム
CN106940682B (zh) 一种基于片上可编程存储器的嵌入式系统优化方法
US20110179038A1 (en) Per-thread, per-instance data storage
US20240111672A1 (en) Data co-location using address hashing for high-performance processing in memory
Lee et al. Analyzethat: a programmable shared-memory system for an array of processing-in-memory devices
Butcher et al. Exploring Strategies to Improve Locality Across Many-Core Affinities
EP4214610A1 (en) Weights layout transformation assisted nested loops optimization for ai inference

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170328

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170815

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170904

R150 Certificate of patent or registration of utility model

Ref document number: 6205506

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250