propeller实操
Posted zwlwf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了propeller实操相关的知识,希望对你有一定的参考价值。
- 首先建立
a.c
, 为待优化的bin。
//a.c
int fun(int x)
if(x>5) return x+1;
else return x-1;
int main()
int ans = 0;
for(int i=0; i<100000000; i++) ans += fun(i);
return ans;
- 利用clang生成带bb块映射信息的object和exe
注意这里clang要使用lld作为
clang a.c -c -fbasic-block-sections=labels -funique-internal-linkage-names -o a.o
clang a.o -o a_with_bbam
其中funique-internal-linkage-names
参数可以提升profile的精度,有助于优化效果。
- 使用perf采集程序运行时数据
注意perf的硬件事件需要运行在实体机上,虚拟机或云主机有问题。
sudo perf record -e cycles:u -j any,u -- ./a_with_bbam
sudo chown wf:wf perf.data
便会生成一个采集lbr硬件提供的分支跳转信息的perf.data文件。
- 使用
create_llvm_prof
转化profile
create_llvm_prof是autofdo中提供的一个工具,将perf.data的工具转化为clang/lld能识别的优化输入数据。autofdo前期为gcc也做了一个类似的转化工具。
构建create_llvm_prof
遇到的一些问题。
- llvm-project最好用最新的分支
- autofdo的llvm_propeller_profile_writer.cc和perf_data_reader.cc中需要添加"llvm/ADT/Optional.h"头文件
llvm_profile_reader.cc
中接口llvm::sampleprof::SampleProfileReader::create()
在最新版本的llvm中多了一个文件系统参数,第28行可修改为如下,传入的是实际的文件系统。
auto reader_or_err = llvm::sampleprof::SampleProfileReader::create(
filename, C, *llvm::vfs::getRealFileSystem(), discriminator_pass);
/path/to/autofdo/build/create_llvm_prof --format=propeller --binary=a_with_bbam \\
--profile=perf.data --out=cluster.txt --propeller_symorder=symorder.txt --profiled_binary_name=./a_with_bbam
- 最后一步利用得到的反馈式数据,优化链接编译链接过程
使用上面生成的cluter.txt和symorder.txt进行优化。
clang -funique-internal-linkage-names -fbasic-block-sections=list=./cluster.txt -c a.c
clang -Wl,--symbol-ordering-file=./symorder.txt -Wl,--no-warn-symbol-ordering -fuse-ld=lld a.o -o a_opt
这里展示列出这个简单问题的cluster.txt和symorder.txt的结果,cluster.txt中的结果
!fun
!!0 1 3
!main
!!0 1 2 3
symorder.txt
fun
main
fun.cold
main.cold
Symfony2 和 Propel 包:向 Propel 参数转换器添加额外的过滤器
【中文标题】Symfony2 和 Propel 包:向 Propel 参数转换器添加额外的过滤器【英文标题】:Symfony2 and Propel bundle: add additional filter to the Propel param converter 【发布时间】:2014-03-22 15:56:27 【问题描述】:我在我的一个控制器中使用 Propel 参数转换器:(Symfony 2.4.2 + Propel 1.7)
* @ParamConverter("center", converter="propel", class="MyCompany\Bundle\CoreBundle\Model\Center")
效果很好,但我想添加额外的过滤器,通常是在isVisible
字段上添加(但过滤器可能更复杂),有可能吗?事实上,我想要的是使用我的模型的自定义查询函数,而不是基本的findPk()
函数。
【问题讨论】:
【参考方案1】:如果要指定用于查找实体的存储库方法,可以添加选项“repository_method”
* @ParamConverter("center", converter="propel", class="MyCompany\Bundle\CoreBundle\Model\Center", options="repository_method" = "findByCustomQuery")
【讨论】:
Juts 测试器,不幸的是,Propel 似乎不支持此选项,而只有 Doctrine 支持。 Oki,你的意思是推进 1.7 => 推进 1.1.7,因为版本 1.7 不存在 我认为这不能在不修改代码的情况下完成。正在寻找 sn-p。 没错,我刚刚提出了一个拉取请求github.com/arffak/PropelBundle/commit/… 有了这个mofication你可以使用“query_method”选项==> @ParamConverter("center", converter="propel", class="MyCompany\Bundle\CoreBundle\Model\Center", options= "query_method" = "findByCustomQuery")以上是关于propeller实操的主要内容,如果未能解决你的问题,请参考以下文章
Propel - propel:build-sql - 能够添加 CREATE DATABASE .. 如果不存在