2019년 3월 8일 금요일

병렬 프로그래밍 관련 고려

Stack

스택은 모든 contention이 top pointer에 있기 때문에 멀티쓰레드 환경에서는 빨라질 여지가 없다.

소거 방법에서는 굳이 스택에 들어가야 되느냐
push가 가지고 있는 데이터를 pop으로 전달해주기만 하면 됨

Malloc

Google 에서 만든 tcmalloc
Facebook에서 만든 jemalloc

CUDA

SIMD,SSE,AVX 랑 비슷
모든 코어가 똑같은 일 밖에 못함
메모리도 부족함(1기가가 보통)
확장성이 떨어짐
게임서버에서 처리하기는 무리
(함수 몇 개 이상 사용 X, 뎁스 제한도 있음)

큰 벡터나 큰 매트릭스 연산이 아니고서는 별 용도가 없음
한 때는 물리엔진에 적용시켜 보려 했으나 Memory 부터 박살, memcpy 오버헤드가 너무 큼, thread safe api(멀티쓰레드 환경에서 collision 체크를 자주 해야 되는데 응답이 바로 오지 않음 memcpy 때문에 결국 블로킹 호출이 되어 버림)
클라이언트 사이드에서 post processing에 쓴다.(그린 다음에 그린 결과 후처리)


APU는 똑같은 메모리를 보기 떄문에 memcpy 는 없다,