simd 예제


0 Flares Filament.io 0 Flares ×

우리는 gcc가 우리를 위해 네 가지 추가 사항을 핸드 코딩했다는 것을 나타내는 많은 반복적 인 지침을 참조하십시오. 이제 CPU의 gcc를 알리는 것을 다시 컴파일하고 다른 살펴 보겠습니다. 이 예제는 인텔에 특정하며 적절한 CPU 이름을 대체합니다. 결과는 G3에서 다르게 보이지만 본질적으로 비슷합니다. 전치된 행렬을 얻는 예는 다음과 같습니다. 벡터 리터럴은 괄호 크기의 벡터 유형으로 작성된 다음 일정한 식의 곱슬 곱슬 한 세트가 뒤따릅니다. 벡터의 요소는 해당 식에 초기화됩니다. 식이 지정되지 않은 요소는 기본적으로 0으로 설정됩니다. 벡터 리터럴은 초기화 문또는 실행 문에서 상수로 사용할 수 있습니다. 사용의 몇 가지 예는 다음과 같습니다. 데이터를 보는 방식의 이러한 변화는 C 언어 프로그래밍에서 수행되는 포인터 캐스팅과 동일합니다. 벡터는 벡터 포인터를 스칼라 포인터에 캐스팅하여 스칼라로 참조할 수 있습니다.

구체적인 예는 아래를 참조하십시오. 벡터화를 사용한 코딩은 아키텍처와 프로세서에 따라 직접 달라집니다. 위의 예는 x86 프로세서에 인텔의 AVX2를 사용합니다. 두 번째 배열과 함께 첫 번째 배열의 모든 항목을 추가하기 위해 for 루프를 만드는 대신 두 개의 벡터를 만들고 그 사이에 간단한 추가를 실행합니다. SIMD 작업에 적합하지 않을 수 있는 데이터의 일반적인 예로는 이미지의 색상 데이터와 3D 그래픽용 3차원 데이터가 있습니다. 예를 들어, RGB 값에서 각 픽셀의 밝기 Y를 계산하는 경우를 예로 들어 보겠습니다. 이 계산에 사용되는 수식은 다음과 같습니다. SIMD 작업은 비교 명령및 비트 선택 명령을 사용하여 조건부 분기를 제거합니다. 보다 구체적으로, vec_cmpgt() 함수의 비교 명령에 대응하는 내장 함수는 처음에 조건 평가를 위해 사용된다. 처리된 결과 선택의 경우 비트 선택 명령과 관련된 vec_sel() 함수가 사용됩니다.

현대 SIMD 컴퓨터의 첫 번째 시대는 사고 기계 CM-1 및 CM-2와 같은 대규모 병렬 처리 스타일의 슈퍼 컴퓨터가 특징이었습니다. 이러한 컴퓨터에는 병렬로 작동하는 제한된 기능 프로세서가 많이 있었습니다. 예를 들어, 사고 기계 CM-2의 각 단일 비트 프로세서는 동일한 명령을 동시에 실행하여 하이퍼큐브에 연결된 네트워크를 사용하여 한 번에 65,536쌍의 비트를 논리적으로 결합할 수 있습니다. 프로세서 전용 RAM은 그 진연을 찾을 수 있습니다. 인텔 i860 XP[2]와 같은 상용 프로세서를 기반으로 저렴한 스칼라 MIMD 접근 방식이 더욱 강력해지고 SIMD에 대한 관심이 약해졌을 때 슈퍼컴퓨팅은 SIMD 접근 방식에서 벗어났습니다. SIMD 작업은 여러 데이터를 다른 방식으로 처리하는 데 사용할 수 없습니다. 전형적인 예는 일부 데이터를 추가하고 다른 데이터가 공제, 곱수 또는 분할되는 도 2.3에 있습니다. 둘 다 MIMD 또는 여러 데이터 및 여러 명령입니다.