Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
高度に最適化された移植可能  なメモリマネージャ    @DADA246
自己紹介• ゲームプログラマやってます• 得意分野 C++,C#,GPU,javascript,PHP• 低レベル係とか描画関係とかCIとかwebと  か• Steam、Origin、iPhoneで海外ゲームを遊ん  でいます
はじめに• 元ネタはGame Engine Gems2のA Highly Optimized Portable Memory Managerです• Kindle Editionが$55.92で買えます
アジェンダ•   ゲームでのメモリマネージャについて•   Small Block Allocator•   Medium Block Allocator•   Large Block Allocator
メモリマネージャ• メモリマネージャは重要• 悪いメモリマネージャは処理速度の低下  や、フラグメンテーションによるクラッ  シュを引き起こす→枯れたコードを参考にする→dlmalloc
dlmalloc• Doug Lea’s malloc• http://g.oswego.edu/dl/html/malloc.html• 非常に良い実装だが、汎用的である→ゲーム用にカスタマイズする
dlmalloc• 確保サイズごとにリストが用意されてい  る    確保サイズ(byte)   チャンク        16        24        32        40        …       2^31
ゲーム用メモリマネージャ•   キャッシュラインを意識する•   空き領域を検索しない•   高速なアロケート•   デバッグの容易性• バッファオーバーフローしても管理領域  が壊れにくい• フラグメンテーションが起きにくい
管理領域✕              ○    確保領域A          確保領域A    管理領域A                   確保領域B    確保領域B                   管理領域A    管理領域B   ...
フラグメンテーション• 大きなメモリアロケーションの中に小さ  なメモリアロケーションが混ざると発生  する                    使用          空き         alloc x2        free    空...
フラグメンテーション対策• ページングを活用するWindowsのVirtualAlloc()• VirtualAllocは処理が重いので、多発する小さなメモリ確保には適さない→メモリ確保量によってアロケータを分ける
複数のアロケータメモリ確保量(byte)   メモリ確保頻度     0          少ない                Small Block Allocator       256                Medium Blo...
基本設計• 各種アロケータはページ単位で動作する→x86を考えて4kbyte単位にする• ページ同士はリンクリストで管理する
Small Block Allocator• 4kbyte/ページで構成• 32byte/block• 1ページごとに管理領域として1ブロック使用→127ブロックの空き
Small Block Allocator• 確保サイズごとにページを用意する     確保サイズ(byte)         16         24         32         40         …        256
管理領域• 32byte=1ブロック• ブロックの空き状態をビット列で管理す  る   struct Header   {     uint32_t emptyBlockBit[4];//空きブロックのビットマスク     uint32_t e...
alloc• 空きブロックのあるページを探す• 空きブロックがあるページが見つかったら、  空きブロックのビットマスクをスキャンして  確保アドレスを確定する→ x86ならbsf命令が使える• 空きブロックが無かったらOSからページアロ  ケー...
ページ管理• 空き領域の有無でページのリンクリストを分  ける→空き領域を検索しない     空き領域無し    空き領域あり    16        16    24        24    32        32     …     ...
free• freeするアドレスからページを算出する→管理領域を見つけられる    int32_t pageAddress=(address/4096)*4096;• 空きブロックがなくなったらOSにページ  を返す
パフォーマンス• x86のキャッシュラインは64byte→ Small Block Allocatorの管理領域は32byteなので、キャッシュラインをまたがない• 1ページ 4kbyteなので、今時のL1キャッ  シュに載る
Medium Block Allocator• 16kbyte/ページで構成• 128byte/block• 1ページごとに管理領域として1ブロック使用
Medium Block Allocator• 1ページで複数の確保サイズを扱う→メモリの利用効率を上げるため      確保サイズ(byte)         384         512         640         768  ...
allocとfree• Small Block Allocatorとほぼ同じ• allocは可変長のメモリサイズを扱っている  ため、Small Block Allocatorよりは処理が重  め• freeは空きブロックがなくなったらOSに ...
ページ管理• どれだけ空き領域があるかをリンクリス  トで管理する→空き領域のあるページを高速に探す      空き領域(byte)         0        128        256        384         …
Large Block Allocator• allocごとにページアロケーションする→大きなメモリ確保なので発生頻度が低い• シンプルなリンクリストで実装できる
応用• Small Block Allocatorのアプローチで  Mediumサイズのメモリ確保も行えるの  では?• 1ブロックサイズをメモリ確保サイズに  よって変えても良いのでは?
まとめ• dlmallocなどの枯れたコードを参考にす  る• ページアロケーションでフラグメンテー  ションを抑える• アロケーションサイズによってアルゴリ  ズムを分けることで高速化する
まとめ• メモリマネージャを扱ってみました• 良いメモリマネージャがあれば高レベル  ライブラリも使いやすくなります
次のステップ• マルチスレッド化http://www.gdcvault.com/play/1014602/Multicore-Memory-Management-Technology-in• メモリデバッグツール
Question?
ご清聴ありがとうございました
Upcoming SlideShare
Loading in …5
×

高度に最適化された移植可能なメモリマネージャ

8,703 views

Published on

Published in: Technology
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

高度に最適化された移植可能なメモリマネージャ

  1. 1. 高度に最適化された移植可能 なメモリマネージャ @DADA246
  2. 2. 自己紹介• ゲームプログラマやってます• 得意分野 C++,C#,GPU,javascript,PHP• 低レベル係とか描画関係とかCIとかwebと か• Steam、Origin、iPhoneで海外ゲームを遊ん でいます
  3. 3. はじめに• 元ネタはGame Engine Gems2のA Highly Optimized Portable Memory Managerです• Kindle Editionが$55.92で買えます
  4. 4. アジェンダ• ゲームでのメモリマネージャについて• Small Block Allocator• Medium Block Allocator• Large Block Allocator
  5. 5. メモリマネージャ• メモリマネージャは重要• 悪いメモリマネージャは処理速度の低下 や、フラグメンテーションによるクラッ シュを引き起こす→枯れたコードを参考にする→dlmalloc
  6. 6. dlmalloc• Doug Lea’s malloc• http://g.oswego.edu/dl/html/malloc.html• 非常に良い実装だが、汎用的である→ゲーム用にカスタマイズする
  7. 7. dlmalloc• 確保サイズごとにリストが用意されてい る 確保サイズ(byte) チャンク 16 24 32 40 … 2^31
  8. 8. ゲーム用メモリマネージャ• キャッシュラインを意識する• 空き領域を検索しない• 高速なアロケート• デバッグの容易性• バッファオーバーフローしても管理領域 が壊れにくい• フラグメンテーションが起きにくい
  9. 9. 管理領域✕ ○ 確保領域A 確保領域A 管理領域A 確保領域B 確保領域B 管理領域A 管理領域B 管理領域B確保領域Aがバッファオー 確保領域Aがバッファオーバーフローすると、管理領 バーフローしても、管理領域を破壊してしまう 域は破壊されない→バグの追跡が困難になる
  10. 10. フラグメンテーション• 大きなメモリアロケーションの中に小さ なメモリアロケーションが混ざると発生 する 使用 空き alloc x2 free 空き 使用 使用 空き 空き
  11. 11. フラグメンテーション対策• ページングを活用するWindowsのVirtualAlloc()• VirtualAllocは処理が重いので、多発する小さなメモリ確保には適さない→メモリ確保量によってアロケータを分ける
  12. 12. 複数のアロケータメモリ確保量(byte) メモリ確保頻度 0 少ない Small Block Allocator 256 Medium Block Allocator 4096 Large Block Allocator 多い
  13. 13. 基本設計• 各種アロケータはページ単位で動作する→x86を考えて4kbyte単位にする• ページ同士はリンクリストで管理する
  14. 14. Small Block Allocator• 4kbyte/ページで構成• 32byte/block• 1ページごとに管理領域として1ブロック使用→127ブロックの空き
  15. 15. Small Block Allocator• 確保サイズごとにページを用意する 確保サイズ(byte) 16 24 32 40 … 256
  16. 16. 管理領域• 32byte=1ブロック• ブロックの空き状態をビット列で管理す る struct Header { uint32_t emptyBlockBit[4];//空きブロックのビットマスク uint32_t emptyBlockCount;//空きブロック数(ベリファイ用) uint32_t blockSize;//ブロックサイズ uint32_t* pPrePage;//前ページへのポインタ uint32_t* pNextPage; //次ページへのポインタ }
  17. 17. alloc• 空きブロックのあるページを探す• 空きブロックがあるページが見つかったら、 空きブロックのビットマスクをスキャンして 確保アドレスを確定する→ x86ならbsf命令が使える• 空きブロックが無かったらOSからページアロ ケーションする
  18. 18. ページ管理• 空き領域の有無でページのリンクリストを分 ける→空き領域を検索しない 空き領域無し 空き領域あり 16 16 24 24 32 32 … …
  19. 19. free• freeするアドレスからページを算出する→管理領域を見つけられる int32_t pageAddress=(address/4096)*4096;• 空きブロックがなくなったらOSにページ を返す
  20. 20. パフォーマンス• x86のキャッシュラインは64byte→ Small Block Allocatorの管理領域は32byteなので、キャッシュラインをまたがない• 1ページ 4kbyteなので、今時のL1キャッ シュに載る
  21. 21. Medium Block Allocator• 16kbyte/ページで構成• 128byte/block• 1ページごとに管理領域として1ブロック使用
  22. 22. Medium Block Allocator• 1ページで複数の確保サイズを扱う→メモリの利用効率を上げるため 確保サイズ(byte) 384 512 640 768 … 4096
  23. 23. allocとfree• Small Block Allocatorとほぼ同じ• allocは可変長のメモリサイズを扱っている ため、Small Block Allocatorよりは処理が重 め• freeは空きブロックがなくなったらOSに ページを返す
  24. 24. ページ管理• どれだけ空き領域があるかをリンクリス トで管理する→空き領域のあるページを高速に探す 空き領域(byte) 0 128 256 384 …
  25. 25. Large Block Allocator• allocごとにページアロケーションする→大きなメモリ確保なので発生頻度が低い• シンプルなリンクリストで実装できる
  26. 26. 応用• Small Block Allocatorのアプローチで Mediumサイズのメモリ確保も行えるの では?• 1ブロックサイズをメモリ確保サイズに よって変えても良いのでは?
  27. 27. まとめ• dlmallocなどの枯れたコードを参考にす る• ページアロケーションでフラグメンテー ションを抑える• アロケーションサイズによってアルゴリ ズムを分けることで高速化する
  28. 28. まとめ• メモリマネージャを扱ってみました• 良いメモリマネージャがあれば高レベル ライブラリも使いやすくなります
  29. 29. 次のステップ• マルチスレッド化http://www.gdcvault.com/play/1014602/Multicore-Memory-Management-Technology-in• メモリデバッグツール
  30. 30. Question?
  31. 31. ご清聴ありがとうございました

×