R 병렬 프로그래밍 [빠른 데이터 처리를 위한 병렬 프로그래밍의 기초와 고급 라이브러리 활용]
- 원서명Mastering Parallel Programming with R (ISBN 9781784394004)
- 지은이사이먼 채플(Simon R. Chapple), 에일리 트룹(Eilidh Troup), 토르스텐 포스터(Thorsten Forster), 테렌스 슬론(Terence Sloan)
- 옮긴이이판호
- ISBN : 9788960779747
- 25,000원
- 2017년 02월 07일 펴냄 (절판)
- 페이퍼백 | 292쪽 | 188*235mm
- 시리즈 : acorn+PACKT
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/master-parallel-R)
요약
R에서의 병렬 처리를 위한 핵심 패키지 parallel에서 시작해 클라우드 기반 패키지, 고급 MPI, GPU 기반 병렬화 등에 관해 기술적으로 깊이 다룬다. R에서 효율적인 병렬 코드를 작성할 수 있는 방법 및 피해야 할 문제에 대해 깊이 있게 배울 수 있다. R 병렬 프로그래밍을 간단하게 구현하는 방법은 물론, 고차원의 병렬화 기술을 접하는 데 좋은 길잡이가 될 것이다.
이 책에서 다루는 내용
■ R의 내장 병렬 패키지를 사용한 로드밸런싱된 병렬 연산의 효율적인 구축
■ AWS에서 동작하는 하둡의 분산화된 연산 실행을 포함한 R에서 클라우드 기반 병렬 인프라 배치 및 활용
■ RMPI, pbdMPI, SPRINT 패키지를 사용한 메시지 전달 인터페이스(MPI)로 복잡한 병렬 처리 알고리즘 개발
■사용자의 MPI 기반 루틴으로 병렬 R 패키지(SPRINT)의 생성 및 확장
■ OpenCL로 그래픽 프로세싱 유닛(GPU)의 벡터 처리 능력을 활용한 R에서 가속화된 수치 함수 구현
■ 데드락 및 수치적 불안정성과 같은 병렬 프로그래밍의 함정과 처리 및 회피 방법
■ 마스터-워커 과제 농장, 공간 그리드, 하이브리드 병렬 R 프로그램 만들기
이 책의 대상 독자
장시간 실행되는 연산 및 대량의 데이터 분석을 위해 병렬 컴퓨팅 파워의 활용법을 배우고자 하는 중급에서 고급 수준의 프로그래머를 대상으로 한다. R 프로그래밍에 대한 적절한 지식과 이해가 요구된다. C나 C++와 같은 낮은 수준 언어를 읽고 이해할 수 있으며 코드 컴파일 프로세스에 익숙할 정도로 충분한 능력의 프로그래머야 한다. 독자는 스스로 숙련된 프로그래머이자 수학자인 새로운 유형의 데이터 과학자라고 여겨야 한다.
이 책의 구성
1장, 'R에서의 간단한 병렬화'에서는 R의 병렬화된 핵심 버전인 lapply()를 사용해 노트북의 멀티코어 프로세싱 능력을 어떻게 활용할 수 있는지 빠르게 알아본다. 또한 아마존 웹 서비스를 통해 클라우드의 막대한 컴퓨팅 능력에 대해 간단히 살펴본다.
2장, '메시지 전달 소개'에서는 고급 병렬 알고리즘 구현에 핵심적인 기술인 MPI를 다룬다. 두 가지의 R MPI 패키지인 Rmpi 및 pbdMPI와 함께 해당 통신 서브시스템의 OpenMPI을 구현한다.
3장, '고급 메시지 전달'에서는 구체적인 Rmpi 예제를 개발하고 비차단 통신과 프로세스 간 메시지 교환의 지역화 패턴을 설명하며 MPI 학습을 마무리한다. 이를 위해 공간 그리드 병렬화를 구현한다.
4장, '슈퍼컴퓨터용 MPI 기반 R 패키지: SPRINT 개발'에서는 실제 슈퍼컴퓨터에서 병렬 코드를 실행하는 경험을 소개한다. 또한 슈퍼컴퓨터는 물론 노트북에서도 실행할 수 있는 C로 작성된 병렬 컴퓨팅 R 패키지인 SPRINT 개발에 대해 상세히 설명한다. 그리고 직접 작성한 고성능의 병렬 알고리즘으로 어떻게 이 패키지를 확장할 수 있는지, 어떻게 이를 R에서 접근할 수 있는지 보여준다.
5장, '노트북 안의 슈퍼컴퓨터'에서는 여러분의 노트북에 내장된 그래픽스 프로세싱 유닛(GPU, Graphics Processing Unit)의 엄청난 병렬 및 벡터 프로세싱 능력을 R에서 어떻게 드러낼 수 있는지 보여준다. 이를 위해 공개 컴퓨팅 언어(OpenCL, Open Computing Language)의 R 래퍼(wrapper)인 ROpenCL 패키지를 사용한다.
6장, '병렬 컴퓨팅의 예술'에서는 병렬 프로그래밍 및 그 성능 이면의 기초 과학과 잠재적인 함정을 강조한다. 모범 사례의 기술을 제공하고, 병렬 컴퓨팅 시스템의 미래를 살펴봄으로써 끝맺는다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
목차
목차
- 1장. R에서의 간단한 병렬화
- 아리스토텔레스의 숫자 퍼즐
- 해석기 구현
- 해석기 개선
- 실행 시간 측정
- 문제를 여러 과제로 분할
- lapply()로 복수의 과제 실행
- R 병렬 패키지
- mclapply() 사용
- mclapply() 옵션
- parLapply() 사용
- 병렬 로드밸런싱
- mclapply() 사용
- segue 패키지
- segue 설치
- AWS 계정 설정 하기
- segue 실행
- createCluster() 옵션
- AWS 콘솔 화면
- 아리스토텔레스의 숫자 퍼즐 풀기
- 결과 분석
- 요약
- 아리스토텔레스의 숫자 퍼즐
- 2장. 메시지 전달 소개
- MPI를 위한 시스템 환경 설정
- MPI를 위한 R 패키지 선택
- MPI 서브시스템 선택
- OpenMPI 설치
- MPI 표준
- MPI 유니버스
- Rmpi 설치
- pbdMPI 설치
- MPI API
- 지점 간 차단 통신
- MPI 내부통신기
- 지점 간 비차단 통신
- 집단 통신
- 지점 간 차단 통신
- 요약
- MPI를 위한 시스템 환경 설정
- 3장. 고급 메시지 전달
- 그리드 병렬화
- 그리드 클러스터 만들기
- 경계 데이터 교환
- 중앙값 필터
- 이미지를 조각으로 분산
- 중앙값 필터 그리드 프로그램
- 성능
- 통신 검사와 관리
- lapply() 변형
- Rmpi에서의 parLapply()
- 요약
- 그리드 병렬화
- 4장. 슈퍼컴퓨터용 MPI 기반 R 패키지: SPRINT 개발
- ARHCER
- R에서 MPI 코드 호출
- MPI 헬로 월드
- R에서 C 호출
- R에서 호출 가능하게C코드 수정
- MPI 코드를 R 공유 객체로 컴파일
- R에서 MPI Hello World 예제 호출
- MPI R 패키지 빌드: SPRINT
- 간단한 병렬 R 인터페이스(SPRINT) 패키지
- R스크립트에서 사전 구축된SPRINT 루틴 사용
- SPRINT 패키지의 아키텍처
- 간단한 병렬 R 인터페이스(SPRINT) 패키지
- SPRINT 패키지에 새로운 함수 추가
- SPRINT 소스코드 다운로드
- R에서 스텁 만들기: phello.R
- 인터페이스 함수 추가: phello.c
- 구현 함수 추가: hello.c
- 스텁, 인터페이스, 구현 연결
- functions.h
- functions.c
- 네임스페이스
- Makefile
- SPRINT 코드 컴파일과 실행
- 유전체학 분석 사례 연구
- 유전체학
- 유전체적 데이터
- 슈퍼컴퓨터와 함께하는 유전체학
- 목표
- ARCHER 슈퍼컴퓨터
- 랜덤 포레스트
- 유전체학 분석 사례 연구를 위한 데이터
- ARCHER에서의 랜덤 포레스트 성능
- 랭크 프로덕트
- ARCHER에서의 랭크 프로덕트 성능
- 결론
- 요약
- 5장. 노트북 안의 슈퍼컴퓨터
- OpenCL
- 시스템에서 OpenCL 능력 쿼리
- ROpenCL 패키지
- ROpenCL 프로그래밍 모델
- 간단한 벡터 덧셈 예제
- 커널 함수
- 거리 행렬 예제
- 다중 빈곤 지수
- GPU 코어 외부 메모리 처리
- ROpenCL 프로그래밍 모델
- 요약
- OpenCL
- 6장. 병렬 프로그래밍의 예술
- 병렬 효율성 이해
- 가속계수
- 암달의 법칙
- 병렬화할 것인가 하지 않을 것인가
- 채플의 법칙
- 수치적 근사
- 난수
- 데드락
- 병렬 효율성 이해
- 데드락 피하기
- 병렬 오버헤드 줄이기
- 적응적인 로드밸런싱
- 과제 농장
- 효율적인 그리드 처리
- 성공적인 병렬화를 위한 세 가지 단계
- 무엇이 미래를 품고 있는가
- 하이브리드 병렬화
- 요약