2008-12-19
■SFCの新しいサイトがひどいので
HTML だけ表示するぐりもんを作ってみた。
http://userscripts.org/scripts/show/38907
すぐに戻すらしいのであんまり意味ないスクリプトだと思いますが...
http://fumi.me/2008/12/19/answer-from-sfc/
追記:HTML版が用意されるようになったので必要なくなりましたが、このスクリプトをインストールしてFlash版にアクセスすると一応つかえます。Flash版もだいたいのページはHTMLを読み込んでいるだけなのが分かります。ここまでHTMLのコンテンツを用意しておきながら、何故最終的にFlash以外のブラウザやクローラを完全に排除してしまったのでしょうか・・
2008-12-15
■iPhone アプリのダウンロード数集計スクリプト
iPhone アプリのダウンロード数を集計してくれるアプリがいろいろあるそうです。
http://www.sonasphere.com/blog/?p=964
ただ、プログラマとしてはやはりマウスでカチカチして結果を見るよりは Terminal 上で集計して、あとでいろいろ再利用できるテキストファイルとして出力したいものです。というわけで、これまで PocketGuitar のダウンロード数を集計するのに使っている簡単なスクリプトを github に置いてみました。1日ごとのダウンロード数と国別の割合の集計ができます。
http://github.com/kasatani/iphone-stats/tree/master
ただし、まだ1つしかアプリを公開していないので複数のアプリに対応してませんので、適当に改良しちゃってください・・オプションでアプリケーション名を渡すとフィルタしてくれるようなのがいいのかな。
2008-10-31
■[iPhone] 浮動小数点演算の高速化
ぼちぼち iPhone 開発ネタも書いていこうかと。
浮動小数点演算をバリバリ行うようなコードではコンパイラのオプションで Compile for Thumb (-mthumb) を無効にすると速くなるらしいので、実際どんなもんだろうと思ってベンチマークを取ってみました。
ソースはこんな感じで、float と int のかけ算の処理をループさせたときの実行時間を測定しています。
#define CYCLES 100000000 void fp_test() { float a = 0.0000001f; float b = 1.0000001f; CFAbsoluteTime t1 = CFAbsoluteTimeGetCurrent(); for (int i = CYCLES; i >= 0; i--) { a = a * b; } CFAbsoluteTime t2 = CFAbsoluteTimeGetCurrent(); NSLog(@"%f seconds - %f", t2 - t1, a); } void int_test() { int a = 3; int b = 1234567; CFAbsoluteTime t1 = CFAbsoluteTimeGetCurrent(); for (int i = CYCLES; i >= 0; i--) { a = a * b; } CFAbsoluteTime t2 = CFAbsoluteTimeGetCurrent(); NSLog(@"%f seconds - %d", t2 - t1, a); }
iPhone 3G でやってみた結果(処理にかかった秒数)はこんな感じです。float の場合 thumb を無効にすることで 5 倍近くも速くなってますね。
| float | int | |
| Thumb | 9.63 | 1.74 |
| ARM | 1.99 | 1.24 |
ARM のアセンブリなんて書いたことないのですが、なんとなく読んでループの部分のコードを見てみるとこんなかんじです。ARM(Thumb 無効)の場合は fmuls でかけ算を行うのに対し、Thumb では mulsf3vfp というコードに飛んでいます。(実際には mulsf3vfp$stub で何か準備をして mulsf3vfp に飛んでいます。Thumb から ARM に切り替えるための処理?)
ARM
L2: LBB2: LM4: subs r3, r3, #1 LM5: fmuls s16, s16, s15 LM6: bne L2
Thumb
L2: LBB2: LM3: add r0, r5, #0 ldr r1, L9+8 blx L___mulsf3vfp$stub sub r4, r4, #1 add r5, r0, #0 LM4: cmp r4, #0 bne L2
mulsf3vfp のソースっぽいのはここにあるので見てみると、以下のように fmuls を呼び出しています。
http://www.opensource.apple.com/darwinsource/iPhone2.1/gcc-5488/gcc/config/arm/ieee754-sf.S
/* APPLE LOCAL begin ARM 4702983 provide VFP versions (callable from Thumb). */ #ifndef NOT_DARWIN #if __ARM_ARCH__ > 5 #ifdef L_mulsf3vfp ARM_FUNC_START mulsf3vfp fmsr s14, r0 fmsr s15, r1 fmuls s13, s14, s15 fmrs r0, s13 RET FUNC_END mulsf3vfp #endif
というわけで、Thumb でも FPU が使われていることには変わりないものの、関数呼び出しが行われる分のオーバーヘッドがでかいみたいですね。
それから float だけでなく int も ARM のほうが若干速くなってるので見てみると、次のようになっています。ARM のほうは sub のかわりに condition flag が更新される subs が使われていて、これによって条件分岐の cmp が省略できてるみたいですね。
ARM
L12: LBB3: LM13: subs r3, r3, #1 LM14: mul r4, r2, r4 LM15: bne L12
Thumb
L12: LBB3: LM10: sub r3, r3, #1 mul r4, r4, r2 LM11: cmp r3, #0 bne L12
というわけでヘビーな演算を行うアプリケーションで Thumb を無効にするのはかなり効果が大きそうです。もちろん、これはあくまで細かいベンチマークであって、デフォルトの Thumb のほうは命令が 16 ビットに圧縮されてコードは小さくなるというメリットがあるので、実際のアプリケーションのパフォーマンスが上がるかどうかははベンチマークを取ってみて本当に必要かどうか判断されるのが良いでしょう。
それから iPhone よりも速いという噂の iPod touch 2nd gen で試してみたところこんな感じでした。確かに 1.3 倍くらい速いです。
| float | int | |
| Thumb | 7.20 | 1.33 |
| ARM | 1.51 | 0.95 |
参考までに MacBook Pro (Core 2 Duo 2.4GHz) のシミュレータで動かした場合は以下のような結果でした。
| float | int |
| 0.45 | 0.14 |
mac
今回の題と違って、申し訳ないのですがアプリのギターの基本音量を上げていただけないでしょうか? (音楽に負けないぐらい)
kstn
macさん>設定画面で音量を最大にしてもまだ足りない感じでしょうか?以前ディストーションの音量を上げすぎてiPhoneのスピーカーを壊したという方もいらっしゃるらしいので慎重に検討したいと思います。
koba
初めまして。
Thumbでは直接FPUの命令を実行できないので、一度ARMモードに切り替える必要があるのですね。そのためこの部分がライブラリ化されているのでしょう。
ARMv7のthumb2になるとFPU命令も直接実行できるようになります。
tentoo
わー、ありがとうございます。浮動小数点演算がクロック並みに反映されてないなぁと思ってたら、こんな仕掛けがあったんですね。助かりましたー。
2008-10-27
■WEB+DB PRESS Vol.47
発売までに紹介しておこうと思いつつ遅れてしまいましたが、WEB+DB PRESS Vol.47 で Objective-C の入門記事を書きました。
これから iPhone アプリでも作ろうかという方に Objective-C と Cocoa の雰囲気だけでもつかんでいただければと思います。自分なりにエッセンスをいくつか収めたつもりですが、わずか8ページなので、より深く理解したい方は荻原本(詳解 Objective-C 2.0)なり Apple のドキュメントなりを読んでくださいね :)


ぜひ頑張ってください!
今度クッキー食べに行きます。
堅いクッキーが好きです。
奥さんにも会ってみたいです。
みなさんありがとう!
クッキー屋さんがんばってください!!
クッキー どこで買えるんだ??
iPhoneからでした 買えないって本当か?
俺はまだドコモなんだ。。
まだ始めたばかりなのでいまのところはイベントに出店してるだけですー
クッキー屋楽しみにしています。
あやつれないんだ。
どーよ、最近の調子は。俺は冬以外は 蟹の季節じゃないんで
わりと、のんびりしてます。