Intel 계열 CPU는 SIMD(Single Instrument Multiple Data)를 위한 명령어 셋을 별도로 제공
MMX, SSE, AVX가 대표적이며, 이에 따라 지원되는 형태나 명령어도 다름
가장 최신 명령어 셋은 AVX이며, 코어, 캐시, 레지스터 등의 차이에 따라 지원되는 명령어 셋이 세부적으로 나누어짐
52번 서버의 Xeon Gold 6326 지원 명령어 셋
NHN Cloud의 CPU(뭔지 모름)지원 명령어 셋
1차 테스트
CPU 점유율 100%
HD(12807203) | Max | Min | Average(5000장) |
---|---|---|---|
cv::Mat | 11056661 | 209229 | 387329 |
Tensor | 20843264 | 49609 | 2496921 |
vector allocation | 7971551 | 182167 | 399710 |
new+memcpy | 12764150 | 161856 | 728102 |
FHD(192010803) | Max | Min | Average(5000장) |
---|---|---|---|
cv::Mat | 6954824 | 561085 | 998685 |
Tensor | 24104147 | 98669 | 2385730 |
vector allocation | 8342649 | 561324 | 953321 |
new+memcpy | 9077117 | 450518 | 833688 |
CPU 점유율 50% 이하
HD(12807203) | Max | Min | Average(5000장) |
---|---|---|---|
cv::Mat | 1763586 | 217789 | 535159 |
Tensor | 11984141 | 40941 | 207984 |
vector copy | 2340399 | 202311 | 595907 |
array memcpy | 16736949 | 195602 | 1241271 |
FHD(192010803) | Max | Min | Average(5000장) |
---|---|---|---|
cv::Mat | 6858374 | 624993 | 1469517 |
Tensor | 23701377 | 101762 | 538321 |
vector allocation | 7817482 | 662939 | 1406273 |
new+memcpy | 5999779 | 596376 | 1105992 |
번외 테스트
Intel SIMD Intrinsics로 다음과 같이 memcpy를 구현 (128bit )
inline void simdMemcpy(void* pDest, void* pSrc, size_t nCount)
{
nCount /= 0x10;
for (size_t i = 0; i < nCount; i++)
{
__m128i mTemp = _mm_loadu_si128((__m128i*)nSrc + i);
_mm_storeu_si128(reinterpret_cast<__m128i*>(pDest) + i, mTemp);
}
}
new alloc/std::memcpy와 new alloc/simdMemcpy를 비교
CPU 점유율 100%
HD(12807203) | Max | Min | Average(5000장) |
---|---|---|---|
vector allocation | 7971551 | 182167 | 399710 |
new+memcpy | 12764150 | 161856 | 728102 |
new+simdMemcpy | 2982921 | 161197 | 256864 |
FHD(192010803) | Max | Min | Average(5000장) |
---|---|---|---|
vector allocation | 8342649 | 561324 | 953321 |
new+memcpy | 9077117 | 450518 | 833688 |
new+simdMemcpy | 3861825 | 471668 | 625451 |
CPU 점유율 50% 이하
HD(12807203) | Max | Min | Average(5000장) |
---|---|---|---|
vector allocation | 2340399 | 202311 | 535159 |
array memcpy | 16736949 | 195602 | 1241271 |
new+simdMemcpy | 1968463 | 185140 | 433673 |
FHD(192010803) | Max | Min | Average(5000장) |
---|---|---|---|
vector allocation | 7817482 | 662939 | 1406273 |
new+memcpy | 5999779 | 596376 | 1105992 |
new+simdMemcpy | 6898006 | 566243 | 873873 |
분석
참고
2차 테스트
현재까지의 최종 결론
테스트 방법 : 상동
결과 (ns)
CPU 점유율 HD 100% / FHD 70~80% (FHD의 경우 이전 테스트와 다르게 CPU의 풀로드가 되지 않음)
HD(12807203) | Max | Min | Average(5000장) |
---|---|---|---|
cv::Mat | 5222129 | 217459 | 292543 |
Tensor | 14316549 | 41761 | 443983 |
vector allocation | 6153631 | 158712 | 279438 |
new+memcpy | 2889589 | 157118 | 255620 |
FHD(192010803) | Max | Min | Average(5000장) |
---|---|---|---|
cv::Mat | 6954824 | 1173329 | 1593093 |
Tensor | 19377702 | 127920 | 288277 |
vector allocation | 6574643 | 1111482 | 1634486 |
new+memcpy | 16660172 | 883518 | 1166557 |
CPU 점유율 50% 이하
HD(12807203) | Max | Min | Average(5000장) |
---|---|---|---|
cv::Mat | 1728149 | 205262 | 547690 |
Tensor | 11722993 | 36609 | 173569 |
vector copy | 1641290 | 188057 | 547901 |
array memcpy | 3791863 | 158441 | 468745 |
FHD(192010803) | Max | Min | Average(5000장) |
---|---|---|---|
cv::Mat | 5068249 | 459039 | 1389562 |
Tensor | 11888141 | 77804 | 276695 |
vector allocation | 3674948 | 591678 | 1434871 |
new+memcpy | 7580591 | 515391 | 1209153 |
이전 테스트와 비교