○Memory Mountain

 ▷Spatial, temporal locality에 따른 Read throughput을 비교하기 위한 3차원 그래프

 ▷테스트 코드

 

 ▷결과

  ▷Spatial locality (Stride) : 읽는 간격이 커질수록 느려짐.

  ▷Temporal locality (Size) : 읽는 데이터 크기가 커질수록 상위 Cache에 데이터를 저장하지 못하고, 계단형식으로 느려지게 됨.

 

 

○Memory Performance Improvement

 ▶Spatial locality 개선

  ▷반복문의 순서/알고리즘을 바꿈으로 spatial locality를 개선할 수 있다.

  ▷열 접근 - 행 접근으로 바꿀수 있으면 spatial locality를 크게 개선 가능

  ◎Matrix Multiplication 알고리즘들

 

 ▶Temporal locality 개선

  ▷Block을 적게 읽어들이기 위해 Block 단위 Subloop를 만듬으로써 temporal locality를 개선할 수 있다.

  ◎Matrix Multiplication을 Block-Size로 subloop한 것.

   ▷cache miss : 2n/B × B2/8 = nB/4, nB/4 × (n/B)2 = 1/(4B) × n3

   ▷일반적인 Matrix Multiplication과 비교 : 9/8 × n3

'컴퓨터 지식 > 시스템' 카테고리의 다른 글

Library  (0) 2020.12.01
Linking  (0) 2020.12.01
Cache Memory  (0) 2020.11.19
Memory Hierarchy  (0) 2020.11.17
Locality  (0) 2020.11.17

○Thread

 ▷프로그래밍을 돕기 위해 동시에 독립적으로 실행되는 단위

 ▷process보다 가볍다. (한 Process는 여러 Thread를 가질 수 있다.

 

 

 ▶Thread 생성

  ▶1. Runnable Interface를 implement

   ▷public void run() 함수를 가지고 있다.

   ▷해당 함수가 종료되면, Thread는 종료된다.

   ▷만든 Runnable을 Thread의 생성자에 넣는다.

   ▷t.start() -> Thread 시작

 

  ▶Thread 상속

   ▷상속받은 class에서 run()을 정의한다.

   ▷해당 클래스의 객체를 만들고, start() -> 시작

 

 

 ▶Sleep - Thread.sleep(int ms)

  ▷Thread의 동작을 일시적으로 멈출 수 있다. (ms단위)

 

 

 ▶Interrupt - thread.interrupt()

  ▷해당 thread에서 interrupt 신호를 전달한다.

  ▷보통 thread를 종료시킬 때 자주 사용한다.

 

  ▶interrupt 동작 정의

   ▶catch (InterruptedException e)

    ▷interrupted하면 catch한다. (try ~ catch문)

 

   ▶thread.interrupted()

    ▷interrupt 당했다면 true, 아니면 false

    ▷if문에 넣어서 주로 체크한다.

 

 

 ▶Join - thread.join(int ms)

  ▷해당 thread가 끝날 때 까지 기다린다 (ms단위)

  ▷인자가 없거나, 0이라면 무한히 기다린다.

  ▷thread.isAlive()를 통해 살아있다면, join을 더 추가할수도 있다.

 

 

 ▶ReeentrantLock

  ▷import java.util.concurrent.locks.*

  ▷lock = new ReentrantLock()

  ▷Race Condition을 방지하기 위해 사용함.

   ▷Thread들은 한 Process에서 위치를 공유하기 때문에, 동시에 같은 변수/메소드를 참조하면 예상치 못한 결과가 일어날 수 있다.

 

  ▶lock(), unlock()

   ▷하나의 Thread가 bankLock.lock() 메서드를 호출하면, 다른 Thread는 lock()에 접근해도 unlock()되기 전까지 대기한다.

   ▷try 전에 lock을, finally에 unlock을 두고 try 내에 Critical section을 놓는다.

 

  ▶Condition Object

   ▷다른 쪽에서 signal을 보낼 때 까지 lock을 반환하고 대기할 수 있다.

   ▷condition = reentrantLock().newCondition()

   ▷condition.await() : signal을 받을 때 까지 대기한다.

   ▷condition.signalAll() : 모든 기다리는 Thread를 깨운다.

   ▷condition.signal() : 해당 condition를 깨운다.

 

  ▶synchronized

   ▷reentrantLock을 간단하게 표현 가능하다

 

 ▶ThreadLocal<T>

  ▷Thread는 위치를 공유하기 때문에, 같은 Thread Class는 변수들을 공유한다.

  ▷ThreadLocal<T> : Local 변수처럼 사용 가능

 

 

 ▶기타 메소드

  ▷Thread.currentThread() : 현재 Thread의 정보.

 

'컴퓨터 언어 > java' 카테고리의 다른 글

Network Programming  (0) 2020.12.08
Stream  (0) 2020.12.01
Process  (0) 2020.11.23
Exception  (0) 2020.11.19
Lambda Expression  (0) 2020.11.16

+ Recent posts