日本ソフトウェア科学会第 41 回大会 (2024 年度) 講演論文集

UPMEM PIM のためのスクラッチパッドメモリをyoung 世代とする世代別 GC
森本 龍 鵜川 始陽
本研究では，UPMEM Processing-in-Memory(PIM) の DRAM プロセッサ (以下 DPU) の上で動く GC を提案する．UPMEM PIM はメモリモジュールの各 DRAM チップにプロセッサを実装したアクセラレータである．我々は Java のプログラムの一部の実行を UPMEM PIM にオフロードするシステムを開発している．本研究では DPUの持つスクラッチパッドメモリを世代別 GC の young 世代とすることで，マイナー GC 時の DRAM アクセスを減らし，高速にゴミを回収する GC を提案する．GC が何度か発生するプログラムにおいて，提案する GC とスクラッチパッドメモリを使用しない他の何種かの GC でそれぞれ処理時間と GC にかかる時間を比較し，スクラッチパッドメモリを使用しない世代別 GC よりも 1.5 倍から 3 倍の速さの時間で GC できることを確認した．

我々は Java のプログラムの一部をこの UPMEM

1 はじめにPIM にオフロードするシステムを開発している [5]．

Processing-in-Memory(PIM) は，メモリの近くにこのシステムでは Java プログラムをバイナリにコンメモリプロセッサが配置された複数のノードからなパイルし，それを DPU にオフロードして実行する．

るアーキテクチャである．プログラムをメモリプロ

本研究では，このシステムにおいて DPU の上で実セッサにオフロードし，データの存在するメモリプロ行される Java 処理系の GC を開発する．高速な GCセッサで計算を行うため，従来の CPU で計算を行うを実装する際には，DPU の持つスクラッチパッドメアーキテクチャと比べ，CPU とメモリの間でのデーモリをどのようにして有効に使用するかが重要であタの転送量を削減することが可能である．これによりる．DPU はアクセス速度が速いが容量の小さいスクCPU とメモリ間の転送量増大に伴うボトルネックをラッチパッドメモリと，容量が大きいがアクセス速度解消することが期待されている．の遅いメインメモリを有している．そのためメインメ現在公式に唯一利用可能な PIM として，UPMEMモリのみにデータを置くようにすると GC を行う際PIM [8] が存在する．UPMEM PIM はメモリモジューにメインメモリへのアクセスが多発し，GC にかかるルの各 DRAM チップにプロセッサ (以下 DPU) を実時間が増大することが予想される．

装したアクセラレータである．DPU の上でプログラ

本研究では，young 世代とリメンバードセットをムを動かす際には，CPU から DPU にプログラムをスクラッチパッドメモリに置く世代別 GC を提案すロードし，それを CPU から起動することで実行がでる．young 世代をスクラッチパッドメモリ上に置くこきる．とで，マイナー GC 時にメインメモリへのアクセス∗

Generational GC Using Scratchpad Memory as
Young for UPMEM PIM.
This is an unrefereed paper. Copyrights belong tothe Author(s).
Ryu Morimoto, Tomoharu Ugawa, 東京大学情報理工学研究科, Graduate School of Information Science andTechnology, the University of Tokyo.

を抑える．これによりマイナー GC にかかる時間を削減することが可能である．またマイナー GC を頻繁に行うことで，メインメモリに頻繁にアクセスする
メジャー GC の頻度を抑える．
提案する GC を我々の開発している Java システムに対して実装した．実行の途中で何度も GC が発生するようなプログラムにおいて，提案する GC とス

ジェクト O が持つ参照を全て辿る操作は，次のようクラッチパッドメモリを使用しない他の何種かの GCに行われる．

で処理時間や，GC にかかる時間を測定した．これに

1. O のヘッダーから，クラステーブルのインデックより，多くのオブジェクトが作られた直後にすぐ使用されなくなる状況において他の GC よりも高速に GCを行えることを確認した．またスクラッチパッドメモ
リを使用しない世代別 GC よりも 1.5 倍から 3 倍の速さの時間で GC できることを確認した．

