私は現在、パフォーマンスが重要な環境に配備される数値処理システムに取り組んでいます。数値配列の形式で入力を受け取り(これらはeigen
ライブラリを使用しますが、この質問の目的では重要ではない可能性があります)、ある範囲の数値計算(行列積、連結など)を実行して出力を生成します。
すべての配列は静的に割り当てられ、そのサイズはコンパイル時にわかります。ただし、一部の入力は無効な場合があります。これらの例外的な場合でも、コードを計算し、無効な値によって「汚染されない」出力を使用する必要があります。
例として、次の簡単な例を見てみましょう(これは疑似コードです)。
Matrix a = {1, 2, NAN, 4}; // this is the "input" matrix
Scalar b = 2;
Matrix output = b * a; // this results in {2, 4, NAN, 8}
ここでの考え方は、2、4、8は使用可能な値ですが、NANはデータの受信者に、そのエントリが無効な値を含む操作に関与していたことを通知し、破棄する必要があります(これは、std::isfinite(value)
値を使用する前に確認してください)。
パフォーマンスが重要であり、ヒープ割り当てがオプションではない(そして、boost::optional
またはポインターなどの他のリソースを消費する構成要素でもない)場合、これは使用できない値を通信および伝播する適切な方法ですか?
これを行うより良い方法はありますか?この時点で私は現在の設定に非常に満足していますが、現在の実装についていくつかの新鮮なアイデアや生産的な批評を得ることを望んでいました。