# HG changeset patch # User tkaito@localhost.localdomain # Date 1248422888 -32400 # Node ID 73630476453a2ed465ddf1e159447a77dda3b5c0 # Parent cb0d89a35861446d3f9a079d0e569a16201be1ae See Changelog diff -r cb0d89a35861 -r 73630476453a TaskManager/ChangeLog --- a/TaskManager/ChangeLog Fri Jul 17 23:02:07 2009 +0900 +++ b/TaskManager/ChangeLog Fri Jul 24 17:08:08 2009 +0900 @@ -1,10 +1,46 @@ +2009-07-24 Kaito TAGANO + 長さ別の freeList と単一の HashTable で管理する + TileList を廃止 + class MemorySegment { + MemorySegment *next; + MemorySegment *prev; + uint64 size; + uint64 address; + uint64 dummy; + // uint32 data[0]; + } + + class MemList { + MemorySegment* first; + MemorySegment* last; + + MemList* createMemList(uint32 size, uint32 count); + void addFirst(MemorySegment* e); + void addLast(MemorySegment* e); + MemorySegment* getFirst(); + MemorySegment* getLast(); + boolean remove(MemorySegment* e); + void moveToFirst(MemorySegment* e); // or use(); + } + + サイズ毎に freelist と activelist を持って、これを malloc free + として使う。 + これのテストルーチンを書き終わったら、Tapestry をこれで書き直す + LRU は使うたびに以下を呼び出す + + void use(MemorySegment* e, MemList* active) { + active.remove(e); + active.addFirst(e); + } + + 2009-07-15 Yusuke KOBAYASHI PPU からMainMemory にResource を Access する API 長さ別の freeList と単一の HashTable で管理する set_rgb に相当。 - uint32 segment_id = smanager->get_segment(uint32 addr, uint32 size) + uint32 segment_id = smanager->get_segment(uint64 addr, uint64 size) id は hash値に相当。 smanager->put_segment(wait_id); diff -r cb0d89a35861 -r 73630476453a TaskManager/Test/test_render/Tapestry.h --- a/TaskManager/Test/test_render/Tapestry.h Fri Jul 17 23:02:07 2009 +0900 +++ b/TaskManager/Test/test_render/Tapestry.h Fri Jul 24 17:08:08 2009 +0900 @@ -84,7 +84,9 @@ /** * TileList 中の Tile の追い出しは、現在 FIFO で実装している - */ + * これは汎用のサイズ別 freelist に置き換える + * freelist は double linked list で、LRU をサポートする +*/ class TileList { public: int curIndex; diff -r cb0d89a35861 -r 73630476453a include/TaskManager/Task.h --- a/include/TaskManager/Task.h Fri Jul 17 23:02:07 2009 +0900 +++ b/include/TaskManager/Task.h Fri Jul 24 17:08:08 2009 +0900 @@ -13,16 +13,16 @@ BASE_NEW_DELETE(Task); int command; // 4 byte - ListDataPtr inData; // 4 byte - ListDataPtr outData; // 4 byte + ListDataPtr inData; // 4 byte 64bit であるべき + ListDataPtr outData; // 4 byte 64bit であるべき uint32 self; // 4 byte int param_size; // 4 byte int param[MAX_PARAMS]; // 4*MAX_PARAMS byte public: // functions - int add_inData_t(unsigned int addr, int size); - int add_outData_t(unsigned int addr, int size); + int add_inData_t(unsigned int addr, int size); // unsigned int ではなく 64bit + int add_outData_t(unsigned int addr, int size); // unsigned int ではなく 64bit int add_data(ListDataPtr list, unsigned int addr, int size); int add_param(int param);