私は、パフォーマンスが最も重要なソフトウェア パッケージの主任開発者です。上記のソフトウェアのパフォーマンスは、次のような特定の機能が利用可能な場合に大幅に向上する可能性があります。
- ソフトウェア ライブラリ (BLAS、LAPACK など)
- SSE、MMX などのサポート
私は、最も賢明なアプローチを決定するのが難しい状況にあります。私が物事を見る方法は、次のとおりです。
- 移植性と正しいクロス コンパイルの確保: 利用可能な機能をオプションとして利用し、-enable-X フラグなどを使用して明示的に有効にするようユーザーに強制することにより、ビルド プラットフォームで利用可能な機能がターゲット プラットフォームに存在しない可能性があるため、これは移植性のために必要です。 . PRO: 移植性とクロスコンパイルが適切に機能しています。短所: 初心者ユーザーは最適化を忘れてしまい、結果としてパフォーマンスが低下します。
- 初心者ユーザーの作業を楽にします: 設定段階で SSE のようなライブラリと関数の可用性を自動的にチェックし、その後、利用可能なすべての機能を使用します。PRO: ユーザーはソフトウェアの最適化されたバージョンをそわそわすることなく入手できます。短所: 移植性は保証されていません (例: ホストに SSE があり、ターゲットにない場合、クロスコンパイルは壊れます。ユーザーがクロスコンパイルすることは期待していませんが、死と税金は人生で唯一の確実性です。)
私は現在、オプション 2 に傾倒しています。これは、ほとんどのユーザーが高く評価することを期待しているためです。さらに、デフォルトの動作で初心者に対応する方が理にかなっている場合があります。移植性の観点から、これが重大な罪を構成することを認識しています。皆さんは、どのようなアプローチが最も賢明だと思いますか?
私が気付いていない私の苦境に対する解決策はありますか?