30-May-2018
[とりあえず]

dpboxをOpenBSD対応してみたのでGitHubに上げてみたんですが、現状はgmakeが通ってバイナリが得られるだけで、問題点は山積みです。

一応、OpenBSD-6.3/amd64で使われるgcc-4.2(gcc), gcc-4.9.4(egcc), clang-5.0.1(cc)で、多少は警告が減ったかな程度には手を入れています(これ以上減らすにはちょっと手がかかるので今のところは放置)。

gmake installによるインストールへの対応は未着手です。NetBSDのpkgsrcだと/usr/pkg/{bin,libexec,sbin,share}にファイルを置きますが、アンインストールの手間を考えると、当面は/usr/local/dpboxに全てを放り込む方が良さそうに思えます。

…それ以前に、dpboxってxfbbみたいにFWD-BBS用のホストプログラムという認識で良いんですよね?(ぉぃ)60.25kg(10:30)

21-May-2018
[とりあえず]

direwolfをOpenBSD対応してみたのでpull request投げてみたんですが(まだ採択されてないけど)、OSSだとうまく動かないのでPortAudio経由でsndioを叩くようにしています。

で、PortAudioからどういう風にOpenBSDのオーディオデバイスが見えてるのかなーというのが気になったので、こんなコードを書いて実行したら、こう。VMware Playerに突っ込んであるDebian9だとこんな感じ

なんとなく、PortAudio使わずにsndioネイティブで動くコードを書かないと駄目なんじゃないかなーという気がしているのですが…どうしましょうかね。59.10kg(22:25)

09-May-2018
[pcDuinoの性能を知るために(4)]

Intel Atom N270を載せたWindows XP時代のNetBook、こいつでdirewolfべんちまーくをしてみます。乱暴にまとめると、こんな感じ(Cortex-A7/A8は1008MHzでの話)

以下、数字の羅列。

secondsoptions
821.631-O0
378.707-O1
392.413-O2
391.555-O3
394.921-O3 -ffast-math
392.339-Ofast
394.921-O3 -ffast-math -march=pentium
251.894-O3 -ffast-math -msse
251.829-O3 -ffast-math -march=pentium -msse
251.872-O3 -ffast-math -march=pentium3
242.624-O3 -ffast-math -march=native
secondsoptions
988.789-O0
461.984-O1
471.872-O2
471.069-O3
475.150-O3 -ffast-math
472.299-Ofast
474.360-O3 -ffast-math -march=pentium
302.475-O3 -ffast-math -msse
302.433-O3 -ffast-math -march=pentium -msse
302.470-O3 -ffast-math -march=pentium3
291.487-O3 -ffast-math -march=native
secondsoptions
1236.788-O0
571.839-O1
590.306-O2
589.833-O3
594.362-O3 -ffast-math
590.499-Ofast
594.501-O3 -ffast-math -march=pentium
379.530-O3 -ffast-math -msse
379.335-O3 -ffast-math -march=pentium -msse
381.311-O3 -ffast-math -march=pentium3
365.824-O3 -ffast-math -march=native
secondsoptions
1652.112-O0
761.409-O1
787.467-O2
787.529-O3
792.929-O3 -ffast-math
787.936-Ofast
792.905-O3 -ffast-math -march=pentium
506.788-O3 -ffast-math -msse
506.860-O3 -ffast-math -march=pentium -msse
506.830-O3 -ffast-math -march=pentium3
489.724-O3 -ffast-math -march=native

イマドキのPC並みとは決して言えないものの、ある程度の性能があるボードが安く買えるというのは非常に恵まれた時代になったものだなあと月並みな感想を書いて、このシリーズは締めることにします。60.60kg(14:20)

05-May-2018
[pcDuinoの性能を知るために(3)]

もはやpcDuinoとは全然関係ないOrange Pi PC(Allwinner A20, Cortex-A8 + VFPv4 + NEON)でOpenBSD-6.3/armv7を動かして、direwolfべんちまーくを。

secondsoptions
8961.491-O3 -ffast-math
399.880-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfp
400.615-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfpv3
399.659-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfpv3-d16
329.392-O3 -ffast-math -mfloat-abi=softfp -mfpu=neon
329.060-O3 -ffast-math -mfloat-abi=hard -mfpu=neon
398.590-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfpv4
399.478-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfpv4-d16
328.698-O3 -ffast-math -mfloat-abi=softfp -mfpu=neon-vfpv4

pcDuinoやBanana Piと異なり、Orange Pi PCではU-Boot起動時にCPUの動作クロックが表示されないのでU-bootのメモリダンプを使ってCCUレジスタを見てみました

念のためpcDuinoのCCMレジスタも見てみます

Orange Pi PCとpcDuinoが同じ1008MHzのクロックで動いているようなので、今までのベンチマークからCortex-A7とCortex-A8のシングルコア動作におけるパフォーマンスの比較ができそうです。

二台目のI-O DATAEX-LD2071TBが届いたので、早速OpenBSD機に繋げて使っています(置き場所はどうにかなりました)。既にWindows機に繋げているのと同じモニタのはずなのに何故か慣れずに目が疲れるのですが、何故なんでしょう…?

