2021年11月10日水曜日

グラフ圧縮

 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 件のコメント:

コメントを投稿