スを読み出す2. クラステーブルから，O の参照フィールドがどこにあるかを読み出す

3. 各参照フィールド F について,
3.1. F を読み出す
3.2. 参照先のオブジェクトのヘッダーにあるマー2 背景

クビットを読み出し，マークされていなけれ

2. 1 UPMEM

ば GC スタックに積む

我々の研究では，実在する PIM アーキテクチャのステップ 1 では 1 回，ステップ 2 では 2 回 MRAM計算機として UPMEM [8] を用いる．UPMEM では，にアクセスする．ステップ 3 では，参照フィールド 1

各メモリモジュール内の DRAM チップにインメモリつにつきステップ 3.1 と 3.2 で 1 回ずつ MRAM にアプロセッサーとして DRAM Processing Unit(DPU)クセスする．従って合計でオブジェクトが持つ参照のが配置されている．

数を R とした時，生きているオブジェクト 1 個あた

DPU は DRAM チップのメモリをメインメモリとして用い，それとは別にスクラッチパッドメモリをり 3 + 2R 回 MRAM にアクセスする．さらにスイー
プでも MRAM にアクセスする．

持っている．このメインメモリを MRAM，スクラッ
チパッドメモリを WRAM と呼び，それぞれ 64MB，3 提案手法

64KB の容量を持っている．DPU から WRAM のア

3. 1 世代別 GC

クセスは直接行えるため高速だが，一方で DPU か

本研究では young 世代とリメンバードセットを

ら MRAM へのアクセスには時間がかかる．これはWRAM に，old 世代を MRAM に配置する世代別

MRAM へのアクセスは，データが WRAM に DMA

GC を提案する．世代別 GC は，マイナー GC で多転送された後に行われ，直接アクセスができないためくのゴミを回収し，生き残ったものだけを old 領域である．に移動する．提案手法は young 世代とリメンバード

WRAM に対する 4 バイトの読み書きは，11 サイセットを WRAM に配置することで，頻度の高いマクルかかる．これに対して MRAM へのアクセスは，イナー GC に伴う MRAM アクセスを削減する。多S バイトのデータの読み込みに約 77 + 0.5S サイク

くの MRAM アクセスを伴い，時間のかかるメジャー

ル，書き込みに約 61 + 0.5S サイクルかかると報告さ

GC の頻度は低い．

れている [4]．

また提案手法では，GC 以外の処理時間の削減も期待できる．新しくオブジェクトを作る時には，割り当

2. 2 GC の実装における課題てたメモリにゼロを書き込んで初期化する．その後コ

MRAM へのアクセスは遅いので，GC は MRAMンストラクタの実行でも新しいオブジェクトへの書きアクセスを抑える必要がある．Java オブジェクトを込みが生じる可能性がある．提案手法では，新しいオ配置する先として MRAM と WRAM が考えられる．

ブジェクトは WRAM に作られるので，これらの書もし全てのオブジェクトを容量の大きな MRAM に配き込みが高速に行われる．

置することにすると，GC は生きているオブジェクトを探すために多数の MRAM アクセスを生じさせる．
例えばマークスイープ GC で，MRAM にあるオブdef copy(o)oo = free_head
3
free_head += size(o)4o.mark = 1
5o.forwarding = oo
6cls = cls_tables[o.cls_index] // mram
7
ref_fields = cls.ref_fields// mram8
foreach f in ref_fields
p = o[f]910
if in_young(p)11if p.mark == 1
12
pp = p.forwarding
13
else
14
pp = copy(p)15o[f]= pp16
dma_copy(o, oo, size(o))// mram17
return oo
1

young

2

old

子オブジェクトの移動

young

図 2: young 領域のオブジェクトを old 領域に移動する関数

old

