Enviar búsqueda
Cargar
高度に最適化された移植可能なメモリマネージャ
•
Descargar como PPTX, PDF
•
22 recomendaciones
•
8,031 vistas
D
DADA246
Seguir
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 31
Descargar ahora
Recomendados
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
CODE BLUE
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
Recomendados
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
CODE BLUE
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
MITSUNARI Shigeo
闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
uchan_nos
UniRx完全に理解した
UniRx完全に理解した
torisoup
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
gree_tech
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public
bonjin6770 Kurosawa
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!
masakazu matsubara
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
Hirotaka Kawata
型安全性入門
型安全性入門
Akinori Abe
Linuxのsemaphoreとmutexを見る
Linuxのsemaphoreとmutexを見る
wata2ki
20111028ssmjp
20111028ssmjp
Takeshi HASEGAWA
Windows azureを知ろう ロール&ストレージ編
Windows azureを知ろう ロール&ストレージ編
Chiho Otonashi
Más contenido relacionado
La actualidad más candente
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
MITSUNARI Shigeo
闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
uchan_nos
UniRx完全に理解した
UniRx完全に理解した
torisoup
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
gree_tech
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public
bonjin6770 Kurosawa
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!
masakazu matsubara
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
Hirotaka Kawata
型安全性入門
型安全性入門
Akinori Abe
Linuxのsemaphoreとmutexを見る
Linuxのsemaphoreとmutexを見る
wata2ki
La actualidad más candente
(20)
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
闇魔術を触ってみた
闇魔術を触ってみた
C#でわかる こわくないMonad
C#でわかる こわくないMonad
中3女子でもわかる constexpr
中3女子でもわかる constexpr
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
UniRx完全に理解した
UniRx完全に理解した
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
型安全性入門
型安全性入門
Linuxのsemaphoreとmutexを見る
Linuxのsemaphoreとmutexを見る
Similar a 高度に最適化された移植可能なメモリマネージャ
20111028ssmjp
20111028ssmjp
Takeshi HASEGAWA
Windows azureを知ろう ロール&ストレージ編
Windows azureを知ろう ロール&ストレージ編
Chiho Otonashi
Linux の hugepage の開発動向
Linux の hugepage の開発動向
Naoya Horiguchi
Basic of virtual memory of Linux
Basic of virtual memory of Linux
Tetsuyuki Kobayashi
ファイルの隠し方
ファイルの隠し方
mfumi
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
Kentaro Matsui
トランザクションの設計と進化
トランザクションの設計と進化
Kumazaki Hiroki
TechEd2010_T2-401_EffectiveHyper-V
TechEd2010_T2-401_EffectiveHyper-V
Kuninobu SaSaki
スマートフォン対応、気をつけたいトラブル
スマートフォン対応、気をつけたいトラブル
Hiroaki Wakamatsu
Windows Azureストレージ機能のまとめとWindows Server 2016(vNext)のストレージ新機能
Windows Azureストレージ機能のまとめとWindows Server 2016(vNext)のストレージ新機能
Takano Masaru
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
論文輪読: Coordinated and Efficient Huge Page Management with Ingens
論文輪読: Coordinated and Efficient Huge Page Management with Ingens
mmisono
Memcachedの仕組みと設定
Memcachedの仕組みと設定
Tatsuya Akashi
Programming camp code reading
Programming camp code reading
Hiro Yoshioka
Lars George HBase Seminar with O'REILLY Oct.12 2012
Lars George HBase Seminar with O'REILLY Oct.12 2012
Cloudera Japan
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
Cloud os techday_0614
Cloud os techday_0614
Takano Masaru
コンテナで作る開発環境 (20161104 CodeIgniter Night)
コンテナで作る開発環境 (20161104 CodeIgniter Night)
智之 大野
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
Similar a 高度に最適化された移植可能なメモリマネージャ
(20)
20111028ssmjp
20111028ssmjp
Windows azureを知ろう ロール&ストレージ編
Windows azureを知ろう ロール&ストレージ編
Linux の hugepage の開発動向
Linux の hugepage の開発動向
Basic of virtual memory of Linux
Basic of virtual memory of Linux
ファイルの隠し方
ファイルの隠し方
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
トランザクションの設計と進化
トランザクションの設計と進化
TechEd2010_T2-401_EffectiveHyper-V
TechEd2010_T2-401_EffectiveHyper-V
スマートフォン対応、気をつけたいトラブル
スマートフォン対応、気をつけたいトラブル
Windows Azureストレージ機能のまとめとWindows Server 2016(vNext)のストレージ新機能
Windows Azureストレージ機能のまとめとWindows Server 2016(vNext)のストレージ新機能
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
論文輪読: Coordinated and Efficient Huge Page Management with Ingens
論文輪読: Coordinated and Efficient Huge Page Management with Ingens
Memcachedの仕組みと設定
Memcachedの仕組みと設定
Programming camp code reading
Programming camp code reading
Lars George HBase Seminar with O'REILLY Oct.12 2012
Lars George HBase Seminar with O'REILLY Oct.12 2012
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Cloud os techday_0614
Cloud os techday_0614
コンテナで作る開発環境 (20161104 CodeIgniter Night)
コンテナで作る開発環境 (20161104 CodeIgniter Night)
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
Último
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Último
(9)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
高度に最適化された移植可能なメモリマネージャ
1.
高度に最適化された移植可能 なメモリマネージャ
@DADA246
2.
自己紹介 • ゲームプログラマやってます • 得意分野
C++,C#,GPU,javascript,PHP • 低レベル係とか描画関係とかCIとかwebと か • Steam、Origin、iPhoneで海外ゲームを遊ん でいます
3.
はじめに • 元ネタはGame Engine
Gems2の A Highly Optimized Portable Memory Managerです • Kindle Editionが$55.92で買えます
4.
アジェンダ •
ゲームでのメモリマネージャについて • Small Block Allocator • Medium Block Allocator • Large Block Allocator
5.
メモリマネージャ • メモリマネージャは重要 • 悪いメモリマネージャは処理速度の低下
や、フラグメンテーションによるクラッ シュを引き起こす →枯れたコードを参考にする →dlmalloc
6.
dlmalloc • Doug Lea’s
malloc • http://g.oswego.edu/dl/html/malloc.html • 非常に良い実装だが、汎用的である →ゲーム用にカスタマイズする
7.
dlmalloc • 確保サイズごとにリストが用意されてい
る 確保サイズ(byte) チャンク 16 24 32 40 … 2^31
8.
ゲーム用メモリマネージャ •
キャッシュラインを意識する • 空き領域を検索しない • 高速なアロケート • デバッグの容易性 • バッファオーバーフローしても管理領域 が壊れにくい • フラグメンテーションが起きにくい
9.
管理領域 ✕
○ 確保領域A 確保領域A 管理領域A 確保領域B 確保領域B 管理領域A 管理領域B 管理領域B 確保領域Aがバッファオー 確保領域Aがバッファオー バーフローすると、管理領 バーフローしても、管理領 域を破壊してしまう 域は破壊されない →バグの追跡が困難になる
10.
フラグメンテーション • 大きなメモリアロケーションの中に小さ
なメモリアロケーションが混ざると発生 する 使用 空き alloc x2 free 空き 使用 使用 空き 空き
11.
フラグメンテーション対策 • ページングを活用する WindowsのVirtualAlloc() • VirtualAllocは処理が重いので、 多発する小さなメモリ確保には適さない →メモリ確保量によってアロケータを分 ける
12.
複数のアロケータ メモリ確保量(byte)
メモリ確保頻度 0 少ない Small Block Allocator 256 Medium Block Allocator 4096 Large Block Allocator 多い
13.
基本設計 • 各種アロケータはページ単位で動作する →x86を考えて4kbyte単位にする • ページ同士はリンクリストで管理する
14.
Small Block Allocator •
4kbyte/ページで構成 • 32byte/block • 1ページごとに 管理領域として1ブロック使用 →127ブロックの空き
15.
Small Block Allocator •
確保サイズごとにページを用意する 確保サイズ(byte) 16 24 32 40 … 256
16.
管理領域 • 32byte=1ブロック • ブロックの空き状態をビット列で管理す
る struct Header { uint32_t emptyBlockBit[4];//空きブロックのビットマスク uint32_t emptyBlockCount;//空きブロック数(ベリファイ用) uint32_t blockSize;//ブロックサイズ uint32_t* pPrePage;//前ページへのポインタ uint32_t* pNextPage; //次ページへのポインタ }
17.
alloc • 空きブロックのあるページを探す • 空きブロックがあるページが見つかったら、
空きブロックのビットマスクをスキャンして 確保アドレスを確定する → x86ならbsf命令が使える • 空きブロックが無かったらOSからページアロ ケーションする
18.
ページ管理 • 空き領域の有無でページのリンクリストを分
ける →空き領域を検索しない 空き領域無し 空き領域あり 16 16 24 24 32 32 … …
19.
free • freeするアドレスからページを算出する →管理領域を見つけられる
int32_t pageAddress=(address/4096)*4096; • 空きブロックがなくなったらOSにページ を返す
20.
パフォーマンス • x86のキャッシュラインは64byte → Small
Block Allocatorの管理領域は32byteな ので、キャッシュラインをまたがない • 1ページ 4kbyteなので、今時のL1キャッ シュに載る
21.
Medium Block Allocator •
16kbyte/ページで構成 • 128byte/block • 1ページごとに 管理領域として1ブロック使用
22.
Medium Block Allocator •
1ページで複数の確保サイズを扱う →メモリの利用効率を上げるため 確保サイズ(byte) 384 512 640 768 … 4096
23.
allocとfree • Small Block
Allocatorとほぼ同じ • allocは可変長のメモリサイズを扱っている ため、Small Block Allocatorよりは処理が重 め • freeは空きブロックがなくなったらOSに ページを返す
24.
ページ管理 • どれだけ空き領域があるかをリンクリス
トで管理する →空き領域のあるページを高速に探す 空き領域(byte) 0 128 256 384 …
25.
Large Block Allocator •
allocごとにページアロケーションする →大きなメモリ確保なので発生頻度が低い • シンプルなリンクリストで実装できる
26.
応用 • Small Block
Allocatorのアプローチで Mediumサイズのメモリ確保も行えるの では? • 1ブロックサイズをメモリ確保サイズに よって変えても良いのでは?
27.
まとめ • dlmallocなどの枯れたコードを参考にす
る • ページアロケーションでフラグメンテー ションを抑える • アロケーションサイズによってアルゴリ ズムを分けることで高速化する
28.
まとめ • メモリマネージャを扱ってみました • 良いメモリマネージャがあれば高レベル
ライブラリも使いやすくなります
29.
次のステップ • マルチスレッド化 http://www.gdcvault.com/play/1014602/Multic ore-Memory-Management-Technology-in • メモリデバッグツール
30.
Question?
31.
ご清聴ありがとうございました
Descargar ahora