我看到了一场由Facebook的Keith Adams所做的演讲,比较了机器学习技术与在现实世界中调整代码以提高性能的方法。有没有这种自动化技术在实际项目中应用的例子?我
我知道某些编译器中的基于配置文件的优化以及一些JIT编译器用来提高性能的技术,但我考虑的是更根本的提高代码性能的方法,这可能需要更改代码本身而不是代码生成。比如:
- 在特定网络应用程序中选择最佳缓冲区大小,或为特定应用程序选择合适的堆栈大小。
- 在多线程应用程序中选择结构布局,以提高本地缓存性能,同时减少虚假共享。
- 为特定算法选择完全不同的数据结构。
我读了一篇关于Halide的论文,这是一个使用遗传算法自动调整图像处理管道以提高性能的图像处理框架。像这样的例子或任何指向研究的指针都会很有用。
回答:
FFTW是一个广泛使用的软件包,它使用OCaml生成优化的C代码。这篇论文有更多关于这个过程的细节:http://vuduc.org/pubs/vuduc2000-fftw-dct.pdf
你也可以看看Acovea,这是一个用于优化编译器标志的遗传算法:http://stderr.org/doc/acovea/html/index.html