2015/10/15(木)MATLAB 2015b での精度保証

INTLAB version 9の重要性 の記事で書いたように、マルチコアを持つPC (いまどきはほとんど全部そうですが) のmatlab上でintlabを使おうとすると、2012b以降は丸めの向きの変更が正しく行われずに精度保証が出来ない状態が続いていました。原因はこのバージョンから内蔵のIntel Math Kernel Libraryが変更されたことで、マルチスレッド計算を行うときに元スレッドの丸めモードを他スレッドに伝えなくなってしまったことによるものです。これを避けるため、
  • BLASを他のものに差し替える。速度は遅くなってしまうことが多い。
  • matlabを2012aで留めておく。
  • マルチコア使用を禁止し、シングルコアで動作させる。当然遅くなる。
のような対処が必要でした。

で、最近出たmatlab 2015bですが、Intel MKLが再び丸め変更が効くようになったという噂があり、3年ぶりにちゃんと精度保証の出来るmatlabになったかと期待されていました。しかし、Rump先生のテストによると結果は残念なものだったそうです。確かにIntel MKLはちゃんと動くようになったそうですが、今度は行列a, bに対する a .* b のような演算で丸め変更が効かなくなってしまったそうです。このような簡単な計算で外部のBLASを呼ぶとは考えにくく、恐らくこれはmatlab内部で完結した処理と考えられます。matlab自身でマルチスレッドでデータを分割して計算するような実装になっていて、そのとき他スレッドに丸めの向きの情報を伝えていないと予想されます。

たまたまうまく行っていた「他人のふんどしで精度保証する」方法論はそろそろ限界なんじゃないでしょうか。自分のコントロールできる範囲内の事柄で精度が保証できている証拠を構成するようにアルゴリズム全体を設計するべきだと思います。
OK キャンセル 確認 その他