Computer Science

    [CSAPP] 6.2 Locality(지역성)

    6.2 Locality(지역성) 잘 작성된 컴퓨터 프로그램은 좋은 지역성(Locality)을 보이는 경향이 있다. 즉 최근에 참조된 데이터 항목을 참조하는 경향을 가진다. 지역성(Locality)의 원칙으로 알려진 이러한 경향은 하드웨어 및 소프트웨어 시스템의 설계와 성능에 막대한 영향을 미치는 지속적인 개념이다. 지역성(Locality)은 일반적으로 두 가지 다른 형태를 갖는다. 시간적 지역성(temporal locality): 시간적 지역성이 좋으면 한 번 참조된 메모리 위치는 가까운 미래에 여러 번 다시 참조될 가능성이 높다. 공간적 지역성(spatial locality) 공간적 지역성이 좋으면 메모리 위치가 참조되는 경우 다른 데이터 항목에 가깝거나 최근에 참조된 데이터 항목을 참조하는 경향이 있..

    [CSAPP] 6.1 Storage Technologies(저장장치 기술)

    6.1 Storage Technologies(저장장치 기술) 시간이 지남에 따라 저장장치의 크기는 매년 2배씩 증가하고 있고 속도도 빨라지고 있다 6.1.1 Random Access Memory(랜덤 엑세스 메모리) [RAM] RAM은 두 종류가 있다. 정적인 SRAM: 동적램 DRAM 보다 빠르고 훨씬 비싸다. 캐쉬메모리로 사용된다. 동적인 DRAM: 메인메모리와 그래픽 시스템의 프레임 버퍼로도 사용된다. Static RAM [SRAM] SRAM은 각 비트를 bistable(이중안정) 메모리 셀에 저장한다. 각 셀은 6개의 트랜지스터 회로로 구성된다. 이 회로는 두 개의 서로 다른 전압 구성 또는 상태 중 하나(on/off)에서 무한정 유지(정적인 이유)될 수 있는 특성을 가지고 있다. 이러한 메모리 ..

    [CSAPP] Chapter 06. The Memory Hierarchy(메모리 계층구조)

    Chapter 06. The Memory Hierarchy(메모리 계층구조) 우리는 지금까지 메모리 시스템이 선형 배열이고 CPU가 각 메모리 위치에 바로 접근할 수 있다고 가정해왔다. 실제 메모리 시스템은 용량(capacity), 비용(costs), 접근시간(access time)을 갖는 저장장치들의 계층구조이다. CPU 레지스터는 가장 자주 사용되는 데이터를 저장. 캐시메모리는 메인메모리에 저장된 데이터 및 instruction에 대한 준비장소 메인메모리는 크고 느린 디스크에 저장된 데이터를 가져다 씀. 아래 그림처럼 계층구조가 구성되어 있고 빈도, 속도, 가격, 용량이 각기 다르다. 프로그래머가 프로그램의 효율을 높이기 위해서는 이 구조를 이해하고 있어야 한다. 낮은 단계의 저장공간(디스크 방향)일..

    [CS50] 2진법

    컴퓨터 과학 - 문제 해결에 대한 학문 - 문제해결이란 input(입력)을 전달 받아 output(출력)을 만들어내는 과정 - 그 과정이 바로 컴퓨터 과학 2진법 - 우리는 일상에서 0 1 2 3 4 5 6 7 8 9 총 10개의 기호로 표현하는 10진법을 이용 - 컴퓨터에서는 0 1 총 2개의 기호로 표현하는 2진법을 이용 - 컴퓨터는 2진법만으로 글자, 사진, 영상, 소리 등을 저장 - 우리는 위 사진처럼 123이라는 기호를 백이십삼이라 읽음. - 이는 1을 백의자리 2를 십의자리 3을 일의자리로 인지하고 있기 때문. - 이러한 표현을 당연하게 인지하는데 이는 약속되어있기 때문. - 자리수를 10의 거듭제곱으로 표현하기로 약속한 것. - 그렇다면 2진법에서는 두 개의 숫자만 있으므로 각 자리수가 2의..

    [CSAPP] 5.13 Life in the Real World: Performance Improvement Techniques(실제상황: 성능개선 기술)

    5.13 Life in the Real World: Performance Improvement Techniques(실제상황: 성능개선 기술) 여기에선 지금까지 언급했던 성능 최적화 기술에 대해 간략하게 언급만 다시 하고 넘어갈 것이다. High-level Design 알맞은 알고리즘과 자료구조를 선택 → 점근적으로 봤을 때 빈약한 성능의 알고리즘을 피해야 한다. Basic coding principles 불필요한 함수 호출을 제거 → 성능(효율)을 위해 프로그램 모듈성과 어느정도의 타협을 봐라 불필요한 메모리 접근을 제거 → 임시 변수를 사용하여 중간단계의 결과를 유지해라. Low-level Optimizations (하드웨어 능력을 이용하는 코드를 구성) Unroll Loops → 루프의 오버헤드를 줄..