桃の天然水 このページをアンテナに追加

2016-06-22

[][][]WindowsUbuntuC++ WindowsのUbuntuでC++を含むブックマーク WindowsのUbuntuでC++のブックマークコメント

Problem 490で作ったごり押しコードをg++でコンパイルして動かしてみた。バージョンは4.8.4-2らしい。

このコードは本当に四則演算しか行っていない、STLも使っていない単純なものである。さすがにこれは速くならないと思ったら、

Win(MSVC)      2208s
Ubuntu(g++)     273s

なぜか8倍も速くなった。

2016-06-21

[][][]WindowsUbuntuPythonとPyPy(メモリサイズ) WindowsのUbuntuでPythonとPyPy(メモリサイズ)を含むブックマーク WindowsのUbuntuでPythonとPyPy(メモリサイズ)のブックマークコメント

メモリの使用量を見てみる。

まずはlistから。

#!/usr/bin/python

import time

a = [ n + 1 for n in xrange(10 ** 7) ]
time.sleep(10)
Python(Win)    160MB
PyPy(Win)       40MB
Python(Ubuntu) 320MB
PyPy(Ubuntu)    80MB

int64だから倍になるのはわかる。

#!/usr/bin/python

import time

dic = dict((n, n + 1) for n in xrange(10 ** 7))
time.sleep(10)
Python(Win)     430MB
PyPy(Win)       700MB
Python(Ubuntu)  870MB
PyPy(Ubuntu)   1150MB

これも同様だが、Ubuntuのdictは改善されているようだ。

2016-06-18

[][][]WindowsUbuntuPythonとPyPy(int32、double) WindowsのUbuntuでPythonとPyPy(int32、double)を含むブックマーク WindowsのUbuntuでPythonとPyPy(int32、double)のブックマークコメント

32ビットを超える整数UbuntuのPythonが速かったが、そうでない場合はどうだろう。簡単な例で確かめてみる。

#!/usr/bin/python

import sys
import time

def H(n):
    return sum(n / k for k in xrange(1, n + 1))

t0 = time.clock()
print H(10 ** 8)
print >>sys.stderr, time.clock() - t0
Python(Win)    7.4sec
PyPy(Win)      1.0sec
Python(Ubuntu) 6.0sec
PyPy(Ubuntu)   1.6sec

PyPyならWindows版の方が速いようだ。

ついでに浮動小数点数も。

#!/usr/bin/python

import sys
import time

def H(n):
    s = 0
    x = 0.0
    for k in xrange(1, n + 1):
        x += 1.0
        s += 1.0 / x
    return s

t0 = time.clock()
print H(10 ** 8)
print >>sys.stderr, time.clock() - t0
Python(Win)    11.7sec
PyPy(Win)       0.4sec
Python(Ubuntu)  7.9sec
PyPy(Ubuntu)    0.4sec