CPU features

From HPCWIKI
Revision as of 15:32, 16 July 2026 by Clara (talk | contribs) (Added Knowledge Graph section)
Jump to navigation Jump to search

Template:Status

Template:TOC

Overview

CPU features는 프로세서가 지원하는 명령어 집합 확장 기능으로, 컴파일러 최적화 및 애플리케이션 성능 향상에 활용됩니다.

Summary

  • 무엇인가? CPU가 지원하는 명령어 집합 확장 기능 (SSE, AVX, FMA 등)
  • 왜 필요한가? 컴파일러 최적화 플래그 설정, TensorFlow 등 애플리케이션 성능 향상
  • 언제 사용하는가? 소스 컴파일 시 -march=native 및 최적화 플래그 설정, CPU 기능 확인

---

Purpose

이 문서가 존재하는 이유

  • Goal: CPU 기능 플래그 확인 방법, 주요 플래그 설명, TensorFlow 컴파일 최적화 방법 설명
  • Scope: /proc/cpuinfo 기반 플래그 확인, 최적화 플래그 생성, 주요 SIMD 명령어 집합
  • Non-goals: CPU 아키텍처 상세, 다른 프로세서 아키텍처(ARM 등)

---

Key Concepts

Concept Description Related
CPU Flags /proc/cpuinfo에서 확인 가능한 CPU 기능 플래그 CPU features
SSE/AVX SIMD 명령어 집합 — 병렬 데이터 처리 가속 Optimization
FMA Fused Multiply-Add — 곱셈-덧셈 통합 연산 Optimization
-march=native GCC 최적화 플래그 — 호스트 CPU에 맞춘 자동 최적화 Optimization
TensorFlow Build CPU 최적화 플래그 기반 TensorFlow 소스 컴파일 Deep Learning Frameworks

---

Architecture

CPU 기능 확인 및 최적화 흐름:

graph TD
    A[Target System] --> B[/proc/cpuinfo 확인]
    B --> C[flags 추출]
    C --> D{Optimization Flags 생성}
    D --> E[-march=native]
    D --> F[-msse4.1, -msse4.2]
    D --> G[-mavx, -mavx2]
    D --> H[-mfma, -mpopcnt]
    E --> I[TensorFlow Build]
    F --> I
    G --> I
    H --> I
    I --> J[최적화된 실행 파일]

---

Workflow

CPU 기능 확인 및 최적화 흐름:

  1. /proc/cpuinfo에서 CPU flags 확인
  2. 주요 최적화 가능 플래그 식별 (SSE4.1, SSE4.2, AVX, AVX2, FMA 등)
  3. 최적화 플래그 생성 스크립트 실행
  4. TensorFlow 등 컴파일 시 최적화 플래그 적용
  5. 성능 향상 검증
Stage Input Output
Flag Check /proc/cpuinfo CPU 지원 기능 목록
Flag Filter 전체 flags 최적화 대상 flags 추출
Optimize Build 최적화 flags -march=native 기반 플래그 생성
TensorFlow Build 최적화 플래그 CPU 최적화된 TensorFlow

---

Detailed Explanation

Compiler CPU Flags

TensorFlow 소스 빌드를 커스터마이즈하여 CPU 기능의 가용성을 활용하면 TensorFlow 코드 실행 속도를 높일 수 있습니다.

대상 시스템의 사용 가능한 CPU 플래그는 다음 명령어로 확인할 수 있으며, Linux 커널 소스([1](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/x86/include/asm/cpufeatures.h))가 각 플래그의 의미를 설명합니다.

주요 CPU 기능 플래그

No Flag CPU Feature Additional Info
1 ssse3 Supplemental Streaming SIMD Extensions 3 (SSSE-3)
2 sse4_1 Streaming SIMD Extensions 4.1 (SSE-4.1)
3 sse4_2 Streaming SIMD Extensions 4.2 (SSE-4.2)
4 fma Fused Multiply-Add (FMA)
5 cx16 CMPXCHG16B (double-width compare-and-swap)
6 popcnt Population count (1비트 개수 세기)
7 avx Advanced Vector Extensions
8 avx2 Advanced Vector Extensions 2

최적화 플래그 생성

TensorFlow 소스 빌드를 위한 최적화 플래그는 다음 명령어로 생성합니다:

# 최적화 플래그 생성
$ grep flags -m1 /proc/cpuinfo | cut -d ":" -f 2 | tr '[:upper:]' '[:lower:]' | { read FLAGS; OPT="-march=native"; for flag in $FLAGS; do case "$flag" in "sse4_1" | "sse4_2" | "ssse3" | "fma" | "cx16" | "popcnt" | "avx" | "avx2") OPT+=" -m$flag";; esac; done; MODOPT=${OPT//_/\.}; echo "$MODOPT"; }

# AMD EPYC 프로세서 출력 예시:
# -march=native -mssse3 -mfma -mcx16 -msse4.1 -msse4.2 -mpopcnt -mavx -mavx2

---

Configuration

CPU flags 확인

# 전체 CPU flags 확인
$ cat /proc/cpuinfo | grep flags
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate sme ssbd mba sev ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip rdpid overflow_recov succor smca

TensorFlow 빌드 최적화

# TensorFlow 소스 빌드 시 최적화 플래그 적용
$ ./configure
# Optimization flags 입력:
# -march=native -mssse3 -mfma -mcx16 -msse4.1 -msse4.2 -mpopcnt -mavx -mavx2

$ bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

---

Examples

Example 1: AMD EPYC CPU flags

# AMD EPYC 프로세서의 CPU flags
$ cat /proc/cpuinfo | grep flags | head -1
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate sme ssbd mba sev ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip rdpid overflow_recov succor smca

Example 2: 최적화 플래그 생성 및 적용

# 최적화 플래그 생성
$ grep flags -m1 /proc/cpuinfo | cut -d ":" -f 2 | tr '[:upper:]' '[:lower:]' | { read FLAGS; OPT="-march=native"; for flag in $FLAGS; do case "$flag" in "sse4_1" | "sse4_2" | "ssse3" | "fma" | "cx16" | "popcnt" | "avx" | "avx2") OPT+=" -m$flag";; esac; done; MODOPT=${OPT//_/\.}; echo "$MODOPT"; }
-march=native -mssse3 -mfma -mcx16 -msse4.1 -msse4.2 -mpopcnt -mavx -mavx2

# TensorFlow 빌드에 적용
$ export CXXFLAGS="-march=native -mssse3 -mfma -mcx16 -msse4.1 -msse4.2 -mpopcnt -mavx -mavx2"
$ bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

---

Best Practices

  • TensorFlow 빌드 시 -march=native 및 관련 SIMD 플래그 필수 적용
  • AVX2, FMA, SSE4.2 지원 시 반드시 최적화 플래그에 포함
  • AMD EPYC 시스템에서는 svm, sev, smca 등 AMD 전용 플래그도 확인
  • 최적화 플래그는 대상 시스템의 실제 CPU에 맞게 설정
  • 이식성 필요 시 -march=native 대신 명시적 플래그 사용

---

Limitations

  • -march=native로 컴파일된 바이너리는 다른 CPU에서 실행 불가
  • 구형 CPU는 AVX/AVX2/FMA 지원 안 함
  • 일부 플래그는 커널 버전/BIOS 설정에 따라 비활성화될 수 있음
  • ARM 아키텍처는 다른 플래그 체계 사용

---

References

---

Related Pages

---

Knowledge Graph

Related

LinuxServerHardwareNetwork