SML#のプログラムにMassiveThreadsのオプションを付けるとパフォーマンスが低下する
SML# には最初からユーザレベルの細粒度スレッドライブラリ MassiveThreads のラッパーが提供されています。
Myth
ストラクチャを使ってプログラムを書き、環境変数 MYTH_NUM_WORKERS
で仕様コア数を指定するようです。
> 11.2 MassiveThreadsを用いた細粒度スレッドプログラミング‣ Chapter 11 SML#の拡張機能:マルチスレッドプログラミング ‣ Part II チュートリアル ‣ プログラミング言語SML#解説
この環境変数を通常のシングルスレッド向けの AObenchSML で設定みたところ、パフォーマンスが 60% ほど低下しました。
$ time ./aobench-smlsharp aobench-smlsharp.ppm
real | 0m11.233s |
---|---|
user | 0m9.969s |
sys | 0m1.417s |
$ time MYTH_NUM_WORKERS=0 ./aobench-smlsharp aobench-smlsharp.ppm
real | 0m18.210s |
---|---|
user | 1m10.984s |
sys | 0m2.163s |
4コアの環境で実行しています。user
(CPU時間)ではちょうど 18.210s * 4 ≒ 1m10.984s
ですね。
ランタイムの何かが無駄に同期しているんでしょうか? 謎です。