Island Life

< R6RSとR7RSのシンボル構文 | 眼鏡のつるはtemple >

2014/08/23

Gaucheでaobench再び

ShoyoさんのAmbient Occlusionベンチマーク、 以前 (5年以上前か!) に.mjtさんのR6RS Scheme移植を元にしてGaucheで走らせてみた ことがあったけど、改めて本家のcコードからGauche向けに移植してみた。git master をチェックアウトすればexamplesの下に入ってる。

https://github.com/shirok/Gauche/blob/master/examples/aobench.scm

手元のマシン (Core i7-3770 3.40GHz) でCバージョンと比較。

ao.c 0.74s (gcc -O2)
aobench.scm 8.57s

ふむ。約12倍か。悪くない…

というのは、嘘。実はaobench.scmはCPUコアをあるだけ勝手に並列に使うように 書いてあるので、Cはシングルスレッドだがaobench.scmは8スレッド並列だ。

チートなしで勝負すると:

aobench.scm (シングルスレッド) 33.2s

Cの45倍。まあこんなもんか。数値計算中心のコードはやっぱりJITじゃないと難しいかなあ。 (なお、シングルスレッドで走らせるには 環境変数GAUCHE_AVAILABLE_PROCESSORSを1にセットする)

それより8スレッドで4倍弱しか速くなってないのが気になる。 CPU使用率はほぼいっぱいいっぱいなのでmutexで待っているわけでもないとは 思うんだが…

あ、でも8コアってのは物理4コア * Hyperthreadingだったっけ。 FPUは4つしか無いんだから仕方ないかな。 なお4スレッド並列だとこのくらい。

aobench.scm (4スレッド並列) 10.1s

Tags: Programming, Gauche

Post a comment

Name: