私はいくつかのコードをより高速に実行しようとしています。浮動小数点コード用のg ++最適化スイッチ
- パラメータ(定数、二重、INT)入力値の
- アレイ(定数、二重)
出力される
-
:入力として取って - それは点集中コードを浮遊しています
- 値の配列(double)
- ヤコビ行列
現在、私は
g++-7 (Ubuntu 7.2.0-1ubuntu1~16.04) 7.2.0
、次のコマンドライン使用しています:G ++コンパイラは、過去に、より良いコードを生成する私の記憶から
g++-7 -S -fPIC -O3 -DNDEBUG -funroll-loops -march=native -ffast-math \
-I $BOOST_DIR tmp.cpp -std=c++17 \
-D__forceinline='__attribute__((always_inline))' \
-frecord-gcc-switches -Wno-attributes
- ともずっとそのようなコードを噛んでましたがより長いです。私はさまざまなオプションで試してみましたが、唯一
--param max-gcse-memory=1
は、この引数を使用するか使用しないかの間に効果があるようです。パラメータ値の変更は無視されます。
より良いコードのための私の基準はコードでVMOV/mov命令の量は、[SP] D命令をvmulと比較されます。より良いコードには、[v] mov命令の数を少なくする必要があります。
私は10766 [V]のmov命令は、このパラメータなしで11325に比べて取得しています
--param max-gcse-memory=1
を使用。 これは、1000回のvmulpdと1900回のvmulsdとの比較です。両方の試行の間で、数値はほぼ一定です。
再び - 私は、コンパイル時間を気にしません。私はよりよいコードを取得したいと思います。過去(2010年)に覚えていることから、コンパイル時間がずっと長くなるなど、より良いコードが得られました。
古いバージョンをインストールして比較することはできませんか?また、ネイティブアーキテクチャは変更されていませんか? – visibleman
このレベルでは、mov vs mulを計算することは本当に粗雑な経験則です。実行時間を代表データで比較する必要があります。 –