stddb
close
프로필 사진

stddb

github: @denev6

  • 분류 전체보기 (235)
    • TIL (15)
    • WIL (9)
    • 별 잡다 (29)
    • 문제풀이 (71)
    • 구현하기 (38)
      • Unity (8)
    • 컴퓨터 이론 (54)
      • CS:APP (28)
      • Unity (4)
    • with Nest (4)
  • 홈
  • 태그
  • 방명록

유니버설 해싱

무언가를 고를 때 랜덤으로 고르는게 차라리 최악은 피한다라는 재밌는 논함이 있어서 글을 쓰게 되었다. 우리는 해쉬 테이블을 이용 한다면 해쉬 함수를 당연하게 고려해야하는데, 이 유니버설 해싱이 저점 성능으로 가진 않도록 할 수 있다고 한다. 해쉬 테이블을 만들 때 해쉬 함수 하나를 매핑해야하는데, 이것을 테이블마다 다르게 할당 시킨다.이렇게 하면 최악의 시간 복잡도를 피하면서 해쉬 함수 어뷰징을 피할 수 있다.나쁜 사용자들은 해쉬 함수의 내용을 알아낸다음 거기에 충돌을 계속 일으켜서 성능을 일부러 저하 시킬 수 있었다. 제로 이런 사건이 일어난 이후 PHP에서의 해쉬 테이블을 이용 할 때는 유니버설 해싱 개념의 해쉬 함수를 제공한다.파이썬도 Dictionary 자료 구조에 랜덤 시드 개념을 적용해오고 있..

  • format_list_bulleted 컴퓨터 이론
  • · 2025. 9. 11.

Input Cash to get Cache [CSAPP Chap 6]

돈을 많이 쓰면 캐시 메모리를 많이 얻을 수 있다. 그냥 같잖은 라임을 쓴게 짜증난다면 내 의도대로 된거니까 너무 놀라지 마라. 이런걸 어디다간 풀어놓는게 내 다음 생각을 하는데 있어 걸림돌이 되지 않는다.지역성간 지역성 : 방금 접근한 데이터는 곧 다시 접근될 가능성이 높다."방금 사용된 것 위주"로 데이터를 캐시에 두는 것, 즉 최근에 사용된 데이터를 유지하는 전략을 활용한다. 방금 쓴 변수는 곧바로 다시 쓸 확률이 높을 것이니까!!공간 지역성 : 방금 접근한 데이터의 근처에 있는 데이터가 곧 접근될 가능성이 높다.만약 프로그램이 배열[0]에 접근했다면, 공간 지역성에 따라 곧 배열[1], 배열[2]... 에 접근할 확률이 매우 높다. 캐시 메모리컴퓨터의 저장장치는 하나가 아니라, 속도, 용량, 가격..

  • format_list_bulleted 컴퓨터 이론/CS:APP
  • · 2025. 9. 1.

컴퓨터를 덜 느리게 하는 방패 [CSAPP Chap 5]

