[JavaScript,PHP] スクリプト言語33 [Perl,Python]at TECH
[JavaScript,PHP] スクリプト言語33 [Perl,Python] - 暇つぶし2ch562:デフォルトの名無しさん
13/05/04 09:48:47.64
>>556で関数の戻り値の型を書くのを忘れてたので、

cdef int fib(int n):

に変えて実行してみたら、もっと速くなった


$ time python fibc2.py
39088169
python fibc2.py  0.08s user 0.01s system 95% cpu 0.098 total

563:デフォルトの名無しさん
13/05/04 09:54:22.94
C のコードはどこまで減らせるんだろうね
Python 界隈はそこらへんの問題に極めて意識的だけど

>>559
自分も別言語だと思う。Python のサブセットである RPython ならともかく

564:デフォルトの名無しさん
13/05/04 10:12:13.17
>>560-561
つまりCに変換できるようにしたTypeScriptみたいなもんじゃん
TypeScriptをCやasm.jsに変換したらそりゃ速いよ

>>562
これ最適化でコンパイル時に値を計算したっぽいな

565:デフォルトの名無しさん
13/05/04 10:15:36.41
>>564
> これ最適化でコンパイル時に値を計算したっぽい

print(fib(38))をコンパイルに含めずに
実行時にPython側からfib(38)を呼び出しても同じ

566:デフォルトの名無しさん
13/05/04 10:19:10.38
>>565
良く分からないんだけど、コンパイル時に計算していないのに、
Cの数十倍速いってこと?

ちょっと良く分からない現象だね
何かタネがあるんだろうけど

567:デフォルトの名無しさん
13/05/04 10:26:25.09
>>566
こちらの環境でC(gcc47 -O2)を実行した場合

$ time ./a.out
39088169
./a.out  0.25s user 0.00s system 99% cpu 0.257 total

568:デフォルトの名無しさん
13/05/04 10:27:02.43
>>566
こちらの環境でC(gcc47 -O2)を実行した場合

$ time ./a.out
39088169
./a.out  0.25s user 0.00s system 99% cpu 0.257 total

569:567
13/05/04 10:34:54.74
連投すまん
実行環境が違うのか、Cの速度も>>530と全然違うね
同じソースコードを使ったんだが

つまり、CPythonの速度がむちゃくちゃ遅い……?Python3.2なんだけど

570:デフォルトの名無しさん
13/05/04 10:51:19.53
最後に、比較用にnode.js(v0.10.4)

$ time node fib.js
39088169
node fib.js  1.06s user 0.03s system 100% cpu 1.080 total

571:デフォルトの名無しさん
13/05/04 11:06:43.12
なんだろう
Cの計算自体がすぐ終わりすぎて計測誤差が大きいのかな
何度もループさせないと駄目か

572:デフォルトの名無しさん
13/05/04 11:19:59.98
node.jsはCの4倍程度か
たいしてPythonは200倍か
遅すぎワロス

573:デフォルトの名無しさん
13/05/04 12:01:45.29
うちでもやってみた。Cython の使い方間違ってたら指摘してくれると助かる

% cat fib_c.c
#include <stdio.h>
int fib(int n) {
if (n < 2) return n;
return fib(n - 1) + fib(n - 2);
}
int main(void) {
printf("%d\n", fib(38));
return 0;
}
% gcc -o fib_c fib_c.c
% time ./fib_c
39088169
./fib_c 1.12s user 0.00s system 99% cpu 1.125 total

つづく

574:デフォルトの名無しさん
13/05/04 12:03:22.85
つづき

% cat fib_py.pyx
cimport cython
cdef fib(int n):
if n < 2: return n
return fib(n - 2) + fib(n - 1)
print(fib(38))

% cat setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("fib_py", ["fib_py.pyx"])]
)

% python setup.py build_ext --inplace
[...]

% time python -c "import fib_py"
39088169
python -c "import fib_py" 3.87s user 0.01s system 99% cpu 3.894 total

575:デフォルトの名無しさん
13/05/04 12:12:14.16
>>562みたいに、戻り値の型を書くともっと速くなる?

576:デフォルトの名無しさん
13/05/04 12:22:55.70
pythonが200倍遅いからって、他の言語に頼るとは、、、
python厨には失望した

577:デフォルトの名無しさん
13/05/04 12:25:49.15
>>575
うっかりしてた。戻り値記述して再トライ

% cat fib2_py.pyx
cimport cython
cdef int fib(int n):
if n < 2: return n
return fib(n - 2) + fib(n - 1)
print(fib(38))

