분류 전체보기
-
프로그램 카운터는 프로세서에 전원을 처음 공급하는 시점부터 전원을 끌 때까지 연속된 값들을 가정한다. 인스트럭션 Ik 에 대응되는 주소가 ak일 때 ak+1로의 전환을 제어이동이라고 부르고, 이러한 제어이동의 배열은 제어흐름이라고 한다. 점진적인 순서의 제어흐름은 Ik 와 Ik+1 이 메모리에서 서로 나란히 있는 경우다. Ik 와 Ik+1 이 인접해있지 않은 경우는 jump 나 call 인스트럭션이 발생한다. 시스템들은 내부 프로그램 변수에 의해 표시되지 않으며, 프로그램의 실행과는 관련 없는 시스템 상태의 변화에도 반응할 수 있어야 한다. 하드웨어 타이머는 규칙적인 간격으로 꺼지며, 시스템은 이것을 처리해야 한다. 패킷들은 네트워크 어댑터에 도착하고 메모리에 저장되어야 한다. 프로그램은 디스크로부터 데..
[CS] 예외 상황 및 프로세스 (Exceptions and Processes)프로그램 카운터는 프로세서에 전원을 처음 공급하는 시점부터 전원을 끌 때까지 연속된 값들을 가정한다. 인스트럭션 Ik 에 대응되는 주소가 ak일 때 ak+1로의 전환을 제어이동이라고 부르고, 이러한 제어이동의 배열은 제어흐름이라고 한다. 점진적인 순서의 제어흐름은 Ik 와 Ik+1 이 메모리에서 서로 나란히 있는 경우다. Ik 와 Ik+1 이 인접해있지 않은 경우는 jump 나 call 인스트럭션이 발생한다. 시스템들은 내부 프로그램 변수에 의해 표시되지 않으며, 프로그램의 실행과는 관련 없는 시스템 상태의 변화에도 반응할 수 있어야 한다. 하드웨어 타이머는 규칙적인 간격으로 꺼지며, 시스템은 이것을 처리해야 한다. 패킷들은 네트워크 어댑터에 도착하고 메모리에 저장되어야 한다. 프로그램은 디스크로부터 데..
2024.01.20 -
링킹(linking)은 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고, 실행될 수 있는 한 개의 파일로 만드는 작업이다. 컴파일 시 수행할 수 있으며 이때 소스코드는 머신코드로 번역된다. 주로 링커(linker)에 의해 실행되며 이는 각 소스파일들에 대해 독립적인 컴파일을 가능하게 한다. 컴파일러 드라이버 대부분의 컴파일 시스템은 사용자를 대신해서 언어 전처리기, 컴파일러, 어셈블러, 링커를 필요에 따라 호출하는 컴파일러 드라이버를 제공한다. (ex. gcc) 위 그림은 컴파일러 드라이버가 ASCII 소스 파일에서 Figure 7.1 프로그램을 실행 목적파일로 번역할 때 드라이버의 동작 내용을 요약한 것이다. C 전처리기(cpp)를 돌리고 소스 파일 main.c를 ASCII 중간 파..
[CS] 링킹, 목적 파일과 심볼 해석 (Linking)링킹(linking)은 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고, 실행될 수 있는 한 개의 파일로 만드는 작업이다. 컴파일 시 수행할 수 있으며 이때 소스코드는 머신코드로 번역된다. 주로 링커(linker)에 의해 실행되며 이는 각 소스파일들에 대해 독립적인 컴파일을 가능하게 한다. 컴파일러 드라이버 대부분의 컴파일 시스템은 사용자를 대신해서 언어 전처리기, 컴파일러, 어셈블러, 링커를 필요에 따라 호출하는 컴파일러 드라이버를 제공한다. (ex. gcc) 위 그림은 컴파일러 드라이버가 ASCII 소스 파일에서 Figure 7.1 프로그램을 실행 목적파일로 번역할 때 드라이버의 동작 내용을 요약한 것이다. C 전처리기(cpp)를 돌리고 소스 파일 main.c를 ASCII 중간 파..
2024.01.12 -
루프 풀기 루프 풀기는 루프의 매 반복 실행마다 계산되는 원소의 수를 증가시켜서 루프의 총 반복 횟수를 줄이는 프로그램 변환이다. 개선되는 점 루프 인덱스 계산과 조건부 분기와 같이 프로그램의 결과와는 직접적으로 관련이 없는 연산들의 수를 줄인다. 추가적인 최적화를 적용할 수 있게 된다. 2 x 1 루프 풀기 루프 한 번 마다 배열의 두 원소를 처리한다. 루프의 인덱스는 반복마다 2씩 증가한다. 벡터의 길이가 2의 배수가 아닐 가능성이 있으므로 임의의 벡터 길이에 대해서도 정확하게 동작해야 한다. 해결법은 루프의 한계를 n-1로 설정한다. k x 1 루프 풀기 위와 같이 임의의 인자 k에 대해 일반화할 수 있다. n-k+1를 한계로 설정한다. 2 x 1 루프 풀기에서 루프 오버헤드 연산을 줄여 정수 덧셈..
[CS] 루프 풀기 및 병렬성 높이기 (Loop unrolling)루프 풀기 루프 풀기는 루프의 매 반복 실행마다 계산되는 원소의 수를 증가시켜서 루프의 총 반복 횟수를 줄이는 프로그램 변환이다. 개선되는 점 루프 인덱스 계산과 조건부 분기와 같이 프로그램의 결과와는 직접적으로 관련이 없는 연산들의 수를 줄인다. 추가적인 최적화를 적용할 수 있게 된다. 2 x 1 루프 풀기 루프 한 번 마다 배열의 두 원소를 처리한다. 루프의 인덱스는 반복마다 2씩 증가한다. 벡터의 길이가 2의 배수가 아닐 가능성이 있으므로 임의의 벡터 길이에 대해서도 정확하게 동작해야 한다. 해결법은 루프의 한계를 n-1로 설정한다. k x 1 루프 풀기 위와 같이 임의의 인자 k에 대해 일반화할 수 있다. n-k+1를 한계로 설정한다. 2 x 1 루프 풀기에서 루프 오버헤드 연산을 줄여 정수 덧셈..
2024.01.12 -
최적화된 프로그램은 원본 프로그램이 겪게 될 모든 경우에 대해 C언어 표준이 제공하는 보장의 한계까지 정확히 동일한 동작을 가져야 하기 때문에 컴파일러는 오직 안전한 최적화만을 적용해야 한다. gcc의 -Og 옵션은 기본 최적화 세트를 적용하고, -01 이나 -02 , -03 옵션은 보다 광 범위한 최적화를 적용한다. 프로그램의 성능을 개선할 수 있으나, 크기가 커질 수 있으며 표준 디버거를 사용 한 디버깅이 어려워질 수 있다. 책에서는 컴파일러의 최적화 영향을 보기 위해 -01 옵션으로 컴파일하여 제한한다. 컴파일러가 방어적으로 최적화 해야만 하는 이유에 대한 예시를 알아보자. 최적화 한계 예시 1 위의 코드에서 twiddle1() 은 포인터 역참조를 6번 하고 있다. *xp = *xp + *yp; *..
[CS] 컴파일러의 최적화 성능과 한계 (Optimizing Compilers)최적화된 프로그램은 원본 프로그램이 겪게 될 모든 경우에 대해 C언어 표준이 제공하는 보장의 한계까지 정확히 동일한 동작을 가져야 하기 때문에 컴파일러는 오직 안전한 최적화만을 적용해야 한다. gcc의 -Og 옵션은 기본 최적화 세트를 적용하고, -01 이나 -02 , -03 옵션은 보다 광 범위한 최적화를 적용한다. 프로그램의 성능을 개선할 수 있으나, 크기가 커질 수 있으며 표준 디버거를 사용 한 디버깅이 어려워질 수 있다. 책에서는 컴파일러의 최적화 영향을 보기 위해 -01 옵션으로 컴파일하여 제한한다. 컴파일러가 방어적으로 최적화 해야만 하는 이유에 대한 예시를 알아보자. 최적화 한계 예시 1 위의 코드에서 twiddle1() 은 포인터 역참조를 6번 하고 있다. *xp = *xp + *yp; *..
2023.12.21 -
개념 협력적 멀티 프로세스 및 멀티 스레드는 공유 데이터를 동시에 접근하면 그 결과가 접근 순서에 의존되어 데이터의 일관성을 망칠 수 있다. 따라서 이들의 질서있는 실행을 보장하여, 데이터의 일관성을 유지해야 한다. 멀티 프로세스와 멀티 스레드에 대한 자세한 내용은 아래의 링크 참고 [UNIX] 멀티 프로세스 (Multi Process) 프로그래밍 개념 프로세스란 실행 중인 프로그램(실행 파일)이자, 현대의 컴퓨팅 시스템에서 작업의 단위이다. 프로세스는 실행되는 동안 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성하는 프로세 sikpang.tistory.com [UNIX] 멀티 스레드 (Multi Thread) 프로그래밍 개념 프로세스 내에서 실행되는 흐름을 말한다. 기본적으로 하나의 프로세스에는 ..
[UNIX] 멀티 프로세스 및 스레드 공유 데이터 동기화개념 협력적 멀티 프로세스 및 멀티 스레드는 공유 데이터를 동시에 접근하면 그 결과가 접근 순서에 의존되어 데이터의 일관성을 망칠 수 있다. 따라서 이들의 질서있는 실행을 보장하여, 데이터의 일관성을 유지해야 한다. 멀티 프로세스와 멀티 스레드에 대한 자세한 내용은 아래의 링크 참고 [UNIX] 멀티 프로세스 (Multi Process) 프로그래밍 개념 프로세스란 실행 중인 프로그램(실행 파일)이자, 현대의 컴퓨팅 시스템에서 작업의 단위이다. 프로세스는 실행되는 동안 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성하는 프로세 sikpang.tistory.com [UNIX] 멀티 스레드 (Multi Thread) 프로그래밍 개념 프로세스 내에서 실행되는 흐름을 말한다. 기본적으로 하나의 프로세스에는 ..
2023.12.12 -
본 포스팅은 Lode's Computer Graphics Tutorial: Raycasting(이하 레퍼런스)을 보고 정리한 글입니다. 또한, 창을 띄우고 그래픽을 랜더링하는 부분은 본 포스팅에서 다루지 않습니다. 개념 카메라에서 각 픽셀을 통과하는 가상의 광선을 쏘아 무엇이 보이는지 결정하는 기법이다. 이를 통해 2차원 맵에서 원근감을 포현한 3D 랜더링을 할 수 있다. 레이캐스팅 기술을 사용한 게임은 Wolfenstein 3D, Doom 등이 있다. 알고리즘 2차원 맵이 존재하고, 플레이어(카메라)의 위치에서 플레이어가 바라보는 방향으로 모든 x축 픽셀을 대상으로 가상의 광선을 쏜다. 광선이 벽과 충돌하면 수직의 벽을 그리는데, 플레이어와의 거리에 따라서 벽의 높이를 정한다. 벽의 높이를 구하면 모니..
[CG] 레이캐스팅 (Ray casting) 이해 및 구현본 포스팅은 Lode's Computer Graphics Tutorial: Raycasting(이하 레퍼런스)을 보고 정리한 글입니다. 또한, 창을 띄우고 그래픽을 랜더링하는 부분은 본 포스팅에서 다루지 않습니다. 개념 카메라에서 각 픽셀을 통과하는 가상의 광선을 쏘아 무엇이 보이는지 결정하는 기법이다. 이를 통해 2차원 맵에서 원근감을 포현한 3D 랜더링을 할 수 있다. 레이캐스팅 기술을 사용한 게임은 Wolfenstein 3D, Doom 등이 있다. 알고리즘 2차원 맵이 존재하고, 플레이어(카메라)의 위치에서 플레이어가 바라보는 방향으로 모든 x축 픽셀을 대상으로 가상의 광선을 쏜다. 광선이 벽과 충돌하면 수직의 벽을 그리는데, 플레이어와의 거리에 따라서 벽의 높이를 정한다. 벽의 높이를 구하면 모니..
2023.12.08 -
개념 프로세스 내에서 실행되는 흐름을 말한다. 기본적으로 하나의 프로세스에는 하나의 스레드가 실행되지만, 여러 개의 스레드를 생성할 수 있으며, 이는 동시에 여러 개의 작업을 수행할 수 있다. 이를 멀티 스레드(다중 스레드)라고 한다. 같은 프로세스의 스레드들은 코드, 데이터, 파일, 힙 등의 메모리를 공유한다. 하지만 자신만의 고유한 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택을 가진다. 단일 컴퓨팅 칩에 여러 코어를 배치하는 다중 코어 시스템에서는 처리 능력을 향상시키도록 다수의 CPU 집중 작업을 병렬로 처리할 수 있다. 하지만, 단일 코어 시스템에서는 멀티 스레딩 프로그램을 동시성으로 작업할 수밖에 없다. 멀티 스레드의 활용의 예로 게임 로딩 창을 구현할 때, 데이터들을 로드하고 ..
[UNIX] 멀티 스레드 (Multi Thread) 프로그래밍개념 프로세스 내에서 실행되는 흐름을 말한다. 기본적으로 하나의 프로세스에는 하나의 스레드가 실행되지만, 여러 개의 스레드를 생성할 수 있으며, 이는 동시에 여러 개의 작업을 수행할 수 있다. 이를 멀티 스레드(다중 스레드)라고 한다. 같은 프로세스의 스레드들은 코드, 데이터, 파일, 힙 등의 메모리를 공유한다. 하지만 자신만의 고유한 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택을 가진다. 단일 컴퓨팅 칩에 여러 코어를 배치하는 다중 코어 시스템에서는 처리 능력을 향상시키도록 다수의 CPU 집중 작업을 병렬로 처리할 수 있다. 하지만, 단일 코어 시스템에서는 멀티 스레딩 프로그램을 동시성으로 작업할 수밖에 없다. 멀티 스레드의 활용의 예로 게임 로딩 창을 구현할 때, 데이터들을 로드하고 ..
2023.12.06 -
개념 파이프는 두 프로세스가 통신할 수 있게 하는 전달자로, UNIX 기반 운영체제에서 제공하는 프로세스 간 통신 (Inter-Process Communication, IPC) 기법 중 하나이다. 멀티 프로세스에 대한 자세한 설명은 아래의 링크 참고. [UNIX] 멀티 프로세스 (Multi Process) 프로그래밍 개념 프로세스란 실행 중인 프로그램(실행 파일)이자, 현대의 컴퓨팅 시스템에서 작업의 단위이다. 프로세스는 실행되는 동안 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성하는 프로세 sikpang.tistory.com 사용법 #include int pipe(int pipefd[2]); pipe()의 인자로 파이프의 fd가 들어갈 크기 2개짜리 int 배열을 받는다. pipe()가 성공하면..
[UNIX] 파이프 (Pipe) 제대로 사용하기개념 파이프는 두 프로세스가 통신할 수 있게 하는 전달자로, UNIX 기반 운영체제에서 제공하는 프로세스 간 통신 (Inter-Process Communication, IPC) 기법 중 하나이다. 멀티 프로세스에 대한 자세한 설명은 아래의 링크 참고. [UNIX] 멀티 프로세스 (Multi Process) 프로그래밍 개념 프로세스란 실행 중인 프로그램(실행 파일)이자, 현대의 컴퓨팅 시스템에서 작업의 단위이다. 프로세스는 실행되는 동안 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성하는 프로세 sikpang.tistory.com 사용법 #include int pipe(int pipefd[2]); pipe()의 인자로 파이프의 fd가 들어갈 크기 2개짜리 int 배열을 받는다. pipe()가 성공하면..
2023.12.04