6

.NET FrameworkのMath関数は、主に倍精度浮動小数点数で動作し、単精度(浮動小数点)のオーバーロードはありません。高性能シナリオで単精度データを処理する場合、これにより不要なキャストが発生し、必要以上の精度で関数が計算されるため、パフォーマンスにある程度の影響があります。

この追加のCPUオーバーヘッドの一部を回避する方法はありますか?たとえば、基礎となるFPU命令を直接呼び出すfloatオーバーロードを備えたオープンソースの数学ライブラリはありますか?(私の理解では、これにはCLRでのサポートが必要です)。実際、最近のCPUに単精度命令があるかどうかはわかりません。

この質問は、シグモイド関数の最適化に関するこの質問に部分的に触発されています。

C#での数学の最適化

4

2 に答える 2

3

私の知る限り、.NET Frameworkには、数学の組み込み関数に直接アクセスできるAPIは含まれていません。モノライブラリには組み込み関数の動作サポートが含まれていますが、それらの状態はわかりません。

[編集:この段落は、パラメーターのオーバーロードが表示されない理由についての解説です。] 1つの問題は、CLI評価スタック(ECMA-335による)がとタイプfloatを区別しないことです。有効な実装では、すべてを数学演算用として扱うことができますが、CLR(MicrosoftのCLIの実装)は、可能な場合は単精度算術の最適化を実行すると思います。floatdoubledouble

組み込み関数(特にSIMD拡張命令)の問題が[リリースされた製品で]まだ対処されていないのは少し残念だと思います。私の部外者の推測では、組み込み関数のサポートにはVMの大幅な変更が必要であり、.NETFrameworkのリリースサイクルのこの時点で許容できないリスクが発生します。ガベージコレクター(および例外処理メカニズム)はレジスタアロケーターと緊密に結合されており、組み込み関数をサポートすることで、その領域に根本的な新しい変数が追加されます。

于 2009-08-18T09:58:25.577 に答える
1

はい、必要な場合は単精度浮動小数点計算をネイティブに使用する高性能のフォワードスケーリング数学ライブラリを構築します。そして、あなたは正しいです。正しく実装されていれば、倍精度を使用する場合よりもはるかに高速になる可能性があります。

CenterSpaceSoftwareからこの数学ライブラリをチェックしてください。

ポール

于 2009-11-06T06:06:04.490 に答える