최상 답변
32 비트 어셈블러 :
mov eax, 0
cpuid
test ecx, 0x0001
당연히 나 먼저 네 개의 GP 레지스터를 푸시하고 찾고있는 플래그를 확인한 후 팝업을 표시하고 싶습니다. SSE3의 모니터 / 대기 (비트 3, 0x0080) 또는 보조 기능 (비트 9, 0x0200)과 관련된 다른 플래그도 사용할 수 있습니다.
C 또는 인라인 어셈블러를 사용하는 대부분의 실제프로그래밍 언어는 컴파일러가 그만한 가치가 있다고 가정합니다.
Answer
AVX는 Intel의 여러 x86 벡터 확장 중 하나의 이름입니다. Intel 및 AND의 Sandy Bridge / Bulldozer CPU 시리즈 이후로 사용되었습니다.
벡터 확장이란 무엇입니까?
기존 CPU 아키텍처 (스칼라 처리)는 다음에서 작동합니다. SISD라는 모델 : 단일 명령어, 단일 데이터. 명령어에서 순차적으로 작동하는 프로세서 코어가 있으며, 각각은 한 번에 단일 피연산자 집합에서 작동합니다.
이것은 대부분의 워크로드 유형에 적합합니다. 그러나 일반적으로 일부 유형의 컴퓨팅 집약적 워크로드에는 적합하지 않습니다. 예를 들어 사진 편집을 고려해보십시오. 이미지의 밝기를 두 배로 늘리려면 이미지의 밝기를 한 픽셀 씩 두 배로 늘려야합니다. 속도가 느립니다. 각 픽셀은 실제로 다른 픽셀과 독립적입니다. 대규모 병렬 처리 : 충분한 컴퓨팅 리소스와 올바른 아키텍처가 주어지면 이론적으로는 단일 작업으로 모든 작업을 수행 할 수 있습니다.
입력 벡터 프로세서 : SIMD라는 모델에서 작동합니다. 벡터 프로세서는 단일 요소에서 하나씩 작동하는 대신 많은 데이터 요소를 하나의 큰 요소 (일반적으로 256 비트 이상)로 연결 한 다음 이에 대한 작업을 수행합니다. 결과적으로 벡터 프로세서는 단일 작업으로 많은 데이터 요소에 대해 작업을 수행 할 수 있습니다. 기존 프로세서에서는 여러 작업이 필요합니다.
X86과 같은 기존 CPU 아키텍처는 분명히 SIMD 작동을 위해 설계되지 않았습니다. 수년에 걸쳐 인텔은 x86 ISA의 기능을 향상시키기 위해 지속적으로 확장을 추가했으며 SIMD 확장은 가장 초기에 등장했습니다.
펜티엄에서 MMX로 시작했지만 꽤 좋았습니다. 나중에 인텔은 SSE 명령 집합 확장을 추가하여 이러한 제한 사항 중 일부를 제거했습니다. 그들은 결국 AVX를 도입 할 때까지 향후 10 년 동안 SSE에서 더 반복되었습니다.
AVX는 상당히 중요한 개선 사항을 도입했습니다. 이전 버전 인 SSE4.x에 비해
벡터 레지스터 크기가 128 비트에서 256 비트로 증가하여 잠재적 처리량을 두 배로 늘 렸습니다. 명령어는 기존의 두 번째 피연산자 형식 (a = a + b)에서 세 번째 피연산자 형식 ( a = b + c), 유연성 향상. 정렬 규칙도 완화되었습니다.