百科问答小站 logo
百科问答小站 font logo



现代C/C++编译器有多智能?能做出什么厉害的优化? 第1页

  

user avatar   xi-yang-86-73 网友的相关建议: 
      

弱爆了,连帮我把卷积自动“优化”成FFT加速的都做不到。

另外,如果你写:

       struct MyVec4i {     MyVec4i( int a, int b, int c, int d ) { values = _mm_set_epi32( d, c, b, a ); }     MyVec4i operator+( MyVec4i peer) {         MyVec4i re;         re.values = _mm_add_epi32( values, peer.values );         return re;     }     __m128i values; }  // 使用处 MyVec4i v1(1,2,3,4); MyVec4i v2(5 6 7 8); MyVec4i result = v1 + v2;      

MSVC:我特么就是要往内存里放。


user avatar   rednaxelafx 网友的相关建议: 
      

话题太大,码字花时间…

先放传送门好了。

请看Google的C++编译器组老大Chandler Carruth的演讲。这个演讲是从编译器研发工程师的角度出发,以Clang/LLVM编译C++为例,向一般C++程序员介绍理解编译器优化的思维模型。它讲解了C++编译器会做的一些常见优化,而不会深入到LLVM具体是如何实现这些优化的,所以即使不懂编译原理的C++程序员看这个演讲也不会有压力。

Understanding Compiler Optimization - Chandler Carruth - Opening Keynote Meeting C++ 2015

演示稿:meetingcpp.com/tl_files

录像:youtube.com/watch?(打不开请自备工具…)

Agner Fog写的优化手册也永远是值得参考的文档。其中的C++优化手册:

Optimizing software in C++ - An optimization guide for Windows, Linux and Mac platforms - Agner Fog

要稍微深入一点的话,GCC和LLVM的文档其实都对各自的内部实现有不错的介绍。

GCC:

GNU Compiler Collection (GCC) Internals

LLVM:

LLVM’s Analysis and Transform Passes

========================================

反模式(anti-patterns)

1. 为了“优化”而减少源码中局部变量的个数

这可能是最没用的手工“优化”了。特别是遇到在高级语言中“不用临时变量来交换两个变量”这种场景的时候。

看另一个问题有感:

有什么像a=a+b;b=a-b;a=a-b;这样的算法或者知识? - 编程

2. 为了“优化”而把应该传值的参数改为传引用

(待续…)




  

相关话题

  互联网行业的高薪是否可持续? 
  明明是技术流,为什么现在的程序员那么卑微,以前的程序员也这样吗? 
  为什么IT书籍的翻译质量相比其他尤其被诟病? 
  为什么科学家里面女科学家比例很低?数学物理的发展史也很少有女性出现。包括程序员里面也很少有女性? 
  舒服的代码和不舒服的代码,差距是怎样的? 
  媒体称硅谷科技公司开始疯狂涨薪,工程师反馈「啥也没干钱就来了」,背后的原因是什么? 
  国内的老程序员最后都去哪儿了? 
  在C++中,“?:”这个符号叫什么名字? 
  一个班的学生在用MFC,作为用Qt的异类,心里失落怎么办? 
  c中struct 为什么可以在数据结构这样用? 

前一个讨论
求推个300以内的入耳式蓝牙耳机 要求不高 耐用 没有杂音 说话清晰就好?
下一个讨论
每次写文章写完发现自己文章很散,逻辑紊乱该怎么解决这一问题?





© 2024-12-23 - tinynew.org. All Rights Reserved.
© 2024-12-23 - tinynew.org. 保留所有权利