책소개
매니코어와 최신 병렬 컴퓨팅 시스템 프로그래밍으로 고성능 컴퓨팅 시대를 리드!
인텔ⓡ 제온 파이TM 프로세서
고성능 프로그래밍 나이츠랜딩 판
4차 산업혁명 시대, 빅데이터와 인공지능(AI) 시대를 맞아 고성능 컴퓨팅(High Performance Computing, HPC) 시대가 활짝 열렸다. 이 책은 과학자나 연구원들이 주로 사용하는 슈퍼컴퓨터의 프로그래머들, 인텔의 매니코어(many-core) 아키텍처와 프로그래밍에 어느 정도 익숙한 독자를 대상으로 집필된 고성능 병렬화 프로그래밍에 대한 책이다.
인텔은 단일 코어 프로세서 기반 시스템을 멀티코어(multi-core)에서 다시 매니코어(many-core) 프로세서 시스템으로 발전시켰는데, 인텔 블로그에 따르면 싱글 매니코어인 인텔 제온파이 7250 프로세서는 2개의 백열전구가 소비하는 전력량으로 초당 6조의 부동소수점 계산을 수행할 수 있어 현재 사용하는 가장 성능 좋은 컴퓨터보다 500배에서 1,000배 더 빠른 속도로 문제를 해결할 수 있는 컴퓨터를 만드는 것도 가능해질 것으로 전망된다.
이 책은 총 세 개의 섹션으로 구분되어 있다. 섹션 1 나이츠랜딩(Knights Landing(KNL), 인텔 제온 파이 프로세서(코드명 해스웰)의 판(edition) 명), 섹션 2 병렬 프로그래밍, 섹션 3 Pearls이다. 섹션 1에서는 나이츠랜딩 아키텍처와 고대역폭 메모리, 클러스터 모드, 통합 패브릭 등을 다룬다. 또한 매니코어가 등장하게 된 배경과 매니코어 프로그래밍 개요를 살펴 본다. 섹션 2에서는 매니코어의 확장성을 고려한 프로그래밍을 중점 설명한다. 섹션 3에서는 실제 애플리케이션에서의 병렬 프로그래밍, 즉 분자 동역학, 고성능 지진 시뮬레이션, WRF(날씨 연구 및 예측), 다체 시뮬레이션, 머신러닝, 트리니티 계산 과제들, 양자 색역학 등 다양한 실제 사례와 애플리케이션에서의 프로그래밍 예제와 성능 비교 분석을 살펴본다.
머신러닝, 인공지능, 지진이나 기타 다양한 분야를 연구하는 과학자나 슈퍼컴퓨팅 프로그래머들에게 일독을 권할 만하다.
목차
감사 인사 12
서문 18
머리말 24
역자 서문 30
역자 소개 31
SECTIONⅠ 나이츠랜딩
Chapter 1 / 매니코어 프로그램 소개 4
매니코어 프로그래밍 소개 5
추세: 더 많은 병렬성 5
인텔 제온 파이 프로세서가 필요한 이유 7
프로세서 대 코프로세서 9
고도의 병렬 실행을 위한 측정법 10
GPU는 어떤가? 11
필요한 포팅이 부족하면 즐겨라, 그렇지만 계속 조율하라! 11
성능을 위한 변환 12
하이퍼 - 스레딩 대 멀티스레딩 12
프로그래밍 모델 13
여기서 섹션 II로 건너 뛸 수 있다 13
추가 정보 14
Chapter 2 / 나이츠랜딩 개요 16
개요 16
명령어 세트 17
아키텍처 개요 18
만든 동기: 우리의 비전과 목적 22
요약 24
추가 정보 25
Chapter 3 / MCDRAM 및 클러스터 모드 프로그래밍 26
클러스터 모드 프로그래밍 27
메모리 모드 프로그래밍 29
메모리 모드 및 MCDRAM 사용 가능 확인 방법 47
할당과 스레딩의 SNC 성능 영향 48
NUMA 노드 번호를 하드코딩하지 않는 방법 50
MCDRAM에 무엇을 넣을 것인지 결정하는 접근 방법 51
모드를 변경하기 위해 재부팅해야 하는 이유 59
BIOS 59
요약 64
추가 정보 65
Chapter 4 / 타일 아키텍처 66
클러스터 모드 75
메모리 인터리빙 80
메모리 모드 82
클러스터 모드와 메모리 모드의 상호 작용 86
요약 87
추가 정보 87
Chapter 5 / 인텔 옴니패스 패브릭 88
개요 88
성능과 병렬 확장성 91
전송층 API 93
서비스 품질(QoS) 95
가상 패브릭 99
유니캐스트 어드레스 해결 104
멀티캐스트 어드레스 해결 106
요약 108
추가 정보 108
Chapter 6 / 마이크로아키텍처 최적화 어드바이스 110
코어당 1, 2 혹은 4스레드(가끔 3스레드) 로 얻을 수 있는 최적 성능 111
메모리 서브시스템 112
마이크로아키텍처 뉘앙스(타일) 113
Direct-mapped MCDRAM 캐시 124
조언 AVX-512 명령을 사용하라 125
요약 152
추가 정보 153
SECTIONⅡ 병렬 프로그래밍
Chapter 7 / 나이츠랜딩을 이용한 프로그래밍 개요 156
리팩터링을 해야 하는가, 하지 말아야 하는가, 그것이 문제다 157
응용 코드의 진화적 최적화 158
응용 코드의 혁명적 최적화 160
선택할 때와 버릴 때를 알아야 한다 160
추가 정보 161
Chapter 8 / 태스크와 스레드 기반의 병렬 처리 162
OpenMP 166
포트란 2008 170
인텔 TBB 173
hStreams 180
요약 181
추가 정보 181
Chapter 9 / 벡터화 183
벡터화는 왜 중요한가? 184
벡터화는 어떻게 하는가? 184
벡터화를 위한 세 가지 접근 방법 185
벡터화 방법론 6단계 186
캐시를 통한 스트리밍: 데이터 레이아웃, 정렬, 프리페칭 등 189
컴파일러 팁 199
컴파일러 옵션 203
컴파일러 지시문 205
벡터화를 촉진하기 위한 배열 섹션을 사용하자 223
컴파일러가 생성한 것들을 활용하자: 어셈블리 코드 검사 226
벡터화에 따른 수치 결과의 변화 228
요약 228
추가 정보 229
Chapter 10 / 백터화 어드바이저 230
나이츠랜딩에서 인텔 어드바이저 사용하기 231
서베이 리포트(Survey Report) 를 이용한 AVX-512 코드 개발 및 성능 개선 233
메모리 액세스 패턴(MAP) 리포트 251
AVX-512 GATHER/SCATTER 프로파일러 252
Mask Utilization(마스크 유효성 검사) 프로파일러와 FLOPS 프로파일러 256
어드바이저 루프라인 리포트 258
AVX-512 지원 하드웨어 없이 AVX-512 코드의 특성 탐색 260
어드바이저 활용 예시 ? 계산 화학 코드의 분석 261
요약 270
추가 정보 271
Chapter 11 / SDLT를 활용한 벡터화 272
SDLT 소개 272
시작하기 274
SDLT 기본 276
SIMD 기법을 적용한 3차원 점 좌표 값의 평준화 예제 278
AOS 메모리 구조 기반 SIMD 수행의 문제점 281
SIMD는 Unit-Stride 메모리 접근 선호 282
알파 블렌딩 참조 코드 283
SDLT를 이용한 알파 블렌딩 286
추가 특징 290
요약 290
추가 정보 291
Chapter 12 / AVX-512 인트린직을 이용한 벡터화 292
인트린직이란? 292
AVX-512 미리 보기 299
나이츠코너로 마이그레이션 302
AVX-512 지원 여부 검색 303
AVX-512 명령어 집합 학습하기 307
AVX-512 인트린직 학습하기 307
AVX-512 인트린직 사용을 위한 단계별 예시 309
인트린직 코드를 활용한 코드의 결과 323
추가 정보 324
Chapter 13 / 성능 최적화 라이브러리들 326
인텔 최적화 라이브러리 개요 326
인텔 Math Kernel Library 개요 328
인텔 DAAL 개요 330
MKL과 DAAL 함께 쓰기 332
인텔 IPP 라이브러리 개요 333
인텔 최적화 라이브러리들과 인텔 컴파일러 335
다이렉트 호출 방식의 라이브러리 활용 336
최적화 라이브러리 사용 시, 나이츠랜딩으로 오프로딩 338
계산 정확도의 선택과 정확도 차이 343
동적 라이브러리 성능을 위한 팁 344
추가 정보 345
Chapter 14 / 프로파일링 및 시간 분석 346
나이츠랜딩 최적화 개요 346
이벤트 모니터링 레지스터들 348
효율화 지표들 349
잠재적인 성능 이슈들 355
인텔 VTUNE AMPLIFIER XE 제품 366
PAPI 367
MPI 분석: ITAC 367
HPC 툴킷 368
TAU 368
시간 측정 369
요약 370
추가 정보 371
Chapter 15 / MPI 372
노드간 병렬화 372
나이츠랜딩에서의 MPI 372
MPI 개요 373
MPI 애플리케이션을 수행하는 방법 375
MPI 애플리케이션 실행 분석하기 381
MPI 애플리케이션 최적화 388
이기종 클러스터 391
MPI 코딩의 최신 동향 393
모든 것을 함께 활용하기 399
요약 401
추가 정보 401
Chapter 16 / 공유할 것인가 말 것인가(그것이 문제로다) 404
왜 나이츠랜딩에서 PGAS를 이용해야 하는가? 407
PGAS 모델을 이용한 프로그래밍 408
성능 평가 416
PGAS를 넘어서 418
요약 418
추가 정보 419
Chapter 17 /소프트웨어 정의 가시화 420
소프트웨어 정의 가시화의 동기 421
소프트웨어 정의 가시화 아키텍처 423
OpenSWR: OpenGL 래스터-그래픽스 소프트웨어 렌더링 425
Embree: 고성능 레이 트레이싱 커널 라이브러리 427
OSPRay: 확장성 있는 레이 트레이싱 프레임워크 429
요약 436
이미지 권한 437
추가 정보 438
Chapter 18 / KNL로 오프로드 439
KNL을 이용하는 오프로드 프로그래밍 모델 439
프로세서 vs 코프로세서 440
오프로드 모델 고려사항 441
OpenMP 타깃 지시문 442
호스트와 대상에서 동시 실행 445
패브릭을 통한 오프로드 447
요약 448
추가 정보 448
Chapter 19 /전력 분석 449
전력 수요는 엑사급으로 이어진다 449
POWER 101 451
하드웨어 기반 전력 분석 기술들 452
소프트웨어 기반 KNL 전력 분석기 455
매니코어 플랫폼 소프트웨어 패키지 전력 도구들 466
RAPL 468
KNL 성능 프로파일링 471
인텔 원격 관리 모듈 475
요약 477
추가 정보 478
SECTIONⅢ Pearls
Chapter 20 / LAMMPS에서 고전 분자 동역학 계산의 최적화 작업 482
분자 동역학 482
LAMMPS 485
나이츠랜딩 프로세서 486
LAMMPS 최적화 488
데이터 정렬 488
데이터 유형 및 구조 489
벡터화 491
이웃 목록 499
장거리 정전기학 503
MPI와 OpenMP 병렬화 503
성능 결과 505
시스템, 실행파일 생성과 수행환경 506
작업 부하들 507
유기 광전지 분자 507
탄화수소 혼합물 508
용매화된 지질 이중층에서의 로돕신 단백질 508
굵은 입자(coarse-grain) 액정 시뮬레이션 508
굵은 입자 물 시뮬레이션 509
요약 510
감사의 글(Acknowledgement) 510
추가 정보 510
Chapter 21 / 고성능 지진 시뮬레이션 512
고차원 지진 시뮬레이션 513
수학적 배경 513
애플리케이션 특성 517
계산 중추로서의 인텔 아키텍처 527
고효율의 작은 행렬 커널 527
희소행렬 커널의 생성과 희소/조밀 커널의 선택 528
조밀 행렬 커널의 생성: AVX2 528
조밀 행렬 커널의 생성: AVX-512 530
커널 성능 벤치마킹 532
나이츠랜딩의 색다른 메모리 하부 체계 통합 533
성능 평가 537
머라피 산의 화산 시뮬레이션 537
1992년의 랜더스 지진 539
요약 그리고 기억할 것들 541
추가 정보 542
Chapter 22 / WRF 개요 543
병목이 없는 비교적 평평한 WRF 성능 특성 544
인텔 매니코어(인텔 제온 파이 제품군) 에서 WRF의 역사 544
나이츠랜딩에서 WRF 초기 성능 결과 545
인텔 제온 및 인텔 제온 파이 시스템용 WRF 컴파일 547
WRF CONUS 12km 벤치마크 성능 548
MCDRAM 대역폭 549
벡터화: AVX-2 대비 AVX-512의 성능 향상 551
코어 스케일링 553
요약 554
추가 정보 554
Chapter 23 / 다체 (N-body) 시뮬레이션 555
비전산 전공 과학자를 위한 병렬 프로그래밍 555
단계별 개선 556
다체 시뮬레이션 557
최적화 559
초기 구현(최적화 단계 0) 559
스레드 병렬 처리(최적화 단계 1) 561
스칼라 성능 최적화(최적화 단계 2) 563
SOA를 사용한 벡터화(최적화 단계 3) 565
메모리 통행량(최적화 단계 4) 567
MCDRAM이 성능에 미치는 영향 569
요약 570
추가 정보 570
Chapter 24 / 머신러닝 572
컨볼루션 신경망(CNN) 573
벡터화와 레지스터 블록킹 580
OverFeat-FAST 결과 585
추가 정보 595
Chapter 25 / 트리니티 계산과제들 596
원본 코드 성능(Out of the box performance) 596
MiniGhost의 OpenMP 성능 최적화 615
요약 624
추가 정보 624
Chapter 26 / 양자 색역학(Quantum Chromodynamics) 626
LQCD 626
QPhiX 라이브러리와 코드 생성기 627
Wilson-Dslash 연산자 628
QPhiX 코드 생성기 설정 631
실험 환경 설정 634
결과 635
결론 642
추가 정보 643
기여자 644
용어 사전 658
색인 671
저자
짐 제퍼스