子オブジェクトを移動する．その後親オブジェクトの参照を書き換える．この時親オブジェクトは WRAM上にあるので，参照の書き換えは WRAM への書き親オブジェクトの移動込みになる．最後に親オブジェクトを移動する．代表的なコピー GC である Cheney のコピー GC [2] でyoungは，親オブジェクトをコピーした後に子オブジェクトをコピーする．このような場合には MRAM 上で子オブジェクトへのポインタを更新することになり，多old

くの MRAM アクセスが発生する．
図 2 にオブジェクトを young 領域から old 領域にコピーする関数 copy の疑似コードを示す．引数に渡されるオブジェクト o が，young 領域から old 領

図 1: マイナー GC によるオブジェクトの移動域に移動される．空いている old 領域の先頭である

3. 2 マイナー GC

オブジェクトヘッダーのマークビットである mark に新しく作られるオブジェクトは young 領域の空き1 を立てる．また同様にオブジェクトヘッダー内に領域の先頭に確保する．やがて young 領域に空きがある forwarding に移動先を書き込む．11，12 行目

なくなった際にはマイナー GC を行い，young 領域

ではこの 2 つを使用することで，重複してオブジェ内の生きているオブジェクトを辿り，old 領域に移動クトを辿ることを避ける．次に o のもつ参照を辿る．

する．この移動をオブジェクトの昇格という．

MRAM にあるクラステーブルへアクセスを行い，そfree head を移動先とする．移動先が決まると，o の提案する GC では，深さ優先で参照を辿り，戻りがこから参照フィールド ref fields を得る．その後は

け順にオブジェクトを移動することで，MRAM のアそれぞれの参照フィールドが指すオブジェクトにつクセスを減らす．戻りがけ順でオブジェクトを移動す

いて，深さ優先でオブジェクトを辿る．深さ優先でオると，オブジェクトが WRAM 上にある間に子オブブジェクトを辿り，全ての参照フィールド o[f] を書ジェクトの移動が行われ，高速に子オブジェクトへのき換えた後に，オブジェクトを移動することで，一度ポインタを更新できる．図 1 はその様子である．まずの DMA 転送のみの MRAM アクセスに抑えることができる．生きているオブジェクトを辿る際に，2. 2

old節で説明したマークスイープ GC では 3 + 2R 回のMRAM アクセスであった．この移動方法では mramとコメントがある箇所が MRAM アクセスとなっており，3 回の MRAM アクセスにまで削減できている．
我々の実装では再帰関数によってオブジェクトを移動

young

from空間to空間

するためスタックオーバーフローが生じる可能性があメジャーGCるが、この問題については本論文では議論しない．

old3. 3 リメンバードセット
世代別 GC では old 領域のオブジェクトから young領域のオブジェクトへの参照を辿るために，リメンバードセットを用いる．提案手法ではこのリメンバードセットを WRAM 上に置き，old 世代オブジェクトfrom空間to空間

中の young 世代への参照フィールドへのポインタをyoung格納する．マイナー GC が終了すると young 領域の

図 3: メジャー GC におけるオブジェクトの移動

生きているオブジェクトは全て old 領域に移動されるので，リメンバードセットの中身は空にする．

移動する際にはオブジェクトを辿るのだが，この時提案手法ではリメンバードセットに重複したものの移動方法は図 2 の疑似コードとほぼ同じで，10 行が登録されるのを許す．これは，例えばリメンバード目における young 領域にあるオブジェクトかどうかセットに old 領域のオブジェクトを登録し，そのオブのチェックは行わない．全ての生きているオブジェク

ジェクトにマークを付けるようにすれば重複した登録

トの移動を終えると，メジャー GC が完了する．メは避けられるが，これが MRAM アクセスとなるた

ジャー GC を行うと，young 領域内で生きているオめである．そのため参照をよく書き換えるプログラム

ブジェクトは全て old 領域に移動され空になるので，では，old 世代オブジェクトのフィールドを young 世

リメンバードセットの中身も空にする．

代オブジェクトに書き換える度に，リメンバードセッ