% cat setup2.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("fib2_py", ["fib2_py.pyx"])]
)

% python setup2.py build_ext --inplace
cythoning fib2_py.pyx to fib2_py.c
[...]

% time python -c 'import fib2_py'
39088169
python -c 'import fib2_py' 0.56s user 0.02s system 99% cpu 0.577 total

% cat fib2_py.c
[...]
__pyx_r = (__pyx_f_7fib2_py_fib((__pyx_v_n - 2)) + __pyx_f_7fib2_py_fib((__pyx_v_n - 1)));

578:デフォルトの名無しさん
13/05/04 12:57:07.99
常識レベルの話として長いコードをここに貼るな
それがある外部リンクだけで良いから

579:デフォルトの名無しさん
13/05/04 13:01:53.10
node.jsより速いという結果は貼るな
遅かった場合だけ貼れ

580:デフォルトの名無しさん
13/05/04 13:13:35.96
cythonってpythonの拡張モジュール書いたりできるんだろ?
あれ、これってasm.jsという糞言語で高速化したいところを局所的に書けばいい
と言ってたのと同じじゃね。遅れてね?ただの後追いじゃね
で、asm.jsのコードと実行時間は?
なんかこのスレ見ても「できるらしい」とか「できるはず」とかいう胡散臭いレスが目立つけど
実際どうなの?

581:デフォルトの名無しさん
13/05/04 13:24:30.70
>>580
Pyrex が 2002 年でそこからフォークした Cython が 2007 年
後追いではないと思われ

582:デフォルトの名無しさん
13/05/04 13:34:55.32
「今JSが熱い!みんなが熱狂している!薔薇色の未来!」
って、他の言語が数年前に通った道なんだね…
Cに変換するか、Cから変換されるかって違いか。さて、どっちが速いかね

583:デフォルトの名無しさん
13/05/04 13:37:47.14
>>582
JSが熱いってそんなCに変換するだのなんだののくだらない狭い世界の話じゃないんだが
asm.jsを熱弁してる奴がいただけで、JS熱は別次元だよ
node.jsやweb用ライブラリ界隈で起こってる熱狂

584:デフォルトの名無しさん
13/05/04 13:37:56.28
>>582
> 「今JSが熱い!みんなが熱狂している!薔薇色の未来!」
> って、他の言語が数年前に通った道なんだね…

いや、その道は他の言語は通っていない(苦笑)

今の話の流れからは「型つけて速くしましょう」という
道しか通ってないだろう?

585:デフォルトの名無しさん
13/05/04 13:40:09.50
デスクトップアプリがWEB用アプリに置き換わりはじめてるから、
この流れは相当続くね
下手したらスマフォのネイティブアプリの領域も浸食しそうだし(ここはまだ不確定)

586:デフォルトの名無しさん
13/05/04 13:40:31.51
ああ、asm.jsの奴はJS的にもアレなので
あそこまで言うのならコードと実行時間くらい示してほしいが

587:デフォルトの名無しさん
13/05/04 13:44:24.21
ん?ちょっとまて
この流れはひょっとしてCythonが最強という事でよろしいか?

588:デフォルトの名無しさん
13/05/04 14:00:56.34
Cythonって静的型付け言語ってことでいいの?

589:デフォルトの名無しさん
13/05/04 14:02:44.37
ハイブリッド

590:デフォルトの名無しさん
13/05/04 14:33:20.50
node.jsって実行速度を自慢する割には、
静的に型付けした場合と比較するとゴミだな……

所詮は、他言語がepollやkqueueを使わない場合という
ハンデをつけた状況に限れば非同期処理が速いってだけのウンコか……

591:デフォルトの名無しさん
13/05/04 14:35:16.37
> node.jsって実行速度を自慢する割には、
またいつもの勘違いさんかw

592:デフォルトの名無しさん
13/05/04 14:45:32.92
静的型付け言語の下位と同じくらいだな
動的型付け言語としては十分自慢できるぐらい速い

593:デフォルトの名無しさん
13/05/04 14:56:24.24
要するに静的型付け言語が優れてるってことだよ。

スクリプト言語で気軽にかけるといっても
大規模になって、多く使われるようになってくると
結局その複雑度や速度に対応するために
静的型付け言語の機能が取り入れられていく。

JavaScript、Python、Basic(VB)、PHP


URLリンク(www.publickey1.jp)
HipHop Virtual Machineは、PHPを高速に実行するためにPHPのコードをC/C++に変換して
g++でコンパイルし、バイナリコードにするHiphop compiler(hphpc)と、PHP


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch