Enviar búsqueda
Cargar
Precise garbage collection for c
•
7 recomendaciones
•
2,571 vistas
M
miura1729
Seguir
Denunciar
Compartir
Denunciar
Compartir
1 de 16
Descargar ahora
Descargar para leer sin conexión
Recomendados
テーマ「最適化」
テーマ「最適化」
technocat
20151118卒研進捗LT
20151118卒研進捗LT
mohemohe
タイマー
タイマー
TENTO_slide
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
整数列圧縮
整数列圧縮
JAVA DM
マーク&スイープ勉強会
マーク&スイープ勉強会
7shi
optimal Ate pairing
optimal Ate pairing
MITSUNARI Shigeo
Recomendados
テーマ「最適化」
テーマ「最適化」
technocat
20151118卒研進捗LT
20151118卒研進捗LT
mohemohe
タイマー
タイマー
TENTO_slide
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
整数列圧縮
整数列圧縮
JAVA DM
マーク&スイープ勉強会
マーク&スイープ勉強会
7shi
optimal Ate pairing
optimal Ate pairing
MITSUNARI Shigeo
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
Takeshi Yamamuro
ジャパネットQB GPars
ジャパネットQB GPars
Takahiro Sugiura
V6でJIT・部分適用・継続
V6でJIT・部分適用・継続
7shi
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
Takeshi Yamamuro
Qt × Reactive Extensions
Qt × Reactive Extensions
TetsuroMatsumura
llvm入門
llvm入門
MITSUNARI Shigeo
Boost.B-tree introduction
Boost.B-tree introduction
Takayuki Goto
Prosym2012
Prosym2012
MITSUNARI Shigeo
Wavelet matrix implementation
Wavelet matrix implementation
MITSUNARI Shigeo
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
Haruka Ozaki
テーマ「最適化 その2」
テーマ「最適化 その2」
technocat
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
MITSUNARI Shigeo
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Satoshi imai
Delimited Dynamic Binding
Delimited Dynamic Binding
Youyou Cong
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
MITSUNARI Shigeo
Spmv9forpublic
Spmv9forpublic
T2C_
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
MITSUNARI Shigeo
emc++ chapter32
emc++ chapter32
Tatsuki SHIMIZU
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
Takeshi Arabiki
Más contenido relacionado
La actualidad más candente
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
Takeshi Yamamuro
ジャパネットQB GPars
ジャパネットQB GPars
Takahiro Sugiura
V6でJIT・部分適用・継続
V6でJIT・部分適用・継続
7shi
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
Takeshi Yamamuro
Qt × Reactive Extensions
Qt × Reactive Extensions
TetsuroMatsumura
llvm入門
llvm入門
MITSUNARI Shigeo
Boost.B-tree introduction
Boost.B-tree introduction
Takayuki Goto
Prosym2012
Prosym2012
MITSUNARI Shigeo
Wavelet matrix implementation
Wavelet matrix implementation
MITSUNARI Shigeo
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
Haruka Ozaki
テーマ「最適化 その2」
テーマ「最適化 その2」
technocat
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
MITSUNARI Shigeo
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Satoshi imai
Delimited Dynamic Binding
Delimited Dynamic Binding
Youyou Cong
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
MITSUNARI Shigeo
Spmv9forpublic
Spmv9forpublic
T2C_
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
MITSUNARI Shigeo
La actualidad más candente
(20)
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
ジャパネットQB GPars
ジャパネットQB GPars
V6でJIT・部分適用・継続
V6でJIT・部分適用・継続
LLVM最適化のこつ
LLVM最適化のこつ
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
Qt × Reactive Extensions
Qt × Reactive Extensions
llvm入門
llvm入門
Boost.B-tree introduction
Boost.B-tree introduction
Prosym2012
Prosym2012
Wavelet matrix implementation
Wavelet matrix implementation
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
テーマ「最適化 その2」
テーマ「最適化 その2」
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Delimited Dynamic Binding
Delimited Dynamic Binding
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
Spmv9forpublic
Spmv9forpublic
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
Similar a Precise garbage collection for c
emc++ chapter32
emc++ chapter32
Tatsuki SHIMIZU
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
Takeshi Arabiki
PL/CUDA - GPU Accelerated In-Database Analytics
PL/CUDA - GPU Accelerated In-Database Analytics
Kohei KaiGai
Dive into RTS - another side
Dive into RTS - another side
Kiwamu Okabe
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
Kohei KaiGai
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
Kohei KaiGai
SystemV IPC
SystemV IPC
Masami Ichikawa
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
Kohei KaiGai
TVM の紹介
TVM の紹介
Masahiro Masuda
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
Kohei KaiGai
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
Kiwamu Okabe
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)
なおき きしだ
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
Kiyoshi Sawada
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asio
Takatoshi Kondo
Similar a Precise garbage collection for c
(20)
emc++ chapter32
emc++ chapter32
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
PL/CUDA - GPU Accelerated In-Database Analytics
PL/CUDA - GPU Accelerated In-Database Analytics
Dive into RTS - another side
Dive into RTS - another side
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
SystemV IPC
SystemV IPC
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
TVM の紹介
TVM の紹介
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asio
Precise garbage collection for c
1.
Precise Garbage Collection
for C の紹介 CSNagoya 三浦英樹
2.
Precise Garbage Collection
for C 著者 Jon Rafkind, Adam Wick, John Regehr, Matthew Flatt 入手先 http://www.cs.utah.edu/~regehr/papers/ismm15-rafkind.pdf
3.
CのプログラムでもGC使いたい • 普通、保守的 GCでしょう •
たとえば、Boehm GCとか • でも、長い時間使ってるとメモリー使用量 がすごく増大する場合があるみたいだよ • 証拠は? • それは、次のスライドの心だー
4.
PLT Schemeにあった怖い話 • PLT
Schemeを使用したプログラム環境 DrSchemeは毎日再起動をしなければならなかっ た。でも、正確なGCに変えたら再起動が必要なく なった • バイトコードとドキュメントを生成すると、正確な GCだと200MBで済むところが、保守的GCだと 700MBも必要だった • PLT Schemeで作ったmail clientを1日おきに再起 動していたが、正確なGCに変えたら再起動しなく て済むようになった
5.
正確なGCを実現するためには • 次の2つが重要 –
生きているポインタとそうでないものを分ける – アロケーションしたものとその中身がなんなのかをしっ かり関連付ける • 簡単に言うけど難しいよーだってCだもん – コンパイラ相当のものを作って、もってる型情報とか 駆使して頑張る
6.
サポートしています • 配列なんかの途中を指しているポインタ –
効率が悪くなるから出来る限り使わない方が いいみたい • 共用体 – いまどのメンバーを使っているか記録する – 代入したメンバーと違うメンバーを使う行儀の 悪いことはサポートしない。
7.
サポートしていません • いったん、範囲外にポインタを動かしてもう一度
範囲内に戻す p = malloc(1024) p -= 1024 p[1025] /* access 1024 to 2047 */ • ポインタでxorをとってみたり – xor linked listとか。頭いい人っているねー • 一旦整数にcastしてまたポインタにcast – CRubyはgive up • ライブラリの中でアロケーションしちゃったりとか
8.
ローカル変数 ポインタの情報を配列に入れる
// TRANSFORMED int cheeseburger(int* x) { void* gc_stack_frame[3]; → プログラム変換を行う /* chain to previous frame: */ void* last_stack_frame = GC_last_stack_frame(); gc_stack_frame[0] = last_stack_frame; /* number of elements + shape category: */ gc_stack_frame[1] = (1 << 2) + GC_POINTER_TYPE; /* variable address: */ // ORIGINAL gc_stack_frame[2] = &x; int cheeseburger(int* x) { /* install frame: */ GC_set_stack_frame(gc_stack_frame); add_cheese(x); add_cheese(x); return x[17]; /* restore old GC frame */ GC_set_stack_frame(last_stack_frame); } return x[17]; }
9.
変換後プログラム拡大 // TRANSFORMED
/* variable address: */ int cheeseburger(int* x) { gc_stack_frame[2] = &x; void* gc_stack_frame[3]; /* install frame: */ GC_set_stack_frame(gc_stack_frame); /* chain to previous frame: */ add_cheese(x); void* last_stack_frame = GC_last_stack_frame(); /* restore old GC frame */ gc_stack_frame[0] = last_stack_frame; GC_set_stack_frame(last_stack_frame); return x[17]; /* number of elements + shape category: */ } gc_stack_frame[1] = (1 << 2) + GC_POINTER_TYPE;
10.
結局 • GCのシステムにどのローカル変数が生き
ているポインタを持っているかを教える – コンパイラが変数の型を把握していることを利 用
11.
malloc部分の変換 • mallocってこんな感じで使うよね
malloc(sizeof(foo) * 5) • これをみると、アロケーションするタイプ (foo)と数(5)が分かるわけだ。 • 正確なGCだと何の型のデータをアロケーションしたかの 情報も必要なのでこんな感じで変換 GC_malloc(sizeof(foo) * 5, gc_foo_tag) • で、foo_tagってなんなの? – それは次のスライドの心だー
12.
gc_foo_tagって? • gc_tag_struct型の構造体 • アローケートしたオブジェクトと型を結びつける •
内容はmarkとrepair(コンパクション) 処理を行う 関数へのポインタ struct foo { int *x; int *y;} とするとmarkを行う関数 void gc_mark_struct_foo (void * x_) { struct foo *tmp = (struct foo *) x_; GC_mark(tmp->x); GC_mark(tmp->y); } こんな関数をコンパイル時に自動生成する。 ユーザがmark/repair関数をカスタマイズすることも可能
13.
いろいろやってみた
(PTL Scheme) • PLT SchemeのGCをConservative GCから Precise GCにしてみた • 最初に説明した通り、メモリ使用量が激減 • 実行速度は – メモリアロケーションが多いベンチマークは20% くらい速くなる – メモリアロケーションが少ないベンチマークは1 0~20 %遅くなる
14.
いろいろやってみた
(Linuxカーネル!) • カーネルなんて絶対メモリーリークしちゃい かんし、GCが欲しいよね • なんかいろいろ面倒だったみたい。続きは 論文で • tmpfsからddコマンドでファイルアクセス – GC付きのものが4割ほど遅い • HDDからddコマンドでファイルアクセス – あまり変わらない
15.
まとめ • この技術すげー。今後、いろんなところで
使われるようになるはず。 • GC本第2版は保守的GCの章を書き換えな いといかんかもしれませんねー • 8ccでサポート予定だから楽しみ http://github.com/rui314/8cc
16.
ご清聴 ありがとう ございました
Descargar ahora