メジャー GC はマイナー GC に比べて，長い時間がトに格納される．これによりリメンバードセットが満かかることが予想される．これは young 領域上のオ杯になる可能性が高くなる．リメンバードセットが満ブジェクトを辿るのに比べて，old 領域上のオブジェ杯になった時は，マイナー GC をすることでリメンクトを辿る際には MRAM へのアクセスが増えてしバードセットの中を空にすることで対応する．

まうためである．メジャー GC で old 領域にあるオブジェクトを辿って移動する際は，図 2 の疑似コー

3. 4 メジャー GCドにおいて移動されるオブジェクト o は MRAM に提案手法では old 領域を半分に分けて片方のみをある．そのため 4，5 行目のヘッダーへの書き込みが使用し，その中にオブジェクトを順に詰めて配置してMRAM アクセスとなる．また参照フィールドを辿るいく．半分に分けたヒープのうち，現在使用している際には，9 行目の参照フィールドの読み込みと 15 行方を from 空間，もう一方を to 空間と呼ぶ．from 空

目の参照フィールドの書き換えが MRAM アクセスと間が満杯になるとメジャー GC を行う．その時の様なる．これらにより参照フィールドの数を R とすれ子を図 3 に示す．メジャー GC では，young 領域とば，2 + 2R 回 MRAM へのアクセスが増えてしまう．

from 空間で生きているオブジェクトを全て to 空間に移動する．

このアルゴリズムでは，old 領域にオブジェクトを移動する際に，free head を見るだけで移動場所がわ

かる．しかしメジャー GC 時にオブジェクトを移動するため，移動を行わないマークスイープ GC などと– アルゴリズムは，提案手法における old 領域の管理と同様

比べると，生きているオブジェクトの分だけ MRAMに対しての書き込みが生じ，その分時間がかかる可能

4. 2 実験プログラム

性がある．

我々は以下の 2 つの量を制御できるベンチマークプログラムを作成した．

4 実験

1. マイナー GC で昇格するオブジェクトの割合

本章では，提案する GC は他の GC よりも高速で

2. old 領域内で生存しているオブジェクトの量あるのか，また高速である場合に，その理由は young

具体的には，木構造のデータに要素を追加したり，世代を WRAM に置いたからなのかという疑問に答削除したりするプログラムを作成した．木に要素を追えるための実験を行った．

加する際に，余分に K 個のオブジェクトを作り，そ実験は以下の構成の UPMEM システムで行った．

れらは木に繋がずゴミとする．木の要素数は 600 を• UPMEM PIM モジュール (バージョン v1A)

超えないようにし，超えると木の半分の要素を削除す– DPU (350 MHz)る．K の値により作ったオブジェクトのうち何%が• UPMEM SDK: 2023.2.0

生きたオブジェクトとなるかを変更する．これにより

DPU は 1 つのみを使用した．また DPU は最大で昇格するオブジェクトの割合を制御する．以下では
1R=K +1とする．木の半分の要素を削除するイベントが起きな24 個のスレッドをサポートするが，1 スレッドのみを用いた．

ければ，R が昇格率となる．このイベントは我々の実

4. 1 実験方法

験では，最大でもマイナー GC 12 回に 1 回しか起きGC が何度も発生するようなプログラムを実行し，なかったので，以下では R で昇格率を近似する．まGC 以外の実行時間と GC に要する時間を測定する．

たこの木とは別に，プログラムの実行を通して変更さプログラムには 4. 2 節で説明するようなものを用れない木を作る．この木は常に old 領域に存在する．

いる．

この木を構成するオブジェクトのサイズの合計を S

DPU 上の Java 処理系に提案する GC を実装し，比とする．old 領域には，この木に加えて，要素を追加，較対象として WRAM を使用しない世代別 GC(GEN)，削除する木の一部も存在する．その大きさは，最大でマークスイープ GC(MS)，コピー GC(CP) を用意し30KB 程度である．

た．それぞれの GC の構成は以下の通りである．

