본문 바로가기

멀티코어 프로그래밍46

Pthread Attributes(2) 스레드의 종류 두 종류의 스레드 Joinable vs Detached Joinable 스레드 pthread_create 시 생성되는 스레드의 기본 성질 스레드 종료 시 pthread_join을 통해 다른 스레드에서 자원을 반환해줘야 함 스레드의 종료 시점을 다른 스레드에서 알 필요가 있을 때 스레드의 함수 반환값을 다른 스레드에서 사용할 필요가 있을 때 Detaced 스레드 스레드 종료 시 자신의 자원을 스스로 반환 다른 스레드와 독립적인 작업을 수행하는 스레드를 사용할 때 Detached 스레드의 구현 thread_attribute를 사용하는 방법 pthread_detach를 사용하는 방법 Attribute를 사용한 detached 스레드 pthread_attr_init(pthread_attr_t *a.. 2022. 5. 18.
Pthread Attributes(1) Pthread Attributes ##스레드 속성 int pthread_create(pthread_t *thread, const pthread_attr_t *att, void(* start_routine)(void *), void *arg) pthread_attr_t 스레드 속성 타입 새로 생성되는 스레드의 속성을 설정 Atrribute를 사용하여 설정 가능한 속성의 예시 Detached 스레드의 생성 User mode / Kernel mode 스레드의 생성 스레드의 stack size 설정 스레드 종료와 자원 회수 pthread_join의 기능 스레드 자원 반환 스레드 종료 여부 확인 스레드가 종료될때까지 pthread_join 함수가 끝나지 않음 thread 0 은 thread 1 이 끝날 때까지 b.. 2022. 5. 17.
Pthread 동기화(1) Pthread 동기화 Spinlock 록을 요청한 스레드가 CPU를 점유한 상태로 록이 해제될때까지 계속 록을 확인함 록이 해제되자마자 스레드는 진행 록이 짧은 시간동안 점유되는 경우 시간을 절약할 수 있음 문맥 교환 없이 스레드가 계속 록을 점검하는 동안 CPU 사이클을 소비 단일 프로세서 시스템에서는 사용 불가 Sleeplock 록을 요청한 스레드는 block되고 록이 해제되었을 때 그 스레드는 ready 상태로 이동 단일 프로세서 시스템에서 사용 가능 록이 오랫동안 점유되는 경우 CPU 시간을 절약할 수 있음 lock 이해하기 쉽고 사용하기 쉬움 교착 상태를 유발할 수 있음 우선 순위 역전의 문제 비싼 비용 lock에 의한 deadlock 우선 순위 역전(Priority Inversion) 하나의 .. 2022. 5. 15.
Pthread를 이용한 병렬화 Pthread를 이용한 병렬화 행렬 곱셈의 병렬화 NDIM x NDIM double 행렬 A, B를 받아 행렬 곱 연산 수행 결과를 C에 저장 다양한 병렬화 기법이 존재하지만 가장 간단한 방법으로 수행 A의 row들 중 일부를 취함 B 전체를 읽음 C의 row들 중 일부를 계산 행렬 a,b,c를 전역변수로 선언한 후 각 스레도 할당해 주기 위해 구조체에도 선언해 준다. worker함수에서 각 스레드별로 a 행렬의 일부분을 취하여 행렬 곱을 수행한다. 실행결과 병렬화할 경우 약 4배 빨라짐을 알 수 있다. 2022. 5. 13.
Pthread Affinity Pthread Affinity 동종 멀티코어 CPU 구조 여러 개의 코어가 하나의 칩을 구성 한 시스템에 여러 개의 칩이 장착될 수도 있음 각 코어마다 개별로 캐시가 있고(L1) 한 칩의 코어가 공유하는 캐시가 있음(L2, L3) SMT 코어 하나가 두 개 이상의 스레드를 동시에 실행 수평적 낭비와 수직적 낭비를 모두 막음 issue width를 최대한 활용 Hiyper-threading 한 코어에서 두 스레드를 동시에 실행 가능 스레드가 데이터를 공유하는 경우 T1, T2가 데이터 A를 공유하고 T3, T4가 데이터 B를 공유하는 경우 Thread Affinity 스레드가 지정된 코어에서만 실행되도록 함 코어를 하나만 지정할 수도 있고("여기서 실행해라") 여러 개 지정할 수도 있고("이 중 한 군데서.. 2022. 5. 12.
Pthread 프로그래밍(3) Pthread 프로그래밍 ex1) 아규먼트 n을 받아 Factorial을 구하여라 n을 fact 함수의 아규먼트로 넘겨준다. fact 함수에서 n에 대한 factorial 값을 계산한 후 동적 할당 받은 ret 변수에 저장하고 return 한다. ret 은 Heap영역에 존재하기 때문에 fact 함수가 끝나도 사라지지 않게 되고 Main 함수로 return 값이 올바르게 전달된다. 실행결과 올바르게 값이 출력되었음을 알 수 있다. ex2) pthread_create를 실행하는 함수와 pthread_join을 실행하는 함수가 다를 경우 caller 함수로 t1과 n을 아규먼트로 전달한다.(이 때 n의 주소값을 아규먼트로 넘겨주어야 한다!) caller 함수에서 pthread_create 함수를 호출하고 f.. 2022. 5. 11.
728x90