Julia が Python より約25倍速いとあるコード

とある集会で「Julia は速いぞ!」というアピールのために、Python と Julia で同じように書いているのに20倍以上速度の違うコードを見せました。ということを twitter で書いたところ反響があったので、ここに残しておきます。(もっと速いように書けるだろ出直せとか言わないでください)

環境は以下の通りです。

  • OS: Ubuntu 18.04.5 LTS
  • CPU: Intel(R) Core(TM) i3-6006U CPU @ 2.00GHz
  • メモリ容量: 8MB

Python と Julia のバージョンは以下の通りです。

  • python 3.7.6
  • julia version 1.4.2

以下がコードです。いずれも「10万以下の素数の個数を数えて出力する計算の時間を測定する」という処理です。

import time

def is_prime(num):
    if num <= 1:
        return False
    div = (num % i == 0 for i in range(2, num))
    return True not in div

def num_primes(maxnum):
    primes = [
        n
        for n in range(1, maxnum+1)
        if is_prime(n)
    ]
    return len(primes)

st_time = time.time()
print(num_primes(100000))
ed_time = time.time()
print(ed_time - st_time, "sec")
  • Julia
function is_prime(num)
    if num <= 1
        return false
    end
    div = (num % i == 0 for i = 2:num-1)
    return !(true in div)
end

function num_primes(maxnum)
    primes = [
        n
	for n = 1:maxnum
	if is_prime(n)
    ]
    return length(primes)
end

@time println(num_primes(100000))

ほぼ見た目は同じという風に感じるのではないかと思います。
それぞれコマンドラインpython hoge.py および julia hoge.jl で実行したところ

  • Python ... 66.83654356002808 sec
  • Julia ... 2.798068 sec

という結果になりました。速度は23.88...≒25倍です。ご参考までに。