아테지 PX
Ateji PX| 패러다임 | 객체 지향, 파이 미적분 |
|---|---|
| 타이핑 분야 | 강력, 정적 |
| 면허증. | 상용, 30일간 무료 Premium 평가판 및 무료 에디션 |
| 웹 사이트 | www.Ateji.com |
| 영향을 받다 | |
| 자바 | |
Ateji PX는 Java를 위한 객체 지향 프로그래밍 언어 확장입니다.멀티코어 프로세서, GPU, 그리드 및 클라우드에서 병렬 컴퓨팅을 용이하게 하는 것을 목적으로 하고 있습니다.
Ateji PX는 Eclipse IDE와 통합할 수 있으며 추가 병렬 구조에 대한 최소한의 학습이 필요하며 개발 프로세스를 변경하지 않습니다.
코드 예시
안녕 세계
일반의 학급 안녕 세계 { 일반의 정적인 무효 주된(스트링[] args) { [ 시스템..나가..인쇄("안녕하세요"); 시스템..나가..인쇄("세계"); ] } } 각각 symbol은 병렬 분기를 도입합니다.이 프로그램을 실행하면 다음 중 하나가 인쇄됩니다.
안녕 세계
또는
월드 헬로
병렬 브랜치의 스케줄 방법에 따라 달라집니다.
data 병렬화
[ (인트 i : 배열.길이) 배열[i]++; ] 수량화(int i : N)각 값에 대해 병렬 브랜치를 1개 만듭니다.i이 코드의 효과는 모든 요소를 증가시키는 것입니다.array병렬로이 코드는 다음과 같습니다.
[ 배열[0]++; 배열[1]++; ... 배열[배열.길이-1]++; ] 더 복잡한 수량화가 가능합니다.다음 예제에서는 정사각형 행렬의 왼쪽 위 삼각형을 수량화합니다.
[ (인트 i:N, 인트 j:N, 한다면 i+j< >N) 매트릭스[i][j]++; ] 대량의 요소 집합에서 일반적으로 작은 작업을 수행하는 코드를 데이터 병렬이라고 하며 고성능 과학 응용 프로그램에 자주 나타납니다.C/C++ 또는 Fortran 생태계에서 사용되는 데이터 병렬 언어의 대표적인 예는 OpenMP입니다.
데이터 병렬 기능은 병렬 배열과 같은 전용 데이터 구조를 사용하여 라이브러리에서 구현할 수도 있습니다.
태스크 병렬 처리
작업 병렬이라는 용어는 작업이 개념적으로 여러 논리적 작업으로 분해될 수 있을 때 사용됩니다.이 예에서는 작업이 재귀적으로 생성됩니다.
인트 파이브(인트 n) { 한다면 (n <=> 1) 돌아가다 1; 인트 fib1, 파이브2; // 병렬 분기 재귀 생성 [ fib1 = 파이브(n-1); 파이브2 = 파이브(n-2); ] 돌아가다 fib1 + 파이브2; } 태스크 병렬화는 Cilk와 같은 언어로 구현되며 라이브러리에서는 다음과 같이 구현됩니다.fork/joinUNIX 시스템콜의 페어
메시지 전달
병렬 브랜치에는 공유 변수를 동시에 읽고 쓰는 것과 명시적인 메시지를 보내는 두 가지 통신 방법이 있습니다.연산자!그리고.?채널에서 메시지를 각각 송수신합니다.
이 예에서는 2개의 병렬 브랜치가 명시적 메시지 전달을 통해 통신합니다.
찬< >스트링> 찬스 = 신규 찬< >스트링>(); [ // 분기 1은 채널을 통해 값을 전송합니다. 찬스 ! "안녕하세요"; // 분기 2는 채널에서 값을 수신하여 출력합니다. 찬스 ? s; 시스템..나가..인쇄(s); ] 데이터 흐름
프로그램은 플로우 내의 데이터 가용성에 의해 연산이 개시되어 동기화되었을 때 데이터 플로우라고 불립니다.일반적인 예로는 가산기가 있습니다. 즉, 2개의 입력과 1개의 출력이 있으며, 2개의 입력이 준비될 때마다 출력에 합계를 보냅니다.
무효 가산기(찬< >정수> 입력 1, 찬< >정수> 인2, 찬< >정수> 나가.) { 위해서(;;) { 인트 값 1, 값 2; [ 입력 1 ? 값 1; 인2 ? 값 2; ]; 나가. ! 값 1 + 값 2; }} 병렬 판독에 주의합니다.[ in1 ? value1; in2 ? value2; ]. 즉, 두 입력 값이 임의의 순서로 올 수 있습니다.값이 잘못된 순서로 입력되면 코드가 교착 상태가 될 수 있습니다.이는 프로그래밍 언어의 병렬 프리미티브가 성능뿐만 아니라 프로그램의 동작에 관한 것임을 보여줍니다.
입력 데이터에 반응하기 때문에 가산기 자체는 아무것도 하지 않습니다.다른 부품이 입력 값을 공급하고 출력 값을 읽는 컨텍스트에 넣어야 합니다.이를 표현하는 방법은 모든 조각을 큰 병렬 블록으로 구성하는 것입니다.
[ 원천(c1); // c1에서 값을 생성합니다. 원천(c2); // c2에서 값을 생성합니다. 가산기(c1, c2, c3); 가라앉다(c3); // c3에서 값 읽기 ] 논리 게이트 또는 전기 회로의 조합이라고 생각할 수 있는 것은, 데이터 플로우 프로그램으로 간단하게 표현할 수 있습니다.