propeller实操

Posted zwlwf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了propeller实操相关的知识,希望对你有一定的参考价值。

  1. 首先建立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;

  1. 利用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的精度,有助于优化效果。

  1. 使用perf采集程序运行时数据
    注意perf的硬件事件需要运行在实体机上,虚拟机或云主机有问题。
sudo perf record -e cycles:u -j any,u -- ./a_with_bbam
sudo chown wf:wf perf.data

便会生成一个采集lbr硬件提供的分支跳转信息的perf.data文件。

  1. 使用create_llvm_prof转化profile
    create_llvm_prof是autofdo中提供的一个工具,将perf.data的工具转化为clang/lld能识别的优化输入数据。autofdo前期为gcc也做了一个类似的转化工具。

构建create_llvm_prof遇到的一些问题。

  1. llvm-project最好用最新的分支
  2. autofdo的llvm_propeller_profile_writer.cc和perf_data_reader.cc中需要添加"llvm/ADT/Optional.h"头文件
  3. 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
  1. 最后一步利用得到的反馈式数据,优化链接编译链接过程
    使用上面生成的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 .. 如果不存在

php(propel)中的集合和数组有啥区别?

如何在普通主机账户上安装 Propel?

Propel - 检查列是不是为自动增量

Propel 1.6 从 Sybase 15.7 生成模式有一些麻烦

如何在 Propel 中应用 Mysql concat?