アカウント名:
パスワード:
デモ [phoboslab.org]は、1.8MBのMPEG1(18秒、570フレーム)iPhone5で、320x240のMPEG1が30fpsで再生できる軽さ
ソースコード [phoboslab.org]をざっと見たところ、特に高速化をがんばっているわけでもなく非常に素直に実装されてるように見えます。MPEGの教科書本でも片手に読めばアルゴリズムの勉強になりそうなくらい。それでも普通に動画として見られるくらい、JavaScriptエンジンの性能が上がってるってことなんですね。
JSエンジンの最適化を熟知している人のコードですね
JavaでもJVMの実装に詳しく、見かけはごく素直でシンプルなのに滅法速いJavaコードを書く人がいましたなぜか他人にはなかなか真似できないんですよね
俺もこれはわりと素直なコードに見えるんだけど、『JSエンジンの最適化を熟知している』ってのはどこでわかるものなの?『JSエンジンの最適化を熟知している』って言われるようなコードを俺も書きたいんだけどな
例えば、jsmpeg.prototype.copyMacroblock関数ではoddHとoddVの組み合わせで4通りそれぞれにループがありますが、gccなどではマスク演算などを使いベクトル化したほうが速くなると思います
JSでは for( var x = 0; x < 16; x++ ) { this.currentY[dest] = (Y[src] + Y[src+1] + 1) >> 1; dest++; src++; }Y[src+1]は次の繰り返しでY[src]としてまた読み出されますが、実行パスに沿った最適化を行うコンパイラでは、ループが自動的にアンロールされ、二回のメモリ読み出しは共通部分式として一回にまとめられるんじゃないかと思います
訂正
> 実行パスに沿った
実行トレースに沿った、です
静的なパスに実行頻度で重みづけして最適化するのがHotSpot VMタイプで、実行した命令トレースに基づいて最適化するのがTamarinなどのTracing JITタイプです
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア
タレコミ補足 (スコア:2, 参考になる)
デモ [phoboslab.org]は、1.8MBのMPEG1(18秒、570フレーム)
iPhone5で、320x240のMPEG1が30fpsで再生できる軽さ
Re:タレコミ補足 (スコア:4, 参考になる)
ソースコード [phoboslab.org]をざっと見たところ、特に高速化をがんばっているわけでもなく非常に素直に実装されてるように見えます。MPEGの教科書本でも片手に読めばアルゴリズムの勉強になりそうなくらい。
それでも普通に動画として見られるくらい、JavaScriptエンジンの性能が上がってるってことなんですね。
Re: (スコア:0)
JSエンジンの最適化を熟知している人のコードですね
JavaでもJVMの実装に詳しく、見かけはごく素直でシンプルなのに滅法速いJavaコードを書く人がいました
なぜか他人にはなかなか真似できないんですよね
Re: (スコア:0)
俺もこれはわりと素直なコードに見えるんだけど、『JSエンジンの最適化を熟知している』ってのはどこでわかるものなの?
『JSエンジンの最適化を熟知している』って言われるようなコードを俺も書きたいんだけどな
Re:タレコミ補足 (スコア:4, 興味深い)
例えば、jsmpeg.prototype.copyMacroblock関数ではoddHとoddVの組み合わせで4通りそれぞれにループがありますが、
gccなどではマスク演算などを使いベクトル化したほうが速くなると思います
JSでは
for( var x = 0; x < 16; x++ ) {
this.currentY[dest] = (Y[src] + Y[src+1] + 1) >> 1;
dest++; src++;
}
Y[src+1]は次の繰り返しでY[src]としてまた読み出されますが、実行パスに沿った最適化を行うコンパイラでは、ループが自動的にアンロールされ、
二回のメモリ読み出しは共通部分式として一回にまとめられるんじゃないかと思います
Re: (スコア:0)
訂正
> 実行パスに沿った
実行トレースに沿った、です
静的なパスに実行頻度で重みづけして最適化するのがHotSpot VMタイプで、
実行した命令トレースに基づいて最適化するのがTamarinなどのTracing JITタイプです