대량의 데이터를 처리해야 해서 여러 개의 스레드로 나눠서 처리하고 있는데
이상하게 20개의 스레드로 처리한 속도랑
3~4개의 스레드로 처리한 속도랑
아예 같네요;;
그냥 메인 스레드로 처리한 속도보단 빠르지만
갯수가 늘어난다고 해서 더 빨라지진 않습니다.
메인 스레드로 처리한 속도가 80초라면
멀티 스레드로 하면 갯수에 상관없이 30초입니다. 속도 극혐이죠?;;
작업 환경은 Visual Studio 2010이고 C++ CreateThread 쓰고 있습니다..
초보라서 검색해봐도 원하는 정보가 없고 갑갑하네요ㅜ
갯수->개수
코어 20개 짜리 시퓨 쓰나바여 부자시군여
동적할당은 개굴표 솔루션을 사용하면 속도가 향상될 가능성이 매우 높습니다
가격은 디버그 버전 포함 집 한채입니다
개수가 한계를 넘어서면 알아서 조율이 되나보군여 감사합니다ㅜ
일단 멀티 스레딩을 왜 쓸까를 생각해 봐야 됨. 가장 기본적인 쓰임은 UI Thread, Worker Thread, 그리고 Worker Thread도 작업 별로 단위를 구분하기 위해서 여러 스레드로 분리하기도 하는 건데. 너처럼 성능 향상을 위해 멀티 스레딩을 쓰는 경우는
스레드는 프로세서 코어 개수만큼 생성하고, 스레드마다 프로세서 하나씩 친화성 설정해 주고, 스레드 우선순위 올리는 게 할 수 있는 최대임. 그 이상으로 스레드 만든다고 해 봤자 득보단 실이 많지.
만일 저거보다 더 고속 처리해야 된다고 하면 그 땐 GPU 쪽도 알아봐야 됨.
그전에 omp 스케줄링 부터
자세한 답변 감사.. 스레드보단 극혐적인 코드들부터 고치는 쪽으로 가야겠네여
데이터[n]개 처리속도가 일정하지 않으면 최고는 한땀한땀 컨트롤이겠지만 귀찮으면 스레드풀 스케줄링 관련 검색
동적할당이 성능의 발목을 잡으면 개굴솔루셔을 사용
ㅋㅋㅋㅋㅋ
동적 할당이 성능의 발목을 잡으면 니꺼 쓸 바에야 VirtualAlloc 씀 ㅋㅋ (퍽)
그거 썼어 내부적으러
허접한 물건 아님
니 코드는 내부적으로 복잡한 처리를 할테니, 그거 쓰느니 걍 내가 직접 페이지 단위에 가깝게 많이 VirtualAlloc로 할당해서 쓰겠다는 거임.
허접한 물건이라는 게 아니라, 라이브러리를 안 쓰고 직접 짤 수록 좋다는 거임.
내꺼 쓰면 덜 귀찮고 실수도 많이 잡아준다
프로젝트마다 상황은 다 다르니깐.
그런데 사실 VirtualAlloc 자체는 시간 별로 안들어감
일회성 작업이면 걍 SETI@HOME 소스 분석해서 구닥다리 컴퓨터들에게 분산 처리하도록 하는게 더 나을듯.
좀 더 빠르게 하려면 VirtualAlloc 대신에 NtAllocateVirtualMemory의 서비스 콜 번호 알아낸 다음에 직접 SYSENTER 명령어로 커널 랜드로 점프~
ㅅㅅㅅ 이분 램640kb어쩌고 개소리 지껄이신 분 맞죠? ㅋㅋ
lock-free쪽으로 알아보는게 좋지 않으려나..?
http://www.slideshare.net/zzapuno/kgc2013-3
여기 참고.
코어갯수정도로잡고니알고리즘이쓰레드별로병렬처리를잘하는놈인가생각해봐요