앞의 글에서 다루었던 문제들은 명시적인 처리 내지 맥락에 맞는 작성으로 해결 할 수 있다. 컴파일러들이 이렇게 보수적으로 접근하는 것을 고려하면 TypeScript는 어쩌면 컴파일러 친절에 특화된 언어가 아닐까라는 생각이 든다. 한두줄 차이의 다른 최적화 기법을 논해보자.코드 이동 (Code Motion)가장 기본적이고 강력한 최적화 기법 중 하나이다. 루프 안에서 반복적으로 수행되지만 결과가 변하지 않는 계산을 찾아 루프 밖으로 빼내는 것이 주된 내용이다.for (int i = 0; i 예를 들어 아래와 같은 코드는 매번 같은 결과를 낼 x y를 반복문 밖으로 빼둠으로써 약간의 시간을 벌 수 있다.// 2차원 배열의 모든 요소에 (x * y)를 곱하는 함수void scale_matrix(int *mat..

  • format_list_bulleted 컴퓨터 이론/CS:APP
  • · 2025. 9. 1.

컴퓨터를 느리게 하는 창 [CSAPP Chap 5]

여기서 논하는 내용들은 의외로 꼼수라고 느껴질정도로 별거 아닌 기법이지만 그런 플로우들이 많이 사용 될 때 아낄 수 있는 cost는 무시하지 못한다고 생각한다. 우리는 그런 최적화를 유발하는 일이 뭐가 있는지부터 알아본다.우리가 아무리 멋진 최적화 기법을 알고 있어도, 컴파일러가 왜 코드를 마음대로 최적화하지 못하는지 이해하는 것이 중요하다. 보통은 두 가지 원인이 있다.메모리 앨리어싱 (memory aliasing)함수 호출 (function calls) 메모리 앨리어싱 | Memory Aliasing메모리 앨리어싱은 서로 다른 이름(포인터)이 사실은 동일한 메모리 위치를 가리키는 상황을 말한다. 앨리어스(alias)가 '별명'이나 '가명'이라는 뜻인 걸 생각하면 이름에서 유추하기가 괜찮다.컴파일러는 ..

  • format_list_bulleted 컴퓨터 이론/CS:APP
  • · 2025. 9. 1.

나노미터 단위로 배관공사하기 [CSAPP Chap 4]

제목이 난해하게 느꼈다면 그럴 수 있다. 하지만 파이프라인을 생각하고 왔다면 당신도 난해한 것이다. 축하한다. 난해의 Depth가 있다는 것은 사람을 이해 할 수 있는 폭이 넓은 것이다. 아무래도 나는 타로 집을 차려서 여러분들이 고른 카드에 따라 프로젝트를 추천해줘야겠다.파이프라이닝 : CPU의 효율 극대화하기예시로 언급되는 SEQ 프로세서는 한 명령어의 1~6단계를 모두 끝내야만 다음 명령어를 진행한다. 이것은 비효율적이다.요즘은 파이프라이닝을 사용한다. 아래와 같은 예시를 보자.1번 사이클: 1번 명령어 인출(Fetch)2번 사이클: 2번 명령어 인출 & 1번 명령어 해독(Decode)3번 사이클: 3번 명령어 인출 & 2번 명령어 해독 & 1번 명령어 실행(Execute)이렇게 함으로써 이상적으로..

  • format_list_bulleted 컴퓨터 이론/CS:APP
  • · 2025. 8. 31.

Young한 Y86-64로 구조 알아보기 [CSAPP Chap 4]

4장에 돌입함으로써, 현대 CPU의 핵심인 파이프라이닝이 왜 필요한지와 어떻게 성능을 극대화 하는지를 알아본다. 5장도 동시에 하고 있는데, 진짜 이렇게까지 해야 1KB씩 줄이는구나라는 마음에 보다 램 용량 걱정을 덜 하는 시대에 태어난 것은 다행이라고 생각한다.x86-64를 단순화 한 Y86-64 명령어 집합(ISA)를 살펴보자. 수십 년에 걸쳐 기능이 추가된 x86-64와 달리 교육용 모델 엔진을 사용하는 개념이다.데이터 이동 (Move):irmovq: immediate → register (상수 값을 레지스터로)rrmovq: register → register (레지스터 간 이동)mrmovq: memory → register (메모리에서 레지스터로)rmmovq: register → memory (레..

  • format_list_bulleted 컴퓨터 이론/CS:APP
  • · 2025. 8. 31.
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • ···
  • 40
  • navigate_next
공지사항
  • WHO I AM
전체 카테고리
  • 분류 전체보기 (235)
    • TIL (15)
    • WIL (9)
    • 별 잡다 (29)
    • 문제풀이 (71)
    • 구현하기 (38)
      • Unity (8)
    • 컴퓨터 이론 (54)
      • CS:APP (28)
      • Unity (4)
    • with Nest (4)
인기 글
전체 방문자
오늘
어제
Copyright © pwerty 모든 권리 보유.
SKIN: Copyright © 쭈미로운 생활 All rights reserved. Designed by JJuum.
and Current skin "dev-roo" is modified by Jin.

티스토리툴바