Instance23以上では、Graphが重過ぎて64GBあるシステムに載りません。そこで圧縮して一旦Diskに保存し、使用時に伸張展開する方式としました。しかし、LZ4で圧縮してみると、圧縮率が75%程度と思わしくありません。そこで、ZSTDに切り替えてみました。すると50%程度と、2倍程度の圧縮率となりました。
void Roster::decompress_fm_disk() { string s = get_depth_map_filename(); ifstream fin(s.c_str(), ios::in | ios::binary); if (!fin) { throw std::runtime_error("can not open compressed file!\n"); return ; } char* src = new char[compressed_size]; char* dest = new char[decompressed_size]; uint64_t elements = decompressed_size / sizeof(uint64_t); void* eptr = my_alloc.allocate(sizeof(dd_struct_base_value),elements); dd_struct_base_value* zptr = reinterpret_cast(eptr); try { fin.read(src, compressed_size); } catch (...) { throw std::runtime_error("Read Error while reading compressed file.\n"); } fin.close(); int dest_size= ZSTD_decompress(dest,decompressed_size,src,compressed_size); if (!dest_size) { throw std::runtime_error("Read Error while reading compressed file.\n"); } assert(dest_size == decompressed_size);
シーケンシャルRead(6GB/sec)という高速SSDを用意してタスクマネージャで、観測してみると、なんと転送されている様子が観測できません。あっさりキャッシュされているという落ちでした。
なお、プレテストを行ってみたのですが、Instance22/23共、これまでのLBは、更新できました。
しかし、この現象は、メモリに比較的余裕があるInstance23のみの話です。Instance24では、載り切らないはずですので、観測できると思います。
0 件のコメント:
コメントを投稿