A 컴파일러 최적화 영역
나는 그들에게 대답했고, LICM 패스는 불변 피연산자가 있는 불변 명령(부작용 없이, 즉 로드, 저장, 호출, 휘발성 등)을 이동할 것입니다. 항상 같은 것을 계산하는 명령은 제거됩니다. 또한 도미네이터 트리의 일부여야 합니다. 예를 들어 경비원 (만약 - 확인)
그들은 나에게 변경 가능한 전역 변수에 대해 물었습니다. 짧은 답변: 아니요, 최적화할 수 없습니다.
복잡한 답변: 가능할 수도 있습니다.
이 변경 가능한 전역 변수를 최적화하는 것이 LLVM을 생성하거나 MLIR 패스를 사용하기 전에 Intermediate 패스에서 더 잘 수행될 수 있다고 생각합니다.
그만한 가치가 있습니까? 이러한 전역 변수가 변이된 경우 이러한 전역 변수를 감지하는 데 복잡성이 너무 크다고 생각합니다. 시간은 컴파일러의 다른 영역에서 작업하는 데 더 잘 사용될 수 있습니다.
최적화 문제는 소프트웨어 개발자가 보다 쉬운 방법으로 해결할 수 있습니다.
사전 최적화:
int x = 5; // Defined Global scope across multiple threads
x++;
thread1 {
x++;
}
waitForThread1ToComplete();
while (true) {
print(x*x); // x is global mutable, and is mutated, can't LICM
// is mutated: meaning if not mutated, can show error to dev
개발자 작성 제안: 중간 상수 변수를 사용하고 전역 변수를 할당합니다.
waitForThread1ToComplete();
const int copyX = x;
while (true) {
print(copyX*copyX); // copyX is constant, LICM can optimize this
Reference
이 문제에 관하여(A 컴파일러 최적화 영역), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/viranchee/a-compiler-optimization-area-2129텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)