Jonathan E. Steinhart 의 <한 권으로 읽는 컴퓨터 구조와 프로그래밍>을 읽고 정리하는 온라인 책터디.
매주 2 챕터씩 진행합니다.
요약된 내용은 모두
Jonathan E. Steinhart. (2021). 한 권으로 읽는 컴퓨터 구조와 프로그래밍(오현석, 역). 경기: 책만. (원서 2019년 발행)
>>> 책터디 _6주차
계산을 피하는 두가지 방법. 지금길shortcut과 근삿값 계산approximating
컴퓨터의 계산 자원을 효율적으로 사용한다는 말은 필요보다 더 많은 계산을 수행하지 않는다는 것.
직접 계산보다 표에서 찾아내기가 더 빠른 경우.
미리 계산 뒤 반복 사용이 합리적이라는 면에서, 8장
루프 불변값 최적화
와 비슷.
Ex) 온도와 전압의 관계를 예로 보면, 곡선의 관계. 공식은 계산 비용이 비싼 자연로그 등 이므로. 계산을 생략하자.
-> 모든 계산을 없애기 위해 1,024바이트짜리 표가 있으면 된다.
비디오 게임이나 영화 등에서 이미지를 만드는 텍스처 매핑에도 표 찾기 기법이 중요 역할.
MIP 매핑
: 뉴욕 공과대학 그래픽 언어 실험실의 랜스 윌리엄스(Lance Williams)가 고안.
32비트 시스템에서 3색을 나열하면 1/4 공간 낭비에 주목. 남는 공간에 이미지의 복사본을 계속 넣는 방식.
자주 사용할 정보를 미리 계산해 두는 것. 저해상도 텍스처. 는 루프 불변값 최적화와 비슷하다.
어떤 글자가 숫, 문자 등 어떤 분류에 속하는지 판별하는 문자 종류 판별은 어휘 분석에서 중요한 부분.
-아스키 코드 표를 작성하는 세가지 문자 종류 판별 코드의 방법
변환(transformation) : 현대 컴퓨터 그래픽 시스템들은 이믜로 좌표계를 변환하도록 지원
Ex) 모든 (x,y) 좌표에 대해 변환을 적용하여 화면 좌표(x', y')로 변환(affine).
x' = Ax + By + C
y' = Dx + Ey + F
C 와 F : 평행이동(translation)에 쓰인다. 물체의 각 점을 축 방향으로 나란히 움직인다.
A 와 E : 크기 변환(scaling)에 기여. 물체의 크기 확대 하거나 축소.
B 와 D : 회전(rotation)에 기여. 물체를 돌린다.
이를 행렬 형태로 표현할 수도 있다.
재귀적 분할을 사용해 최소한의 작업으로 목적 달성하는 방법
자바스크립트 등에서 제공하는 수학 라이브러리에 있는 삼각함수는 도가 아니라 라디안(radian, π) 단위로 각도를 입력 받는다.
쿼드트리에 불리언 함수를 적용하면 간단한 기하학적 요소를 복잡한 모양으로 만들수 있음
구조적 입체 기하(constructive solid geometry) : 3차원은 2차원보다 노드가 2배 더 필요. 쿼드트리를 옥트리(octree)로 확장.
복셀(voxel) : 부피가 있는 픽셀(volume pixel). 2차원 픽실에 대응하는 3차원 요소
복잡한 회피 기법
테일러 급수(Taylor series) : 사인 함수를 계산하는 다른 방법. 항의 수를 늘리면 테일러 급수가 이상적 사인 함수에 가까워짐.
컨베어(Convair)의 잭 볼더(Jack Volder). 1956년 좌표 회전 디지털 컴퓨터(CORDIC, Coordinate Rotation Digital Computer) 알고리즘 개발. 폭격기 항법 시스템의 아날로그 부품을 정확하게 대신하기 위해 고안.
삼각함수, 로그함수 계산.
-벡터링모드(vectoring mode) : 다른 버전의 CORDIC 알고리즘
-회전모드(rotation mode) : 좀 더 이해하기 쉬움.
컴퓨터에서 완전한 난수(임의의 수)를 계산하기는 아주 어렵다. 난수를 만들려면 어떤 공식을 기반으로 생성해야 하는데, 정해진 공식으로 생성한 난수는 반복적일 수 밖에 없다.
의사난수성(pseduorandomness)을 활용한 몇 가지 근삿값 계산 방법.
프로그램이 자원 사용 순서에 따라 결과가 달라지는 경우. 공유자원(shared resource)에 접근 하는 타이밍에 따라 달라진다.
메모리는 항상 공유 문제와 관련된 경우.
입출력(I/O) 장치 하드웨어 들어있는 어떤 비트일 수도 있다.
병렬로 실행되는 프로그램이 자원을 공유해야 경합 조건이 발생.
자원을 공유하는 프로세스들은 어떤 방식으로든 서로 통신을 해야 한다.
스레드(thread)
: 정적인 데이터와 힙을 공유. 자체적으로 스택을 갖는 프로그램의 일부분 의미.