[테스트 환경]
*운영체제 : 윈도우 10 프로 (1903 버전)
*CPU : AMD Ryzen 7 1700 8-core
*RAM : 32 GB
*C++ 컴파일러 : MinGW 8.1.0 64-bit
*Go 컴파일러 : 1.13.5
*데이터 최대값 : 100,000,000
*연산 : 멀티스레드 기반의 합병정렬
[데이터 변수]
*스레드 개수 : 1, 2, 4, 8, 16, 32, 64
→ 데이터 개수 100,000,000 개 고정
*데이터 개수 : 20,000,000, 40,000,000, 60,000,000, 80,000,000, 100,000,000
→ 스레드 개수 16 개 고정
[결과]
스레드 개수 | 1 | 2 | 4 | 8 | 16 | 32 | 64 |
C++ | 16.8536 | 8.8936 | 5.017 | 3.366 | 2.79 | 2.71 | 2.693 |
Go | 18.983 | 10.37 | 6.3683 | 4.2963 | 3.6809 | 3.6043 | 3.605 |
[특이사항]
*두 언어 모두 스레드 개수가 증가함에 따라 수행시간 (초)이 점점 감소하였다. C++의 경우 16 스레드는 1 스레드보다 6.04배 빠른 결과를 보였다. Go의 경우 16 스레드는 1 스레드보다 5.16배 빠른 결과를 보였다.
*두 언어 모두 32 스레드와 64 스레드에서는 16 스레드와 동일한 수행시간을 보였다. 스레드가 아무리 많아도 수행시간은 CPU 코어 개수에 의존적이다.
*1 스레드에서 C++은 Go보다 1.13배 빠른 결과를 보였다. 8 스레드에서 C++은 Go 보다 1.28배 빠른 결과를 보였다. 16 스레드에서 C++은 Go 보다 1.37배 빠른 결과를 보였다. 스레드 개수가 많아질수록 C++과 Go의 성능 차이가 더 크게 나타났다.
데이터 크기 | 20000000 | 40000000 | 60000000 | 80000000 | 100000000 |
C++ | 0.5299 | 1.0873 | 1.6347 | 2.21366 | 2.80234 |
Go | 0.79833 | 1.691 | 2.679 | 3.63866 | 4.64533 |
[특이사항]
*두 언어 모두 데이터 개수가 선형적으로 증가함에 따라 수행시간 (초)이 선형적으로 증가하였다.
*데이터 개수가 2천만개 일 때 C++은 Go보다 1.51배 빠른 결과를 보였다. 데이터 개수가 6천만개 일 때 C++은 Go보다 1.64배 빠른 결과를 보였다. 데이터 개수가 1억개 일 때 C++은 Go보다 1.66배 빠른 결과를 보였다. 데이터 개수가 많아질수록 두 언어의 수행시간 차이는 더 크게 나타났다.
[결론]
*언어와 상관없이 스레드 개수가 코어 개수와 근접할수록 더 빠른 성능 보여주었고, C++은 Go보다 1.3~1.6배 빠른 결과를 보여주었다.
전체 소스코드는 https://github.com/NurimOnsemiro/mergesort_thread_lang_compare에 올려두었습니다.
'컴퓨터 공학' 카테고리의 다른 글
Hyper-V + WSL 기반으로 CentOS 7 설치하기 (0) | 2021.02.23 |
---|---|
Hyper-V + WSL 기반으로 설치된 CentOS에서 네트워크 설정하기 (1) | 2021.02.23 |
Docker 설치 후 MariaDB 접속 시 host.docker.internal 호스트로 접속이 안되는 경우 해결법 (0) | 2020.07.22 |
프로그래밍 언어 별 성능 측정 (0) | 2020.07.04 |
[Windows] Postman 설치 및 실행 시 "Could not open Postman" 오류 발생 해결 방법 (1) | 2020.01.08 |