컴파일러가 프로그래머를 대신하여 동시성에 대해 지능적으로 선택하는 데 필요한 것이 무엇인지 더 잘 이해하려고합니다. 예를 들어이 문제의 많은 어려운 측면이 있음을 알고 있습니다.
- 경쟁 조건이 없는지 확인
코드가 동시에 실행될 때 코드의 의미 적 의미에 영향을 미치는 부작용이 없는지 확인
코드에서 사용 가능한 병렬 처리 수준을 고려할 때 스레드 회전으로 인한 오버 헤드가 가치가 있는지 결정
현대 컴파일러에서 사용되는 두 가지 주요 중간 표현은 절차 및 객체 지향 언어에 대한 정적 단일 할당이며 기능 언어에 대한 스타일을 계속 전달한다는 것을 이해합니다. 위에 나열된 문제에 대한 추론은 이러한 중간 형태를 사용하는 것이 어려워 보입니다. 이론 상으로는 자동 병렬화 가능성이 가장 높은 언어조차도 (하스켈과 같은 부작용이없는 순수한 기능적 언어)이 부분에서 제한적인 진전을 보였습니다.
내 질문은 실제로이 문제를 해결하기 위해 어떤 중간 표현이 사용 되었습니까? 내가 알지 못하는 학술 연구에 사용 된 다른 표현이이 작업에 더 적합합니까? 이 문제는 컴파일이 중간 표현에 도달하기 전에 추상 구문 트리를 조작하여 컴파일러 프론트 엔드에서 근본적으로 해결해야하는 문제입니까?