• 提案手法– WRAM に 28KB の young 領域，4KB のリ
メンバードセット– MRAM に 1MB の old 領域• GEN– MRAM に 28KB の young 領域，4KB のリ

4. 3 実験結果
4. 3. 1 old 領域への昇格率と世代別 GC の性能
マイナー GC 時に young 領域から old 領域に昇格するオブジェクトが少なければ，世代別 GC と提案手法が他の GC よりも高速となる結果が得られた．図4 から図 6 にそれぞれの S において GC に要した時メンバードセット間を示す．R が 10%以下であれば，全ての S で世代– 992KB の old 領域

別 GC と提案手法が他の GC よりも高速に GC を行• MS– MRAM に 1MB のヒープ領域• CP– MRAM に 1MB のヒープ領域えていることがわかる．
しかし R が大きくなると，世代別 GC や提案手法よりもマークスイープ GC の方が高速になっている．これの原因の 1 つとして，R が大きいと old 領域に昇格

表 1: 各 S と R における GC の回数とその平均サイクル数
GC の種類

GC の回数S = 50KB
R = 25%

平均サイクル数
S = 50KB
R = 25%

GC の回数S = 50KB
R = 50%

平均サイクル数
S = 50KB
R = 50%

GC の回数S = 250KB
R = 25%

平均サイクル数
S = 250KB
R = 25%16423142328

1.60 × 107
7.64 × 106
7.58 × 105
6.27 × 106
2.67 × 105
1.64 × 107

1582278228
81.53 × 107
8.24 × 106
1.48 × 106
6.36 × 106
5.27 × 105
1.67 × 107

34102259227
11

5.92 × 107
2.96 × 107
7.68 × 105
2.54 × 107
2.73 × 105
2.13 × 107

CP
GEN(メジャー GC)
GEN(マイナー GC)
Proposed(メジャー GC)
Proposed(マイナー GC)MS

後すぐゴミになるオブジェクトが増え，メジャー GC

4. 3. 3 オブジェクトの移動と GC の性能の回数が増えていることが考えられる．表 1 に，各MRAM のみを用いるコピー GC とマークスイープ

昇格率と生存オブジェクト量における，GC の回数とGC を比べると， マークスイープ GC の方が高速でGC 1 回あたりの平均サイクル数を示す．S = 50KB ，あることがわかった．図 4 から図 6 ではどのケース

R = 25% と S = 50KB ，R = 50% を比べると，Rでも，コピー GC に要する時間の方がマークスイーが 2 倍になると世代別 GC と提案手法でメジャー GC

プ GC のものより長くなっている．またその差は Sが起きた回数も 2 倍となっている．提案手法においが大きくなるほど顕著である．また表 1 において，て，オブジェクトは 1 度のマイナー GC を生き残れ

S = 50KB ，R = 25% と S = 250KB ，R = 25% をば，すぐに old 領域に移動される．これにより R が比べると，S が大きくなるとコピー GC にかかるサ大きいときに，old 領域がすぐに満杯となってしまい，イクル数がマークスイープ GC に比べて極端に大きメジャー GC が頻繁に行われてしまう．これの対策

くなっている．これの原因の 1 つとして，コピー GCとして，young 世代を複数設け，オブジェクトをエイ

では MRAM の上でオブジェクトの移動を行うためでジングするという手法 [6, 7] が考えられる．

あると考えられる．S が大きいとより多くのオブジェ

4. 3. 2 世代別 GC 間の比較

クトを MRAM 上で移動し，その度に MRAM アク

WRAM を使用しない世代別 GC と提案手法を比べセスが生じる．またヒープを 2 分割して使用していると，young 領域とリメンバードセットを WRAM にるため，マークスイープ GC よりも GC の回数が多置いたことにより，提案手法の方が短い時間で GC でくなるのも原因の 1 つである．

