2009-06-09 3 views
2

OpenMP 기반 병렬 프로그램을 사용하여 클러스터에서 실행하는 코드 변환기를 작성하려고합니다.병렬 프로그램을 클러스터 프로그램으로 변환. OpenMP에서?

이 문제는 어떻게 해결합니까? 어떤 라이브러리를 사용합니까? 어떻게이 작은 클러스터를 설정합니까?

저는 인터넷에서 클러스터 컴퓨팅에 관한 좋은 자료를 찾기가 매우 어렵다는 것을 알고 있습니다.

편집 : 불가능하다면 인텔은 어떻게합니까? 인텔 컴파일러는 내가 원하는 것을 정확하게 수행하는 것 같습니다. 나는 실행하고 싶은 특정 응용 프로그램이 없습니다. 응용 프로그램이 아니라 "변환기/컴파일러"를 작성하고 싶습니다. 나는 공유 메모리가 분산 메모리와 다르다는 것을 알고 있지만, 모든 경우가 아니라면 어떤 경우에는 메모리를 동기화 할 수있는 방법이 있어야한다. 애플리케이션이 사용자 정의 구성으로 작성되었다고하더라도.

+0

더 많은 설명이 추가되었습니다. – jetru

답변

2

이것은 좋은 생각이 아닙니다.

OpenMP의 기본 개념은 데이터 공유 병렬 실행입니다. 공유 데이터에 액세스 할 때 비용이 들지 않아 잘 작동합니다. 모든 스레드는 공유 캐시 또는 RAM의 변수에 액세스 할 수 있습니다.

클러스터 계산은 클러스터의 컴퓨터에 분산 메모리가 있기 때문에 메시지 전달을 활용합니다. 한 프로세스가 다른 프로세스의 데이터를 필요로 할 때 네트워크를 통해 전달되는 데이터를 관리해야합니다. 시간이 많이 소요되는 작업입니다.

그런 컴파일러를 작성하려면 OpenMP에서 각 데이터 액세스에 대해 데이터 브로드 캐스팅 작업 (예 : MPI의 MPI_Bcast)을 구현해야합니다. 이렇게하면 병렬 성능이 전혀 중단됩니다.

1

이것은 단순히 불가능합니다. 클러스터에서 작동하도록 완전히 다른 방식으로 코드를 구조해야합니다 (복수 기계 프로그래밍은 이며 하나의 기계 프로그래밍과 다른 매우입니다).

이 작업을 수행하는 마법 같은 먼지는 없습니다.

반면에 클러스터를 염두에두고 프로그램을 작성하면 단일 시스템에서 실행할 수 있습니다 (분명히 느리지 만).

3

Intel에는 x86 64 비트 클러스터 용 C++ 및 Fortran 컴파일러와 함께 작동하는 OpenMP 구현이 있습니다. 무료로이 컴파일러의 30 일 평가판을 구할 수 있습니다. 그것 이외에, Zifre는 대부분 옳다. 확장성에 관심이 있다면, 분산 시스템을 염두에두고 설계된 다른 프로그래밍 모델 (MPI, CUDA, Cilk, ...)에 병렬 프로그램을 작성하십시오. 귀하가 귀하의 신청서에 대해 조금 더 많은 정보를 제공한다면, 우리는 그 안내서에 대해보다 유용한 지침을 제공 할 수있을 것입니다.

1

SCORE/SCASH 및 Omni OpenMP 컴파일러

관련 문제