일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 운영체제
- 운영체제 제작
- OS 구조와 원리
- 건담 프라모델
- 쉽게 배우는 운영체제 연습문제
- OS강의
- OS 강의
- 건프라
- 쉽게 배우는 운영체제
- os 만들기
- 쉽게 배우는 운영체제 솔루션
- Project Euler 해답
- rg
- 맛집
- 건담 엑스포
- 운영체제 정리
- 프라모델
- 운영체제 문제 풀이
- OS
- 30일
- hg
- 쉽게 배우는 운영체제 풀이
- OS 그래픽 처리
- 건담
- project euler
- 맛집 추천
- Project Euler Problem
- OS 제작
- 운영체제 만들기
- Gundam
- Today
- Total
밤색모자이크의 개발이야기
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 김민장 저 본문
안녕하세요. 밤색모자이크입니다.
이번에 리뷰할 책은 "프로그래머가 몰랐던 멀티코어 CPU 이야기" 입니다.
CPU알고싶다고 처음부터 읽기엔 약간 부담스러울수도 있는데 일단 전공자면 꼭 읽어보길 추천드려요.
리뷰는 아래에 적겠습니다.
책 표지
[출처 : 알라딘 제공]
기본 정보
도서명 : 프로그래머가 몰랐던 멀티코어 CPU 이야기
정가 : 22,000원
저자 : 김민장
출판사 : 한빛미디어
출판사 서평
딱딱한 하드웨어를 말랑말랑하게 풀어낸 멀티코어 CPU 이야기
싱글코어에서 멀티코어 시대가 바뀌면서 프로그래밍의 패러다임이 변화했다. 이러한 변화는 프로그래머들에게 직간접적으로 영향을 미치고 있다. 최신 CPU에 적용된 비순차 실행, 명령어 레벨 병렬성(ILP) 등의 동작 원리를 알기 쉽게 설명한다. 딱딱한 프로그래밍 교과서에서 설명하지 않았던 멀티코어 프로세서의 동작 원리와 그 속에 숨겨진 소프트웨어 알고리즘을 설명한다.
이 책에서는 명령어 집합 구조, 프로그램의 의미를 결정 짓는 의존성, 프로세서 기본 동작, 고성능 프로세서가 되려면 필요한 파이프라인, 비순차 실행에서 하이퍼스레딩, 칩 멀티프로세서, 캐시, 가상 함수의 처리 과정, 병렬 프로그래밍과 하이젠버그 등을 자세하게 설명한다.
【주요내용】
ㆍ 프로세서 기본 구조
ㆍ 명령어 파이프라인과 비순차 실행
ㆍ 데이터 병렬성: SIMD와 GPU
ㆍ 메모리 명령 실행 알고리즘
ㆍ 병렬 프로그래밍과 CPU의 동작 원리
네이버 도서 링크
http://book.naver.com/bookdb/publisher_review.nhn?bid=6280852
개인 리뷰
개인 평점 : ★★★★★
운영체제에 관심이 많으신 분들은 필독하면 좋겠네요.
저는 사실 번역서를 좋아하지는 않습니다. 번역하시는 분들이 보통 전공자가 아닌 경우가 많은지 굉징히 딱딱하고 잘못된 번역에 많더라구요.
그런면에서 우리나라에서 경력자분들이 쓰는 책들을 선호하고 있습니다.
이 책은 딱 그런 책입니다.
CPU에 대한 자세한 하드웨어 구조를 보기위한 책은 아닙니다. 그런걸 보고 싶으시면 intel이나 arm의 메뉴얼을 보면 되겠죠.
이 책은 기본적인 CPU에서가 성능향상을 위해 기본적으로 가지고 있는 기술을 설명하고 이를 극대화하기위한 병령처리 개념을 소개합니다.
기본적으로 운영체제라던가 컴퓨터 구조 공부를 하신 분들은 익숙하게 읽을 수 있습니다.
저는 해저드에 대해서 많이 들었고, 이에 대한 발생 조건도 많이 들었습니다.
하지만, 해결책은 많이 본적이 없는데 책에서는 잘 설명되어있어서 좋았습니다.
이제는 단순한 프로그래밍만으로는 경쟁력이 될 수 없는 시대입니다.
멀티코어도 코어지만 이제는 분산 처리 부터 시작해서 병렬처리 더욱 중요한 시대가 되고 있습니다.
그런 의미에서 이 책은 시기적절하게 잘 나왔고 좋은 내용으로 알차게 되어있습니다.
흔히 swap이라는 함수를 만들어서 두 변수의 저장 내용을 바꾸죠.
안에 일반적으로 temp라는 변수를 활용합니다.
이 책에서는 xor을 활용해서 temp 변수를 사용하지 않고 저장 내용을 바꾸는 것과 비교합니다.
사실 비트연산에다가 변수까지 하나 할당할 필요가 없는 이 xor기법은 매력적이죠.
코딩 잘하는 것 처럼 보입니다.
하지만 병렬 처리 환경에서는 그다지 좋다고 할 수 없습니다. 왜냐면 서로 연결되어 연산되기 때문이죠.
임시 변수 temp를 활용한다면 동시에 3개의 연산을 처리 할 수 있습니다. 따라서, 파이프라인 기술에 굉장히 잘 맞는 기법입니다.
책에는 이런 식의 예가 나옵니다.
좀 더 명확하게 설명하기 위해서 좋은 예제가 많이 있습니다.
위 예제는 파이브라인에 대한 것이지만 CPU에는 파이브라인 말고도 하이퍼스레딩, 분기문 예측, 프리펫칭 등 정말 다양한 기술들이 들어가 있습니다.
이러한 기술들이 왜 필요하고 어떤한 경우에 쓰고 컴파일러는 어떻게 받아들여서 컴파일하는지 알아야 CPU가 더 빠르게 일 할 수 있는 프로그래밍이 가능합니다.
요즘 컴퓨터 구조와 운영체제 같은 과목들은 점점 개발하는데 있어서 그 중요도가 떨어지고 있는게 사실이죠.
하지만, 컴퓨터의 근본인 CPU까지 알고있다면 정말 우수한 개발자가 될 수 있습니다.
컴퓨터 전공을 하고 더 공부 하고 싶은 분들에게 꼭 권하는 책입니다.
책 상세 정보
목차
Story 01. 프로그래머가 프로세서도 알아야 해요?
들어가며
고달픈 프로그래머
누구를 위해 이 책을 썼는가?
참고문헌
Story 02. 프로세서의 언어 : 명령어 집합 구조
들어가며
프로그래머가 보는 프로세서
프로세서의 언어 : 명령어 집합 구조
RISC와 CISC로 알아보는 명령어 집합 구조
간단한 코드로 보는 RISC와 CISC의 차이
아직도 RISC vs. CISC ?
결론
참고문헌
Story 03. 프로세서의 기본 부품과 개념들
들어가며
마이크로아키텍처란?
산술 논리 장치 : 프로세서 속의 계산기
클록, 1사이클이 가지는 의미
메모리 계층
컨트롤 장치
프로세스와 스레드
가상 메모리
결론
참고문헌
Story 04. 암달의 법칙과 프로세서의 성능 지표
들어가며
암달의 법칙
병렬 처리에서의 암달의 법칙
프로그램의 수행 시간
성능 향상을 위해 해야 할 일
결론
참고문헌
Story 05. 프로그램의 의미를 결정 짓는 의존성
들어가며
데이터 의존성
컨트롤 의존성
메모리 의존성
루프에서의 데이터 의존성
결론
Story 06. 프로세서 기본 동작
들어가며
명령어 처리의 기본적인 다섯 단계
명령어 인출
명령어 해독
피연산자 인출
명령어 실행 단계
연산 결과 저장
예외 처리
결론
참고문헌
Story 07. 고성능 프로세서의 시작 : 명령어 파이프라인
들어가며
파이프라인의 기본 개념
파이프라인의 효율적인 설계
파이프라인 프로세서의 구현
파이프라인 해저드
파이프라인 : 소프트웨어 병렬화의 한 가지 방법
결론
참고문헌
Story 08. 또 하나의 혁명 : 비순차 실행
들어가며
비순차 슈퍼스칼라 프로세서가 필요한 이유
비순차 실행의 원리 : 명령어 수준 병렬성
슈퍼스칼라 파이프라인 구조
비순차 실행의 구현 : 토마슐로 알고리즘
비순차 프로세서 파이프라인
결론
참고문헌
Story 09. 하이퍼스레딩 : 병렬성의 극대화
들어가며
하이퍼스레딩이 뭐야?
동시 멀티스레딩의 구현과 성능
결론
참고문헌
Story 10. 멀티코어 혁명 : 칩 멀티프로세서
들어가며
멀티코어 시대
싱글코어의 한계 : 에너지 장벽
싱글코어의 한계 : ILP의 한계
병렬 컴퓨터의 개념
병렬 컴퓨터 구조
멀티코어의 구성 방식
멀티코어의 한계 : 메모리 장벽과 병렬 프로그래밍
여전히 중요한 싱글코어 성능
결론
참고문헌
Story 11. 데이터 병렬성 : SIMD와 GPU
들어가며
데이터 병렬성
GPU : 또 하나의 병렬 프로세서
CUDA 프로그래밍 모델 : 스레드와 메모리 모델
CUDA 프로그래밍의 예 : 행렬 곱셈
nVidia GPU의 자세한 스레드 실행 구조 : 워프(Warp)
결론
참고문헌
Story 12. 고성능 프로세서의 필수 조건 : 똑똑한 캐시
들어가며
왜 캐시가 필요하고 잘 작동할 수 있을까?
일반적인 캐시 구조
CPU 캐시의 기본적인 설계
고성능 캐시를 위한 알고리즘
멀티코어에서의 캐시
결론
참고문헌
Story 13. if 문은 그냥 실행되는 것이 아니다
들어가며
분기문 명령어와 프로그래밍 언어
분기 예측이 필요한 이유
분기 예측에 기반한 투기적 실행
기본적인 분기 예측 방법
더 똑똑한 과거 기반의 미래 예측
히스토리를 이용한 분기 예측
프리디케이션
결론
참고문헌
Story 14. 가상 함수에 담긴 복잡함
들어가며
분기 목적지 예측
간접 분기문의 분기 목적지 예측
결론
참고문헌
Story 15. 효율적인 메모리 명령 실행 알고리즘
들어가며
효율적인 메모리 연산의 실행
컴파일러 최적화의 장애물 : 포인터
결론
참고문헌
Story 16. 메모리 레이턴시 감추기 : 프리펫처
들어가며
필요한 데이터를 미리 잘 가져오자
기본적인 소프트웨어 프리펫칭
포인터 기반 자료구조의 소프트웨어 프리펫칭
하드웨어 프리펫칭 알고리즘
결론
참고문헌
Story 17. VLIW로 살펴보는 두 변수 교환 방법
들어가며
VLIW의 철학
두 변수를 교환하는 방법에 대한 고찰
결론
참고문헌
Story 18. 프로그래머의 새로운 과제 : 병렬 프로그래밍
들어가며
병렬 프로그래밍은 선택이 아니라 필수
기본 개념 : 원자적 실행과 동기화 연산
멘델브로 집합으로 보는 병렬 프로그래밍
결론
참고문헌
Story 19. 골치 아픈 멀티스레드 버그 : 하이젠버그
들어가며
재현이 어려운 골치 아픈 버그
대표적인 병행성 버그 : 원자성 위반과 순서 위반
결론
참고문헌
Story 20. 어려운 병렬 프로그래밍, 그리고 그 미래는?
들어가며
비효율적인 병렬 프로그래밍 : 가짜 공유 문제
미래의 병렬 프로그래밍 방법론
결론
참고문헌
찾아보기
[출처 : 예스24 제공]
저자 소개
김민장
저자 : 김민장
저자 김민장은 C/C++ 언어와 윈도우 프로그래밍의 매력에 빠져 긴 시간 동안 취미로 혹은 직업으로 프로그래밍을 해오고 있다. 서울대학교에서 조선해양공학과 전산학을 전공하고 미국 조지아텍 전산학과에서 어떻게 하면 프로그래머가 병렬 프로그래밍을 더 쉽게 할 수 있을까라는 문제에 골몰하고 있다. 포시에스에서 웹 리포팅툴 소프트웨어를 개발하였으며, 인텔에서 프로그램의 병렬성을 분석하는 기법을 연구하였다.
[출처 : 인터넷 교보문고 제공]
'책 리뷰 > Computer Science' 카테고리의 다른 글
테트리스 이펙트 - 댄 애커먼 저 (0) | 2018.02.12 |
---|---|
우분투 환경에서 C언어로 배우는 리눅스 프로그래밍 - 이이오 준 저 (0) | 2018.01.24 |
실무에서 바로 통하는 자바 - 다케다 하루키 외 4명 저 (0) | 2017.08.10 |
폴리글랏 프로그래밍 - 임백준 저 (0) | 2017.08.04 |
CODE (하드웨어와 소프트웨어에 숨어 있는 언어) - 찰스 펫졸드 저 (1) | 2017.07.19 |