[SSE/AVX Vectorization] 02-Detect System Capabilities

목차: [Series 01] Index & Overview (Link)
이전 글: [Series 01] Index & Overview (Link)
다음 글: [Series 03] TBD (Link)


지난번에 작성한 글에서 SSE와 AVX에 대해서 짧게 정리를 하였다. 간단히 설명하면 Vector (SIMD) 연산을 수행하기 위해서 CPU에 추가된 Instruction Set이다. 상세한 글은 출처 1에서 확인 할 수 있다. 이번 글에서는 CPU가 SSE/AVX를 지원하는지 확인하는 방법, GCC를 사용해서 SSE/AVX 지원 여부를 확인하는 방법에 대해서 정리하였다. 실험 환경을 아래와 같다.

실험 환경

  • OS: Centos 8.2
  • CPU: Intel i9-10920X

먼저 CPU가 SSE/AVX를 지원하는지 확인하기 위해서는 “/proc/cpuinfo”파일을 확인하면 된다.

  • $cat /proc/cpuinfo | grep “flags”
  • $lscpu | grep -i “flags”
그림 1: lscpu CMD 결과 화면

“/proc/cpuinfo”파일에서 “flags”를 확인하면 그림 1과 같은 결과를 확인 할 수 있다. SSE, SSE2, AVX, AVX2, AVX512 Vector 연산을 지원하는 것을 확인 할 수 있다.

다음으로 GCC를 사용해서 SSE, AVX를 지원하는지 확인하는 방법이다. 아래 CMD를 실행하면 현재 기기에서 지원하는 모든 Instruction Set을 확인 할 수 있다.

  • $gcc -march=native -dM -E – < /dev/null
  • $gcc -march=native -dM -E – < /dev/null | egrep “AVX|SSE”
그림 2: gcc CMD 결과 화면

그림 2는 2번째 CMD를 실행한 결과 화면이다. SSE, AVX, AVX2, AVX512를 지원하는 것을 확인 할 수 있다.

MK: gcc를 사용해서 컴파일을 하는 경우 “-march=native” 또는 “-mavx” 옵션을 추가해야지 SSE/AVX를 사용할 수 있다. Kernel의 경우 2.6.30보다 높으면 SSE, AVX를 지원한다고 한다. 최근 공개되는 Ubuntu, CentOS, 등 대부분의 Linux 시스템은 2.6.30보다 높은 Kernel 버전을 사용한다.


출처

  1. https://mkblog.co.kr/2020/06/14/sse-avx-vectorization-01-index-overview/
  2. https://www.codingame.com/playgrounds/283/sse-avx-vectorization/prerequisites

Leave a Comment