SHMEM
SHMEMSHMEM(Cray Research의 "공유 메모리" 라이브러리로부터[1])은 병렬 프로그래밍 라이브러리 계열로, 저지연 분산 메모리 슈퍼컴퓨터를 위한 단면적인 RDMA, 병렬 처리 인터페이스를 제공한다. 이후 SHMEM 약어는 "대칭 계층적 MEMory"를 의미하도록 역설계되었다.[2] 후에 분산 메모리 병렬 컴퓨터 클러스터로 확장되었으며, 병렬 프로그래밍 인터페이스 또는 낮은 수준의 인터페이스로 사용되어 분할된 글로벌 주소 공간(PGAS) 시스템과 언어를 구축한다.[3] 최초의 SHEMM 라이브러리인 "Libsma"는 Cray Research의 Richard Smith에 의해 CRAY T3D의 프로세서 간 통신 하드웨어에 접속하기 위한 얇은 인터페이스 세트로 1993년에 만들어졌다. SHMEM은 Cray Research, SGI, Cray Inc., Quadrics, HP, GSHMEM, IBM, QLogic, Mellanox, University of Houston and Florida에 의해 구현되었으며 오픈소스 OpenSHMEM도 있다.[4]
SHMEM은 대기 시간이 짧은(하위 마이크로초) 단방향 통신을 위한 기초를 다졌다.[5] CRAY T3E에 사용 후, 그것의 인기는 거의 기계들이 그것의 특징적인 개별 단어 의사소통의 효율성을 유지하기 위해 필요한 거의 초단위의 지연 시간을 제공할 수 없을 정도로 약해졌다.[6] SHMEM은 인기 있는 서브 마이크로초 인터커넥트의 출현과 함께 엑사스케일 컴퓨팅을 위한 초효율, 휴대용, 병렬 통신 방식의 필요성을 다루기 위해 사용되어 왔다.[7]
SHMEM을 사용하여 작성된 프로그램은 사용 중인 SHMEM 라이브러리에 의해 지원되는 일부 고성능 네트워크와 함께 연결된 여러 컴퓨터에서 시작할 수 있다. 모든 컴퓨터는 프로그램의 복사본(SPMD)을 실행한다; 각각의 복사본은 PE(처리 요소)라고 불린다. PE는 SHMEM 라이브러리에 읽기("shmem_get" 작업) 또는 쓰기("shmem_put" 작업) 데이터와 같은 원격 메모리 액세스 작업을 수행하도록 요청할 수 있다. 피어투피어 연산은 일방적이므로, 조치를 완료하는 데 원격 스레드의 적극적인 협조가 필요하지 않음을 의미한다(그러나 "shmem_wait"를 사용하여 변경에 대한 로컬 메모리를 폴링할 수 있다). 작업은 바이트나 워드와 같은 짧은 유형이나 배열과 같은 긴 데이터 유형에서 수행될 수 있으며, 때로는 균등하게 배열되거나 색인화된다(배열의 일부 요소만 전송됨). 짧은 데이터 유형의 경우 SHMEM은 원격 메모리에서도 원자 연산(CAS, 가져오기 및 추가, 원자 증분 등)을 수행할 수 있다. 또한 작업 제어 동기화(배리어와 잠금 장치)와 메모리 펜싱과 순서를 강제하는 기능 [4]등 두 가지 동기화 방법이 있다. SHMEM에는 여러 가지 집단 운영이 있는데, 이는 감축, 방송, 수집과 같은 모든 PE에 의해 시작되어야 한다.
모든 PE에는 "대칭" 세그먼트(또는 공유 메모리 영역)로 선언된 메모리 일부가 있고 다른 메모리는 비공개적이다. 원격 PE에서 일방적인 조작으로 "공유된" 메모리만 접속할 수 있다. 프로그래머는 정적 메모리 구성물 또는 shmalloc/shakefree 루틴을 사용하여 PE에 걸쳐 있는 대칭 주소를 가진 객체를 만들 수 있다.
일반적인 SHMEM 기능
- start_pes(N) - 시작 N 처리 요소(PE)
- _my_pe() - SHMEM에게 현재 스레드의 PE 식별자를 반환하도록 요청
- shmem_barrier_all() - 모든 PE가 장벽에 도달할 때까지 기다린 후 더 멀리 이동할 수 있도록 설정
- shmem_put(target, source, length, pe) - 로컬 주소 "source"에서 ID "pe"로 PE의 원격 주소 "target"에 길이 "길이"의 데이터를 쓰기
- shmem_get(target, source, length, pe) - ID가 "pe"인 PE의 원격 주소 "source"에서 길이 "길이"의 데이터를 읽고 값을 로컬 주소 "target"[8]으로 읽기 위해 저장
SHMEME 구현 목록
- Cray Research: CRAY T3D, CRAY T3E 및 Cray Research PVP 슈퍼컴퓨터를[9] 위한 Original SHEMME
- SGI: Infiniband 네트워크 어댑터가 있는 NUMALink 및 Altix 빌드가 있는 시스템용 SGI-SHMEM
- 크레용 주식회사: 유니코스 MP용 MP-SHMEM(X1E 슈퍼컴퓨터)
- 크레용 주식회사: 유니코스 LC용 LC-SHMEM(Cray XT3, XT4, XT5)
- 4분위수: QsNet 인터커넥트를[9] 사용하는 Linux용 Q-SHMEM[10]
- 사이클롭스-64 SHMEM
- HP SHMEM[9]
- IBM SHMEM[9]
- GPSHMEM[9]
OpenSHMEME 구현
OpenSHMEM은 SGI와 Open Source Software Solutions, Inc.의 표준 노력이다.
- 휴스턴 대학교: 참조 OpenSHMEM[4][9]
- 멜라노스 확장 가능SHMEM[9]
- 포털-SHMEM(포털 인터페이스 상단)
- 플로리다 대학교: 게이터 SHMEM[9]
- Open MPI는 OpenSHMEM의[11] 구현을 포함한다.
- Adapteva Epiphany Coprocessor[12]
단점들
첫 해에 SHMEM 접근할 수 있는 경우에만 약간의 크레이-2S연구 기계(나중에 추가로에 SGI)[1]가 장착된 특별한 네트워크, 제한 도서관 확산되고 현재 공급자 구속(예를 들어, 크레이-2S연구를 추천해 줄 부분적으로 고쳐 쓰다 평균 탄착 중심점 프로그램을 둘 다 평균 탄착 중심점과shmem 전화 오면, 만든 프로그램non-portable에 다른 clear-.평균 탄착 중심점 환경).
SHMEM은 표준으로 정의되지 않았기 때문에,[9][1] 다른 벤더에 의해 호환이 불가능한 여러 변종 SHMEM 라이브러리가 생성되었다. 라이브러리는 파일 이름, PE 시작 또는 현재 PE ID를 얻기 위한 관리 기능 이름 등이 다르고 일부 기능은 변경되거나 지원되지 않았다.[9]
일부 SHMEM 루틴은 CRAY T3D 아키텍처 제한에 따라 설계되었다. 예를 들어 감소와 방송은 크기가 2인 PE 하위 집합에서만 시작될 수 있었다.[2][9]
클러스터가 비 Rdma에 최적화된 이더넷만 있는 경우에도 SHMEM 라이브러리의 변형들은 어떤 MPI 라이브러리 위에서 실행될 수 있지만, 일반적으로 성능은 다른 강화된 네트워킹 프로토콜보다 더 나쁠 것이다.
공유 영역의 메모리는 시스템 malloc가 아닌 특수 기능(shmalloc/shyfree)을 사용하여 할당되어야 한다.[9]
SHMEM은 C와 Fortran(일부 C++[9] 버전도 있음)에만 사용할 수 있다.
SHMEM의 많은 단점은 엑사스케일 개발에 의해 구동되는 인기 서브 마이크로초 인터커넥트에 OpenSHMEM을 사용함으로써 극복되었다.[7]
참고 항목
- 메시지 전달 인터페이스(특히 MPI-2의 일방적 작동)
- 활성 메시지
- Unified Parallel C(PGAS 언어 중 하나, SHMEM 위에 구현 가능)
참조
- ^ a b c SHMEM // Cray, 문서 004-2178-002, 3장
- ^ a b 병렬 컴퓨팅 소개 - 3.11 관련 작업 //cse590o 과정, 2002년 겨울 워싱턴 대학교; 154페이지
- ^ "New Accelerations for Parallel Programming" (PDF). Mellanox. 2012. Retrieved 18 January 2014.
SHMEM is being used/proposed as a lower level interface for PGAS implementations
- ^ a b c Poole, Stephen (2011). OpenSHMEM - Toward a Unified RMA Model. Encyclopedia of Parallel Computing. pp. 1379–1391. doi:10.1007/978-0-387-09766-4_490. ISBN 978-0-387-09765-7.
- ^ San Diego Supercomputer Center 및 ORNL에 의한 벤치마킹, 추적 및 시뮬레이션 SHMEM 애플리케이션 // CUG 2012 문서
- ^ 최근 병렬 가상 머신과 메시지 전달의 진전 ..., 제11권 59페이지 : "프로그래밍 패러다임으로서의 일방적 통신은 처음에 Cray T3D와 T3E에 있는 SHMEM 라이브러리에 의해 인기를 끌었다.."
- ^ a b "OpenSHMEM 2015". www.csm.ornl.gov. Retrieved 2017-04-10.
- ^ man shmem_get (SGI TPL)
- ^ a b c d e f g h i j k l m OpenSHMEM 튜토리얼 // 텍사스, 휴스턴 대학교, 2012
- ^ Shmem Programming Manual // Quadrics, 2000-2001
- ^ 오픈엠피
- ^ 제임스 로스와 데이비드 리치. Adapteva Epiphany Coprocessor를 위한 OpenSHMEM 구현. OpenSHMEM 및 관련 기술에 관한 제3차 워크샵의 진행, 2016. 스프링거.
추가 읽기
- 공유 메모리 액세스(SHMEM) 루틴 // Cray Research, 1995
외부 링크
- CRAY T3E에서 SHMEM 사용
- Man inrot_shmem(SGI TPL) - SHMEM 프로그래밍 모델 소개
- OpenSHMEM: 분할된 전역 주소 공간에서 병렬 프로그래밍을 위한 표준화된 API 사양을 작성하기 위한 노력.