- JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
268 :デフォルトの名無しさん[sage]:2016/06/27(月) 00:33:14.94 ID:n3Kagte5 - TypedArrayとasm.jsの状況について詳しい人居る?
現在アプリにもっさり感がある。それであちこち修正したのだが、 ChromeDevTools/Profiles/CPU PROFILESで(program)が70-90%なのでJS側での速度改善はほぼ頭打ちだ。 そこで無理やり使用メモリを減らして速度向上させようとしている。 なお、評価はchromeで行っている。 JSのArrayは例えば [0,0,0] なら 16(header)+8*4(contents) = 48 Bytes になるようだ。 一つ中身が多いのは多分length分だろう。 元々オブジェクトだった物(26+88=116Byte)を強引にArrayに変えてこれを実現した。(項目も減らした) ただ実際は struct { Int32, Int32, Int64 } なので本当は 16 + 4+4+8 = 32 になって欲しい。 そこで質問なのだが、 ・asm.js 的記述(代入時に全部 |0 )したらメモリ確保も32bitになるかどうか ・TypedArrayの状況 を知りたい。 通常asm.jsは速度面ばかり話に出ていて、メモリ面の話が無い。 とはいえJITだと普通は無理だと思ので、 他の含めて何らかの方法でメモリ確保量を減らす方法を知っていればよろしく。 以下を見る限り、そういう用途向けではなさそうだが。 http://www.h2.dion.ne.jp/~defghi/asmjs/asmjs.htm TypedArrayは使用メモリ自体は確実に減らせるはずだが、速度が異常に遅いのが気になっている。 以下で俺の環境だとざっくり7/7/100+/300+(以降全部)とかだ。 http://jsdo.it/sapphire_al2o3/sPa5 余計もっさりするようでは意味無い。試したことがある人は居るかい? ググッたが、TypedArrayについては軒並み記事が古く、しかもやはり「遅い」という物が多い。
| - JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
270 :デフォルトの名無しさん[sage]:2016/06/27(月) 01:40:09.28 ID:n3Kagte5 - 一応全体的に遅いということなのでそうだと勝手に思っていた。古いが以下。
http://blog.livedoor.jp/abars/archives/52103965.html とりあえず確かめてみた結果、読み書きは1.5倍程度遅い。 許容範囲かといわれれば微妙だな、、、、 なおデータがなかなか安定しなかったので、若干怪しい。 サイズは俺が使う予定の1000にした。 このサイズなら確保との差が見えないが、オリジナルのサイズ(1.6M)だと見えていた。 function testArray(data, n, iter, start) { var time_enter = Date.now(); for(var j=0;j<iter;j++) for(var i = 0; i < n; i++) data[i] = i & 0xFFFFFFFF; var now = Date.now(); return [now-time_enter, now-start]; } function check(iter){ var start = Date.now() console.log('array: '+testArray(new Array(count), count, iter, start)); start = Date.now(); console.log('Int32Array: '+testArray(new Int32Array(count), count, iter, start)); } var count = 1000; for (var i=100;i<100000000;i*=10) check(i);
| - JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
271 :デフォルトの名無しさん[sage]:2016/06/27(月) 01:40:47.25 ID:n3Kagte5 - array: 1,2
Int32Array: 2,2 array: 2,2 Int32Array: 4,4 array: 22,22 Int32Array: 35,35 array: 235,235 Int32Array: 369,369 array: 2544,2544 Int32Array: 3665,3665 array: 24831,24831 Int32Array: 36757,36757
| - JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
272 :デフォルトの名無しさん[sage]:2016/06/27(月) 02:01:59.30 ID:n3Kagte5 - しかしどうやっても Int64 を生成できないのが問題だ。
実装としてはInt64を使わずにdouble64なのかな? だったら変換が毎回発生せずに済むからいいけど。
| - JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
279 :デフォルトの名無しさん[sage]:2016/06/27(月) 23:12:26.18 ID:n3Kagte5 - >>275
今回は保存用(内部保持データ)なのでそれは使えない。 >>276 > 半年以内の記事でないと評価に値しない。 それはそうだが実際に遅い。 FF(47.0)でも試したが、上記ほどの差はなく、ほぼ1倍だった。 絶対値としては両方ともchrome(50.0.2630.1 canary SyzyASan)のInt32Arrayとほぼ同じで、 chromeのarrayが速いだけのようだ。 なお古いchrome(49.0.2623.112 beta-m)でも試したが傾向は同じ。(ただし全体的になぜか5倍ほど遅い) とりあえず環境によるのかもしれないので、>>270の結果(>>271)を環境とともに貼ってくれれば助かる。 コピペすればそのまま実行できる。当たり前だが数字が大きい方が遅い。 なお>>271はchrome(50.0.2630.1 canary SyzyASan) + Vista だ。 > そして確かにasm.jsベースで書けば理論的には最大パフォーマンスに近いものが作れるだろう いや、だからそれは「局所的」速度の話だろ。 俺は「全体的」速度を上げようとしている。 不要なオブジェクト生成はしていないので、メモリ攪拌はない。 ただし、どうしてもキャッシュミスは多いはずなので、これを改善しようとしている。 アクセスは150個単位で行われるため、TypedArrayにまとめてしまえばキャッシュヒットするようになる。(はず) https://sites.google.com/site/shunichisnote/translations/data-oriented-design ただ、今はそれ以前の段階で、全体的なメモリ使用量を削減しようとしている。
|
|