3. 긴 답변들

SGI의 컴파일러 처럼 Beowulf를 위해 제가 만든 코드를 자동적으로 병렬화 시켜주는 컴파일러는 없나요? [1999-05-13]

Rober G. Brown이 씀:

병렬화를 어디에서 하고 어떻게 하는지를 알려주는 BERT와 같은 툴이나 plug-in 병렬버젼과 같은 몇몇 경우를 제외하고 코드를 병렬화 하기는 쉬운 일이 아닙니다. 이는 여러분이 만든 코드가 의존성이나 시간순서를 정확히 고려하지 않았기 때문에 이러한 문제들을 해결하는 믿을만한 툴을 만들기란 너무 어려운 일이다. C와 같이 포인터기반의 언어는 거의 불가능하다고 할 수 있다.

(여러분의 코드를 안전하게 병렬화 시키는 것 말고) 두번째 문제는 제대로 병렬화 할 수 있는 부분을 결정하는 것이다. 병렬구조에서 효과적으로 실행될 수 있는 코드는 다른 구조에서 싱글스레드 코드보다 느릴 수 있습니다.

세번째문제는 여러분의 코드를 여러분이 갖고 있는 구조 (beowulf, cluster 등등)에서 가장 효과적으로 실행될 수 있게 코드의 정리문제입니다. 때때로 몇몇 코드들은 재 정렬을 한 경우 효율적으로 실행되는 경우가 있습니다. 하지만 이러한 배열은 시리얼 폰 노이만 코드를 작성하거나 병렬화하고자 사람에게는 대개는 쉬운 일이아니고 병렬화 하고자 하는 원본 시리얼 코드와 같이 아무것도 아닌 것이 될 것이다.

이 질문에 적절한 대답은 결국: "아니다"라는 것이다. PVM이나 MPI를 사용하는 것이 필수는 아니다. 여러분 스스로가 원본 소켓을 이용할 수 있거나 "내가 하는 방법을 모두 알거나 배우려는 관심이 열려있고 파일을 작성할 수 있는 관심"위에서 NFS를 이용할 수 있다. 하지만 이런 경우에도 대답은 역시 "아니다"이다. 아주 똑똑한 컴파일러를 가지고 재컴파일을 해도 확실히 불충분하다. 문제는 너무 복잡해서 자동화 할 수 없고 기본이 되는 시리얼 코드가 플러그인 루틴이 아닌 완전한 재정렬이 필요할 것이다. http://noel.feld.cvut.cz/magi/soft.html에서 많은 정보를 얻을 수 있다.