きていることがわかる．提案手法と世代別 GC では，提案手法においても，GC 時にオブジェクトの移同じ世代別 GC のアルゴリズムを用いており，違いは動を行っている．図 4 と図 5 において，提案手法は提案手法では WRAM に young 領域とリメンバードR = 25% の時にマークスイープ GC よりも高速にセットがあることである．図 4 から図 6 では，昇格GC できている．しかし図 6 においては，R = 25%率や生存オブジェクト量によらず，提案手法においての時にマークスイープ GC の方が高速となっている．

GC に要する時間は，世代別 GC よりも 1.5 倍から 3S が大きくなると，マークスイープ GC に対する提倍程度速くなっている．表 1 では，昇格率や生存オ案手法の優位性が弱くなっていることがわかる．これブジェクト量によらず，提案手法のマイナー GC は，の対策として，old 領域をオブジェクトを移動しない

世代別 GC のマイナー GC よりも約 3 倍速くなってアルゴリズムで管理する GC が考えられる．

いる．またメジャー GC にかかるサイクル数も 10%から 20%削減されている．これはメジャー GC 時に

4. 4 GC 以外の処理時間の比較

は young 領域も探索するが，これが WRAM 上にあyoung 領域を WRAM に置くことにより，GC 以るためと考えられる．

外の計算時間が 1%から 6%削減されるのを確認した．
図 7 は各生存オブジェクト量における，世代別 GC

CPGEN

ProposedMS

1.20.80.60.40.20102030
R (%)

4050

図 4: S = 50KB における GC の実行時間
CP
GCに要した時間 (s)S=100KB

1020S=250KB

0.810GEN

Proposed

0.60.40.20030
R (%)

4050

図 7: 提案手法の GEN に対する GC 以外の計算比率

MS

1.61.41.2
10.80.60.40.20

領域のどちらかにあり，young 領域にある場合にはWRAM 上でアクセスが行われる．これらが寄与し，GC 以外の時間が削減されたと考えられる．

5 関連研究0102030R (%)

4050

CPGENProposed

世代別 GC において，メモリアクセス時間を課題とした研究はこれまで行われている．近年プロセッサの

図 5: S = 100KB における GC の実行時間MS

処理能力が大幅に向上しているのに対し，メモリのアクセス速度の向上は限定的であり，メモリアクセスが7GCに要した時間 (s)S=50KB1
計算時間比率

GCに要した時間 (s)1.4

6

ボトルネックとなっている．またキャッシュは年々大5きくなっており，これらに伴いキャッシュミスのコス4トがとても大きくなっており，Java アプリケーション

32においては，実行時間の 45%がメインメモリの待ち1時間となる可能性があると報告されている [1]．キャッ00102030R (%)

4050

図 6: S = 250KB における GC の実行時間

シュからメインメモリに書き戻す際には余計なメインメモリへの書き込みが生じている．Java においてほとんどのオブジェクトは 32 バイト以下であり，これは 1 つのキャッシュラインに収まる．またオブジェに対する提案手法の GC 以外の計算時間の比率であクトによっては 2 つのキャッシュラインに跨って存在る．どの生存オブジェクト量や昇格率においても，提するため，対象とするオブジェクト以外の領域も同時

案手法は世代別 GC よりも GC 以外での計算時間がに書き込まれてしまう．また世代別 GC においては，削減されているのがわかる．これは提案手法においキャッシュ上にあるゴミとなったオブジェクトもメイて，young 領域にあるオブジェクトに対するアクセンメモリへ書き戻されてしまう．これらを解決するたスが WRAM 上で行われるためと考えられる．提案

めに，世代別 GC においてキャッシュを young 世代

手法においては，新しくオブジェクトを作成した際として用いる研究が行われている．Yau ら [9] では並に，ゼロ初期化やコンストラクタにおける書き込み

行 GC において 90%のオブジェクトをキャッシュにが WRAM 上で行われる．またプログラム中で木に直接確保し，それらの 68%をキャッシュから回収できオブジェクトを繋ぐ際に，木の要素に対する読み込みたと報告されている．この手法では死んだオブジェクや書き込みが生じる．木の要素は young 領域か old

