Gauche > Archives > 2011/11/23

2011/11/23 10:50:09 UTCshinnya
#
http://d.hatena.ne.jp/Shinnya/20111120/1321788639のエントリを書いた者です。プロファイルをしてみたので、こちらに書かせて頂きます。
#
まず、もともとのプログラムは Mac OS X Lion(Darwin Kernel Version 11.2.0) で動かしていまして、homebrew 経由でインストールした Gauche を使っていました。バージョンは Gauche scheme shell, version 0.9.2 [utf-8,pthreads], i386-apple-darwin11.2.0 です。で、gosh に ptime オプションを付けて起動してみたのですが、プロファイリング結果が空でした。僕の環境ではプロファイリングはできないようです。
#
で、一応 Mac 上に VirtualBox で Debian/Squeeze な環境を作成してプロファイリングをしてみたので、そちらの結果を貼り付けます。
#
・Gaucheのバージョン
Gauche scheme shell, version 0.9 [utf-8,pthreads], x86_64-pc-linux-gnu

・プログラム
(use text.csv)

(define log-reader (make-csv-reader #\tab))

(define (log-file->list log-file-path)
  (call-with-input-file log-file-path
    (lambda (port)
      (port-map
       (lambda (ls) (list->vector ls))
       (lambda () (log-reader port))))))

(define (main args)
  (log-file->list "hoge.log"))

・入力データ
各行140バイト程度の197350行あるタブ区切りのcsvデータ
#
Profiler statistics (total 14715 samples, 147.15 seconds)
                                                    num    time/    total
Name                                                calls  call(ms) samples
---------------------------------------------------+------+-------+-----------
string-trim-right                                  5723150  0.0040  2280( 15%)
string-trim                                        5723150  0.0035  2016( 14%)
string-prefix?                                     5723150  0.0032  1806( 12%)
string-index                                       5723150  0.0029  1688( 11%)
make-string-pointer                                28615750  0.0005  1387(  9%)
(make-csv-reader make-csv-reader start)            5723150  0.0014   811(  6%)
%string-prefix-int                                 5723150  0.0013   726(  5%)
%maybe-substring                                   33944200  0.0002   670(  5%)
string-pointer-substring                           11446300  0.0005   616(  4%)
char=?                                             33467508  0.0002   568(  4%)
string-pointer-next!                               50834308  0.0001   323(  2%)
string-drop                                        5525800  0.0004   221(  2%)
string-length                                      11051600  0.0002   189(  1%)
string-take                                        5525800  0.0003   161(  1%)
(string-index pred)                                27744358  0.0001   159(  1%)
char-set-contains?                                 11446300  0.0001   159(  1%)
list->vector                                        197350  0.0079   156(  1%)
read-line                                           197351  0.0077   151(  1%)
string-pointer-prev!                               11446300  0.0001   146(  1%)
string-pointer-index                               11248950  0.0001   144(  1%)
char-set?                                          11446300  0.0001   113(  1%)
(string-trim-right pred)                           5723150  0.0002    86(  1%)
(string-trim
2011/11/23 11:04:17 UTCshiro
#
ありがとうございます。とても参考になります。あとOSX Lionでプロファイリングが出来ないという情報も重要です。こちらは他のOSXerの方たちにお尋ねしたいところ。
2011/11/23 11:06:13 UTCshinnya
#
すみません、途中で切れてしまったので、今更ですがWikiにページを作成して詳細なプロファイル結果をまとめておきます。
2011/11/23 11:09:04 UTCshiro
#
string-trim系は多用する手続きだからチューニング効果は高そうだ。
#
わざわざVM環境までセットアップして計測していただき、ありがとうございます。
2011/11/23 11:11:06 UTCshinnya
#
あと、もう一点気になることがありまして、上記方法でインストールした Mac OS X Lion の Gauche で、
#
(use gauche.time)
(time (car '(a b c d)))
#
を実行すると下記のエラーが出ます。
#
gosh: "error": failed to link /usr/local/Cellar/gauche/0.9.2/lib/gauche-0.9/0.9.2/i386-apple-darwin11.2.0/gauche--auxsys.so dynamically: dlopen(/usr/local/Cellar/gauche/0.9.2/lib/gauche-0.9/0.9.2/i386-apple-darwin11.2.0/gauche--auxsys.so, 10): Symbol not found: _environ
  Referenced from: /usr/local/Cellar/gauche/0.9.2/lib/gauche-0.9/0.9.2/i386-apple-darwin11.2.0/gauche--auxsys.so
  Expected in: flat namespace
 in /usr/local/Cellar/gauche/0.9.2/lib/gauche-0.9/0.9.2/i386-apple-darwin11.2.0/gauche--auxsys.so
2011/11/23 11:12:50 UTCshiro
#
ありゃenvironが無いのかな。
2011/11/23 12:54:38 UTC齊藤
#
そのエラーは他の人も遭遇してるみたいですね。
#
http://d.hatena.ne.jp/h6n/20110813/1313263907
2011/11/23 13:00:30 UTCshiro
#
ext/auxsys/auxsys.cの42行目をextern char **__environ; にしたらどうなりますかね > OSX Lionな方
2011/11/23 13:06:03 UTCkoguro
#
私の環境(MacOSX 10.7.2)だと、(time (car '(a b c d)) は動くようです。自分で0.9.2をコンパイルしたものです。
#
-ptime は、時間が全部0になっていますね。num callsは出てきます。
2011/11/23 15:01:02 UTCmaru
#
lolouila:maru% uname -a                                                     [~]
Darwin lolouila.local 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug  9 20:54:00 PDT 2011; root:xnu-1699.24.8~1/RELEASE_X86_64 x86_64
lolouila:maru% type gosh                                                    [~]
gosh is /opt/local/bin/gosh
lolouila:maru% gosh                                                         [~]
gosh> (gauche-version)
"0.9.2"
gosh> (use gauche.time)
#<undef>
gosh> (time (car '(a b c d)))
;(time (car '(a b c d)))
; real   0.000
; user   0.000
; sys    0.000
a
gosh>
#
MacOSX 10.7.2, MacPortsから入れたGauche 0.9.2でもエラーにはならない様子
2011/11/23 18:04:27 UTCshiro
#
homebrewとMacPortsってのは違うの?
2011/11/23 18:27:14 UTCmaru
#
http://mxcl.github.com/homebrew/ http://www.macports.org/
#
何でひとつのOSにパッケージマネジャが2つもあるんじゃい、という感じはありますがそれぞれ別のものです
2011/11/23 18:33:14 UTCshiro
#
ってことはhomebrewの方のビルドが何かやってるのかなあ。koguroさんはソースからコンパイルしてエラーが出てないから。
2011/11/23 18:49:47 UTCmaru
#
まずはHomebrewのビルドプロセス側を調べる必要がありそうです。
#
lolouila:maru% ./gosh -ftest                     [~/Downloads/Gauche-0.9.2/src]
gosh> (use gauche.time)
#<undef>
gosh> (time (car '(a b c d)))
;(time (car '(a b c d)))
; real   0.000
; user   0.000
; sys    0.000
a
gosh>
#
0.9.2のtarballから./configure; make; make checkしてno errorな状態で試してみましたがエラーは出ないです
2011/11/23 18:53:12 UTCayatoy
#
前に10.6.8(SnowLeopard)のhomebrewでビルドした時も同じエラー出たんで素直に自分でビルドした記憶が。
2011/11/23 18:54:08 UTCmaru
#
スミマセン。寝落ちします。
2011/11/23 21:31:47 UTCktgy1016
#
こんにちは。
homebrew はインストール時に gosh を strip していて、
どうもそれが原因ではないかと思われます。
自分でビルドした場合でも、src ディレクトリに降りて
% strip gosh
することで再現しました。
#
% cd src
% ./gosh -ftest
gosh> (use gauche.time)
#<undef>
gosh> (time (car '(a b c d)))
;(time (car '(a b c d)))
; real   0.000
; user   0.000
; sys    0.000
a
gosh>
% strip gosh
% ./gosh -ftest
gosh> (use gauche.time)
#<undef>
gosh> (time (car '(a b c d)))
*** ERROR: failed to link ../src/gauche--auxsys.so dynamically: dlopen(../src/gauche--auxsys.so, 10): Symbol not found: _environ
  Referenced from: /Users/ktgy1016/Downloads/Gauche-0.9.2/ext/auxsys/gauche--auxsys.so
  Expected in: flat namespace
 in /Users/ktgy1016/Downloads/Gauche-0.9.2/ext/auxsys/gauche--auxsys.so
Stack Trace:
_______________________________________
  0  (sys-times)
        [unknown location]