2013-03-11 48 views
0

我正在研究基于LLVM的抖动。我有一个性能问题。我正在阅读很多关于此的内容,我知道这是LLVM中的一个问题。但是,我想知道是否还有其他瓶颈。因此,我想在我的Jitter中使用由-time-passes提供的相同机制,但将结果保存到特定文件。这样一来,我可以做一些简单的数学,如:如何在我自己的抖动中实现-time-pass的行为?

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)); 

任何解决方案?

回答

0

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

在你的程序中的任何退出(代码)之前,你必须包括对

LLVM调用:: llvm_shutdown();

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

我的问题是:

1 - 其他线程发出退出没有提到的调用。

2 - 有一个花哨的结构llvm :: llvm_shutdown_obj与析构函数调用提到的方法。我宣布在主要功能如下变量:

llvm::llvm_shutdown_obj X(); 

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