Why compilers have failed and what we can do about it
2011-12-05 21:32
483 查看
Keynote of LCPC'10
一直很奇怪,这么多人在研究如何用编译器实现程序的自动并行化,如果真的可以,为什么现在貌似还是人工并行为主要的工作,而没有真正feasible & executable的模型或者什么的可以使用,如果不行,为什么没有人干脆证明它是个NP-hard问题,这样就可以暂时避免前赴后继的时间和精力耗费其上……
Summary:
This PDF, almost indicated by its title, tells the reasons why compilers have failed in the auto-parallelization.
For the past 25 years, the compiler have accomplishments in
-- Instruction-level parallelism(ILP)
-- Memory-hierarchy optimization(optimize (im)perfectly nested DO-loops + dense arrays with loop transformations & program abstractions, which has something to do with polyhedral methods)
-- Performance portability
- Java: byte-code interpretation + just-in-time(JIT) compilation
- FFTW, SPIRAL: codelets + empirical search
- ATLAS: parameterized program + empirical search
For Auto-parallelization, we only succeeded in the vectorization of some dense matrix programs, while the Databases(SQL programmers and DBMS implementers) and numerical linear algebra fields hit it.
Lessons learnt:
-- Compilers are good at lowering abstraction level of program but poor at raising it
-- Need to figure out levels and software contracts between levels
一直很奇怪,这么多人在研究如何用编译器实现程序的自动并行化,如果真的可以,为什么现在貌似还是人工并行为主要的工作,而没有真正feasible & executable的模型或者什么的可以使用,如果不行,为什么没有人干脆证明它是个NP-hard问题,这样就可以暂时避免前赴后继的时间和精力耗费其上……
Summary:
This PDF, almost indicated by its title, tells the reasons why compilers have failed in the auto-parallelization.
For the past 25 years, the compiler have accomplishments in
-- Instruction-level parallelism(ILP)
-- Memory-hierarchy optimization(optimize (im)perfectly nested DO-loops + dense arrays with loop transformations & program abstractions, which has something to do with polyhedral methods)
-- Performance portability
- Java: byte-code interpretation + just-in-time(JIT) compilation
- FFTW, SPIRAL: codelets + empirical search
- ATLAS: parameterized program + empirical search
For Auto-parallelization, we only succeeded in the vectorization of some dense matrix programs, while the Databases(SQL programmers and DBMS implementers) and numerical linear algebra fields hit it.
Lessons learnt:
-- Compilers are good at lowering abstraction level of program but poor at raising it
-- Need to figure out levels and software contracts between levels
相关文章推荐
- Requirement Traceability Matrix (RTM) – What Is RTM And Why Do We Need It?
- About BookRabbit: What we do and why - BookRabbit
- Why SHRINKFILE is a very bad thing, and what to do about it.
- VS 2005 Web Project System: What is it and why did we do it?
- What is virtual memory, how is it implemented, and why do operating systems use it?
- Unicode: What You Can Do About It Today
- Why I can't use non-string key in the myMap[myKey] expression? And what to do now?
- What About Flash? Can We Really Make Games With It?
- what is the virtual machine, when and why we need use it ?
- Why do we need smart pointer and how to implement it.
- 3% of users browse with IE9 and 14% of users have a disability. Why do we only cater for the former?
- 3% of users browse with IE9 and 14% of users have a disability. Why do we only cater for the former?
- Why can't I ...? Why won't ... work?" What to do in case of problems
- How can we live with loss — and could we truly live without it?
- What Is UTF-8 And Why Is It Important?
- NSLock(Mac OS X (Cocoa) ) — Simple Explanation of What It Is and Why You Need It
- It is said that wars in the 21st century will be fought over water. Do you agree? What do you think can be done now to alleviate
- What can we do in the CacheMetaData Method of Activity
- 《What is deep learning and why is it getting so much attention?》,译名:深度学习的定义及其备受关注的原因
- When Linux kernel panic, what can we do ?