30-Jun-2002から使用していたSONY SDM-M61には、長い間本当にお世話になりました。ありがとうございます。59.70kg(21:30)

04-May-2018
[pcDuinoの性能を知るために(2)]

ひたすらベンチマークです。pcDuino(Allwinner A10, Cortex-A8@1008MHz + VFPv3 + NEON)でOpenBSD-6.3/armv7、clang-5.0.1だとこんな感じ。-mfloat-abi=softfpを忘れると浮動小数点演算はソフトウェアでやることになるので恐ろしい結果になります。

secondsoptions
8636.517-O3 -ffast-math
1321.755-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfp
1320.601-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfpv3
1319.413-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfpv3-d16
301.106-O3 -ffast-math -mfloat-abi=softfp -mfpu=neon
303.458-O3 -ffast-math -mfloat-abi=hard -mfpu=neon

Banana Pi(Allwinner A20, Cortex-A7@912MHz + VFPv4 + NEON)でOpenBSD-6.3/armv7だと、こう。こちらも-ffast-math -mfpu=neonだと-mfloat-abi=softfpの指定が無いので浮動小数点演算はソフトウェアで以下略。

secondsoptions
10037.693-O3 -ffast-math -mfpu=neon
437.039-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfp
436.613-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfpv3
436.318-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfpv3-d16
358.505-O3 -ffast-math -mfloat-abi=softfp -mfpu=neon
357.988-O3 -ffast-math -mfloat-abi=hard -mfpu=neon
436.393-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfpv4
436.413-O3 -ffast-math -mfloat-abi=softfp -mfpu=vfpv4-d16
359.145-O3 -ffast-math -mfloat-abi=softfp -mfpu=neon-vfpv4

pcDuinoでDebian9.4(armhf)のベンチマークは前回も行っていますが、今回はThumb-2ではなくARMバイナリで再度ベンチマークしてみました。armhfというだけあって、-mfloat-abi=hard以外の選択肢は選べないようになっています(つまり、VFP/NEON無しの性能が分からない)。

secondsoptions
1564.475-O3 -ffast-math -mfloat-abi=hard -mfpu=vfpv3-d16 -marm
1564.331-O3 -ffast-math -mfloat-abi=hard -mfpu=vfp -marm
1562.674-O3 -ffast-math -mfloat-abi=hard -mfpu=vfpv3 -marm
332.503-O3 -ffast-math -mfloat-abi=hard -mfpu=neon -marm

結果を見る限りでは、なんとなくこんな感じに見えます。

Cortex-A7とCortex-A8の整数演算性能がどの程度違うのかは気になるのですが、Cortex-A7の場合はマルチコアで回せるので気にする意味が無いのかもしれません(とはいえ、現状のOpenBSD/armv7はコア一つしか使わないので多少は気になる)。

最近のweb pageは横幅を1024pxで表示することを前提にしているのが多いのか、SXGAのモニタ(相変わらずSONY SDM-M61)だと非常に手狭です。今回のベンチマーク祭りで大量のコンソールを開くのも非常に大変だったので、I-O DATA EX-LD2071TBをもう一台発注しました。細かすぎて使うのはしんどくまた二台も置く場所が無い気もしますが、どうにかするしかありません…58.60kg(21:25)

03-May-2018
[pcDuinoの性能を知るために]

例によってdistributed.net clientを動かしてベンチマークを取ろうとしていたのですが…armelとarm64はあるけどarmhfが無いので試しようがないという。比較用に取ったpcDuino以外のマシンでのベンチマークを晒してもなあ。

という訳で、pcDuinoでdirewolfべんちまーくをやってみます。コンパイラはDebian9.4のデフォルト、gcc-6.3.0です。

secondsoptions
3442.711-O0
1596.685-O1
1586.199-O2
1581.481-O3
1564.772-O3 -ffast-math
1567.096-O3 -ffast-math -mfpu=vfp
1564.577-O3 -ffast-math -mfpu=vfpv3
334.857-O3 -ffast-math -mfpu=neon
331.203-O3 -ffast-math -mfpu=neon -marm

プログラムの性格上、NEONが必須なのはそういうものとして…VFP関連のオプションがあってもなくてもあんまり速度が変わらないのは、省略時に-mfpu=vfpv3-d16が効いている可能性があります。とはいえ、Makefile.linuxに記されているRaspberry Pi (ARMv6 + VFP2)の結果の倍程度の時間がかかっているのは何かを大きく間違えているような気がするのですが…

折角なので、以前作ったOpenBSD向けのdiffを少しメンテナンスしてみました。とりあえずベンチマークが取れる程度のバイナリが得られる、辺りを目標にしているので実際にTNCとして運用することは二の次です。運用できるようにしたいけど。59.20kg(09:40)

04-May-2018補足:direwolfのdiff、OpenBSD/armv7でNEON/VFP命令が有効になるよう修正しました。旧版はこちら

16-May-2018補足:direwolfのdiff、色々直しています。一部のファイルのインストール先が/usr/shareとなっているのを/usr/local/shareとし、OSSだと動作がおかしいのでPortAudioを使ってsndio経由にしています。これで、AGWTerminalのActions→Connectで音が鳴るところまでは確認しています(受信動作については未テストです)。旧版はこちら