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

好的,我找到了解决方案。我正在发布解决方案,因为它可能对其他人有用。

在程序中的任何退出(代码)之前,您必须调用

llvm::llvm_shutdown();

此调用将信息刷新到文件中。

我的问题是:

1 - 其他线程在没有提到的调用的情况下退出。

2 - 有一个花哨的 struct llvm::llvm_shutdown_obj 带有一个调用上述方法的析构函数。我在主函数中声明了一个变量,如下所示:

llvm::llvm_shutdown_obj X();

每个人都知道编译器应该调用析构函数,但在这种情况下它没有发生。原因是该变量未被使用,因此编译器将其删除。没有变量 => 没有析构函数 => 没有刷新到文件

于 2013-03-11T23:38:06.843 回答