トをキャッシュ上からメインメモリに書き戻す必要がない．

Chong ら [3] ではキャッシュの代わりにスクラッチ
パッドメモリ (SPM) に young 世代を置くシステムが挙げられる．
謝辞 本研究の一部は，JSPS 科研費 23K24822 の助成を受けたものです．

が提案されている．キャッシュと比べて SPM では，キャッシュミスがなく，確実にデータが存在するため

参 考 文 献データへのアクセスを 1 サイクルで行うことができ[1] Adl-Tabatabai, A.-R., Hudson, R. L., Serrano,
M. J., and Subramoney, S.: Prefetch injection
based on hardware monitoring and object metadata, ACM SIGPLAN Notices, Vol. 39, No. 6(2004),
pp. 267–276.
[2] Cheney, C. J.: A nonrecursive list compacting
algorithm, Communications of the ACM, Vol. 13,No. 11(1970), pp. 677–678.
[3] Chong, K. F., Ho, C. Y., and Fong, A. S.: Pretenuring in java by object lifetime and reference
density using Scratch-Pad memory, 15th EUROMICRO International Conference on Parallel, Distributed and Network-Based Processing (PDP’07),
IEEE, 2007, pp. 205–212.
[4] Gómez-Luna, J., Hajj, I. E., Fernandez, I., Giannoula, C., Oliveira, G. F., and Mutlu, O.: Benchmarking a new paradigm: An experimental analysis
of a real processing-in-memory architecture, arXiv
preprint arXiv:2105.03814, (2021).
[5] Huang, W. and Ugawa, T.:
An ObjectOriented Programming Model for Processing-inMemory Computing in Java, Proceedings of the 40th
JSSST Annual Conference, 2023.
[6] Lieberman, H. and Hewitt, C.: A real-time
garbage collector based on the lifetimes of objects,
Communications of the ACM, Vol. 26, No. 6(1983),
pp. 419–429.
[7] Ungar, D.: Generation scavenging: A nondisruptive high performance storage reclamation
algorithm, ACM SIGPLAN Notices, Vol. 19,
No. 5(1984), pp. 157–167.
[8] UPMEM: UPMEM, 2024. https://www.upmem.
com/technology/.
[9] Yau, C. H., Tan, Y. Y., Fong, A. S., and Yu,W. S.: Hardware concurrent garbage collection for
short-lived objects in mobile java devices, Embedded and Ubiquitous Computing–EUC 2005: International Conference EUC 2005, Nagasaki, Japan,
December 6-9, 2005. Proceedings, Springer, 2005,
pp. 47–56.

る．また SPM 上でメモリ空間を分けることが可能であり，複数のメモリ領域を設けて，それぞれで GCを行うことができる．これらの利点を利用し，[3] では young 世代オブジェクトと長命でよくアクセスされるオブジェクト (hot-mature オブジェクト) 領域を

SPM に配置している．我々の手法でも，hot-matureオブジェクトを WRAM 上に置くことで，より高速化できる見込みがある．

6 まとめと今後の課題
本研究では，DPU 上で動く Java システムに対して GC を開発し，その性能を評価した．DPU の持つ高速にアクセスが可能なスクラッチパッドメモリにyoung 領域を配置し，そこで頻繁にマイナー GC を行い，アクセス速度の遅いメインメモリへのアクセスが多発するメジャー GC の頻度を減らした．これによって，スクラッチパッドメモリを使用しない世代
別 GC よりも高速に GC を行えることを示した．また世代別 GC が得意とする，多くのオブジェクトが作られた直後にすぐ使用されなくなる状況において，他の何種かの GC よりも高速に GC を行えることを示した．また young 領域に高速にアクセスできることによる，GC 以外の処理の高速化も確認した．
今後の課題として，エイジングを用いて短命なオブジェクトの昇格を抑制することや，オブジェクトを移動しないアルゴリズムで old 領域を管理すること，hot-mature オブジェクトを WRAM に配置すること