암묵적 병렬화

Implicit parallelism

컴퓨터 과학에서 암묵적 병렬컴파일러인터프리터가 언어의 구조에 의해 표현된 계산에 내재된 병렬성을 자동으로 이용할 수 있도록 하는 프로그래밍 언어의 특성이다.순수한 암묵적 병렬언어는 명시적 병렬과 반대로 병렬 실행을 가능하게 하기 위해 특별한 명령어, 연산자 또는 함수를 필요로 하지 않는다.

암묵적 병렬화를 사용하는 프로그래밍 언어에는 Axum, BMDFM, HPF, Id, LabVIEW, MATLAB M-code, NESL, SaC, SIAL, ZPL[1]pH가 포함됩니다.

특정 문제가 숫자의 그룹에 대해 동일한 연산을 수행하는 경우(각 숫자의 사인 또는 로그를 차례로 취하는 경우 등), 암묵적인 병렬화를 제공하는 언어를 사용하면 프로그래머가 명령을 다음과 같이 작성할 수 있습니다.

숫자 = [0 1 2 3 4 5 6 7]; 결과 = (숫자); 

컴파일러 또는 인터프리터는 각 요소의 사인을 독립적으로 계산할 수 있으며, 가능한 경우 여러 프로세서에 걸쳐 작업을 분산시킬 수 있습니다.

이점

암묵적으로 병렬 코드를 작성하는 프로그래머는 태스크 분할이나 프로세스 커뮤니케이션을 걱정할 필요가 없으며 대신 자신의 프로그램이 해결하려는 문제에 초점을 맞출 필요가 없습니다.암묵적 병렬화는 일반적으로 병렬 프로그램 설계를 용이하게 하므로 프로그래머 생산성이 크게 향상됩니다.

이를 지원하기 위해 필요한 많은 구성 요소도 실제 병렬이 없는 경우에도 단순성 또는 명확성을 더합니다.위의 sin() 함수의 List comprehibration 예는 그 자체로 유용한 기능입니다.암묵적 병렬화를 사용함으로써 언어는 사용자에게 필요한 기능을 지원하기 위해 이러한 유용한 구성을 효과적으로 제공해야 합니다(예를 들어 적절한 for() 루프가 없는 언어는 소수의 프로그래머가 사용하는 언어입니다).

단점들

암묵적 병렬이 있는 언어는 프로그램의 병렬 실행에 대한 프로그래머의 제어력을 감소시켜 때때로 최적보다 낮은 병렬 효율을 가져옵니다.또한 오즈 프로그래밍 언어를 만든 사람들은 암묵적 병렬을 사용한 초기 실험이 암묵적 병렬이 디버깅을 어렵게 만들고 객체 모델을 불필요하게 [2]어색하게 만든다는 것을 보여주었다는 점에 주목한다.

더 큰 문제는 모든 프로그램이 병렬 및 직렬 로직을 가지고 있다는 것입니다.예를 들어 바이너리 I/O에서는 Write() 및 Seeek()와 같은 직렬 연산을 지원해야 합니다.암묵적인 병렬화가 필요한 경우 스레드화 또는 분산할 수 없는 코드를 지원하기 위한 구성 및 키워드에 대한 새로운 요건이 생성됩니다.

메모들

  1. ^ Nikhil, Rishiyur; Arvind. Implicit Parallel Programming in pH. ISBN 1-55860-644-0.
  2. ^ Seif Haridi (2006-06-14). "Introduction". Tutorial of Oz. Retrieved 2007-09-20.