0

私は LLVM に基づく Jitter に取り組んでいます。パフォーマンスに大きな問題があります。私はこれについてよく読んでいて、LLVMの問題であることを知っています。ただし、他のボトルネックがあるかどうかは疑問です。したがって、私は Jitter で -time-passes によって提供される同じメカニズムを使用したいと考えていますが、結果を特定のファイルに保存します。このようにして、次のような簡単な計算を行うことができます。

real_execution_time = total_time - time_passes

コマンド ラインにオプションを追加しましたが、機能しません。

// Disable branch fold for accurate line numbers.
llvm_argv[arrayIndex++] = "-disable-branch-fold";
llvm_argv[arrayIndex++] = "-stats";
llvm_argv[arrayIndex++] = "-time-passes";
llvm_argv[arrayIndex++] = "-info-output-file"; 
llvm_argv[arrayIndex++] = "pepe.txt";

cl::ParseCommandLineOptions(arrayIndex, const_cast<char**>(llvm_argv));

解決策はありますか?

4

1 に答える 1

0

わかりました、私は解決策を見つけました。他の人に役立つ可能性があるため、ソリューションを公開しています。

プログラムの exit(code) の前に、への呼び出しを含める必要があります。

llvm::llvm_shutdown();

この呼び出しは、情報をファイルにフラッシュします。

私の問題は:

1 - 言及された呼び出しなしで終了を発行した他のスレッド。

2 - 上記のメソッドを呼び出すデストラクタを持つ派手な構造体 llvm::llvm_shutdown_obj があります。次のようにメイン関数で変数を宣言しました。

llvm::llvm_shutdown_obj X();

コンパイラがデストラクタを呼び出す必要があることは誰もが知っていますが、この場合はそうではありませんでした。その理由は、変数が使用されていなかったため、コンパイラによって削除されたためです。変数なし => デストラクタなし => ファイルへのフラッシュなし

于 2013-03-11T23:38:06.843 に答える