0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2つの関数が同じ入力なら同じ結果を返すことを保証するテストフレームワーク(8)

0
Posted at

前回の記事で設計したToukaテストフレームワークを実際に作っていきたい。

まずは、ランダムな__m128を生成するモジュールを定義する。通常のシミュレーションのように「高速にそれっぽい分布を作る」のではなく、「コンパイラ最適化やハードウェアの挙動の違い(バグ)を炙り出す」ための戦略が必要である。イントリンジックの移植において、最もバグが混入しやすいのは「通常の範囲(0.0〜1.0など)」ではなく、ハードウェアの解釈が分かれやすい特殊値や境界値である。一様分布だけでは、これらのケースをテストできる確率が極めて低くなる。

非正規化数(Denormal number または Subnormal number)とは、IEEE 754 浮動小数点数規格において、「ゼロに極めて近い、極小のプラス/マイナスの実数」を表現するための特殊な状態のことである。非正規化数は、ポート作業においてバグの温床となる。

アーキテクチャが異なっても(Intel、PowerPC、ARM)、完全に同じビットパターンの浮動小数点数系列が生成されることなどが絶対条件である。よって、ビットパターンをファイルとして保存することになるし、比較するときもビットパターンとなる。

整数と浮動小数点数では乱数の生成戦略が異なってくる。

ランダム値生成戦略を入れ替えられるようする。複数の戦略を準備する。例えば、ある範囲のランダム値を生成するものや、エッヂケースを入れるもの、ビットパターンの01からランダムにしたもの。あるいはそれらの混合。

ランダム値がある一定の割合でエッヂケースを入れ、ある一定の割合で一様分布の値を入れるようにする。

(続き書きます)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?