OpenCLにいくつかの並列BLASルーチンを実装しました。カーネルが正しいかどうかを調べるために、同じルーチンを素朴な方法で実装しました。カーネルを実行した後、カーネルの結果を素朴な実装の結果と比較します。並列化されたBLASルーチンの結果の確認
float
の値を==
と比較することはできません。したがって、私は2つの絶対差を計算し、それが限界を超えているかどうかを確認します。私は既にfloats
を比較するいくつかの他の方法を記述するthis articleを読みました。しかし、私の問題は、floats
を比較するために使用する制限がわかりません。私の場合、限界はBLASルーチンと入力サイズに大きく依存しているようです。
たとえば、float値のベクトルの絶対値の合計を計算するasum
を実装しました。サイズ16777216の入力ベクトルの場合、素朴な実装と私の並列化された実装の違いは96です! 1 048 576の入力サイズの場合、その差はわずか0.5です。私は小さな入力サイズで手作業で結果をチェックしたので、私のカーネルは正しいと確信しています。私は大きな入力ベクトルのために差が蓄積していると推測しています。
私の質問は、float
の不正確さから生じる可能性のある最大の違いを計算する方法はありますか?カーネルコードのエラーのために違いがあるのかどうかを知る方法はありますか?
期待される偏差は入力の大きさに依存しますので、使用できる単一の定数の制限はありません – harold
正確な入力サイズを知っています。 –
厳しいルールはありませんか? –