黒木玄 Gen Kuroki is a user on mathtod.online. You can follow them or interact with them if you have an account anywhere in the fediverse. If you don't, you can sign up here.

vs.

zverovich.net/2016/05/13/givin
Giving up on Julia

の人が "but we already know how to make them fast in Python and other languages." と書いて

ibm.com/developerworks/communi
How To Make Python Run As Fast As Julia

を引用していたので、自分なりに検証してみました。

全部試すのは大変なのでFibonacci数の再帰呼び出しを使わない単純なコードのみを試した。

PythonではCythonを使うとかなりのスピードアップが可能なんですね!とても参考になりました。

しかし、Julia側の工夫を何もしていないコードよりも4倍以上遅かったです。

続く

vs.

論よりコード!

JuliaとPythonで使ったコードは

gist.github.com/genkuroki/a182

で公開してあります。Python側のコードは

gist.github.com/jfpuget/b53f1e

と完全に同じです。

fib(20)の計算

Python: 70ns
Julia: 12ns

fib(30)の計算

Python: 78ns
Julia: 18ns

Juliaの方が4倍以上速いです。

Python側ではCythonを使ったりして高速化されたコードを使っています。

それに対して、Julia側のコードでは何も工夫してありません。

Juliaは最初から速度重視で設計された高級言語なので、それに速度面で喧嘩を売るのは相当に苦しいのではないか?

and

なんとなくなんですが、「Pythonしか使う気がない」という感覚の人達は Julia のような新しい言語が出て来ることに脅威を感じているように見えます。

科学技術に携わる人はそういうことじゃいけないと思うですけどねえ。新しい技術が出て来ることは歓迎しないと。

そういう人達がきちんと検証せずに「PythonでもJulia並の速さを比較的容易に出せる」というようなデマを流しているように見える。

Julia側で対応するコードを走らせる人が出て来るとすぐにばれるようなおかしなことを堂々と述べていたりする。

一方、Juliaを使っている人たちは、PythonやRのなどの既存の資源をありがたく使うという方針に見える。

複数の言語の資源を有効に利用する方が私は合理的だと思います。

Juliaを使って高速計算の講義をしている Steven G. Johnson さんもPythonライブラリのPyPlotをJuliaで使っています。私もおすすめ。

github.com/stevengj/18S096-iap

しかし、Cythonは速かったです!

再帰呼び出し版のフィボナッチ数の計算ではJuliaよりも2割ほど速かったです!

速度重視の場面では再帰呼び出しのコードは書かないのですが、それでもこういうことが分かったのは収穫だったと思っています。

Pythonでforループをどうしても大量に回さなければいけない場合にはCythonを使った方がよさそうです。

でも、PythonのコードがそのままCythonで走るわけではないので、要求されるプログラミングスキルは結構上がるような気がしました。

私のようにプログラミング・スキルが低レベルのユーザーであっても、素早く計算してくれる Julia の存在はやはりありがたいです。

黒木玄 Gen Kuroki @genkuroki

我々のmathtodonにおける経験で判明したことは、 gcc でJuliaに速度面で勝つためには相当に非自明なコードを書かなければいけないということ。

そして、Cythonの速さは実質的に C の速さです。

非自明なコードを C で直接書かずに、Cython で単純なコードをコンパイルして使っても、Juliaに速度面で勝てないのは予想通りの結果でした。

ところで、

Julia側からPythonのライブラリを使うのは易しいです。ほとんどPythonの存在を意識せずに使えるくらい簡単。

Python側からJuliaを気軽に呼び出して使える機能はすでに実装されているのでしょうか?

ちょっと検索しても見つからない。キーワードがわからない。

· Web · 0 · 2