yukiregista / ConsensusProj

MIT License
2 stars 0 forks source link

DISTのメモリ削減 #34

Open yukiregista opened 3 months ago

yukiregista commented 3 months ago

Normalize前ならDISTの値は0..nの整数のはずなので、n<=255 の時は numpy の uint8, それ以外は uint 16 を使うなどしてメモリ削減 。-> サイズ 1/4に? 同時に下(or 上)三角行列にもする。-> サイズ1/2に?

yukiregista commented 3 months ago

n=2^9-1 (-2?) までuint8で工夫してできるはず (DISTがn/2以上の場合はアルゴリズム的には意味のないエントリーなので、n/2に設定するなどすれば良い)

yukiregista commented 3 months ago

np.intx型は、そのままだとoverheadがかなり大きい。 以下の例だと、4bytesのinteger->28 bytes, 1byteのinteger->25 bytesになっていて、Pythonのoverheadが24 bytesもある

>>> d = np.int32(10)
>>> d.__sizeof__()
28
>>> d = np.int8(10)
>>> d.__sizeof__()
25

一方で、numpy arrayの要素を一つ増やしても、その分だけしかメモリが変わらない(のでやはり型を変えるメリットはありそう)

>>> a = np.array([1], dtype=np.int8)
>>> a.__sizeof__()
113
>>> a = np.array([1,2], dtype=np.int8)
>>> a.__sizeof__()
114
>>> a = np.array([i for i in range(20)], dtype=np.int8)
>>> a.__sizeof__()
132
yukiregista commented 3 months ago

例えば1000trees, 100taxaで全ての枝が異なるとしたら、大体 $(1000 \times 100)^2 \times 8 = 80GB$とかになる計算。確かにこれだと(PythonにしろCにしろ)無理。