2018년 11월 4일 일요일

std::launch::async VS ThreadPool

이번에 std::lauch::async와 ThreadPool의 성능을 간단하게 비교해 볼 일이 있었는데..

결과부터 말하면 내가 테스트한 환경에서는 ThreadPool 이 더 좋았다.

CPU를 고르게 쓴 것도 ThreadPool 쪽이 좀 더...


std::lauch::async의 cpu 사용 그래프

ThreadPool의 cpu 그래프

수행 시간은 ms 단위다
Loopstd::launch::asyncThreadPool: 6개 스레드ThreadPool: 12개 스레드
20,00029,753,41428,068,95228,290,221
20,00030,571,60127,823,25129,157,295
100,000147,357,532136,098,045141,674,844
100,000148,868,279136,130,447141,939,465

아래에서는 visual stduio 2017 환경에서 조사식의 @CLK를 활용한 수행시간 체크도 가볍게 말씀드린다.
테스트 CPU는 아래 링크해뒀다.

테스트에 사용했던 ThreadPool은 아래 링크다. 일부 변경된 상태로 테스트 했다.싱글톤 패턴을 넣었다던가, 스레드 개수를 생성자가 아니라 따로 함수를 만들어서 받으면서 시작했다던가..

std::lauch::async 테스트 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const int ThreadLoopMax = 100000;
int main(void)
{
    auto func = [&]()
    {
          // 테스트를 위한 람다 함수
    };
    // 수행시간 체크 시작하는 부분
    cout << "start" << "\n";
    for (int tLoop = 0; tLoop < ThreadLoopMax; tLoop++)
    {
        std::future<void> ret = std::async(std::launch::async, func);
        ret.get();
    }
    // 수행시간 체크 종료하는 부분
    cout << "end" << "\n";
    return 0;
}
cs

ThreadPool 테스트 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const int ThreadLoopMax = 100000;
int main(void)
{
    auto func = [&]()
    {
          // 테스트를 위한 람다 함수
    };
    // 스레드 개수 설정.
    ThreadPool::GetIns().Start(12);
    // 수행시간 체크 시작하는 부분
    cout << "start" << "\n";
    for (int tLoop = 0; tLoop < ThreadLoopMax; tLoop++)
    {
        auto ret = ThreadPool::GetIns().enqueue(func);
        ret.get();
    }
    // 수행시간 체크 종료하는 부분
    cout << "end" << "\n";
    return 0;
}
cs

여기서부터 @CLK를 통해 수행 시간을 체크하는 방법을 간략하게 소개한다.우선 체크하고자 하는 지점에 브레이크를 걸어둔다. 위의 예시로 든 코드에서는 start, end를 출력하는 부분이다.




그리고 디버그 모드로 실행하면, 조사식에 @CLK를 입력해준다.우선 start를 출력하는 시점에 브레이크가 걸리면서 해당 시점에 Clocking 값을 보여줄 것이다.



우선 지금 시점부터 수행 시간을 체크하는게 목적이므로, @CLK 값을 0으로 초기화해준다. 아래처럼..



수행하고 나서 end를 출력하는 시점에 다시 브레이크가 걸리면 조사식을 통해 @CLK값을 확인할 수 있다.
간략한 테스트에는 위 방법을 써도 좋지만, 표본이 많이 필요한 경우라면 그냥 시간 저장해서 파일로 로그를 남기던가 하는게 더 좋겠다.

댓글 없음:

댓글 쓰기

A*, JPS 길찾기 알고리즘 시뮬레이션 사이트

https://qiao.github.io/PathFinding.js/visual/ 길 찾기 알고리즘 시행 과정을 보여주는 사이트다. 링크 메모..