2016-06-08 23 views
5

Intel Xeon Phi "Knights Landing"프로세서는 AVX-512를 지원하는 최초의 프로세서이지만 SSE2가없는 SSE 또는 AVX2가없는 AVX와 같은 "F"만 지원하므로 주로 부동 소수점 처리가 가능합니다.Will Knights 랜딩 CPU (Xeon Phi)가 바이트/워드 정수 코드를 가속합니까?

저는 intrinsics를 통해 최대 SSE4.1 명령어를 사용하여 바이트 및 단어 (8 비트 및 16 비트)에서 작동하는 소프트웨어를 작성하고 있습니다.

AVX-512F에 EVEX로 인코딩 된 버전의 전체/대부분의 SSE4.1 지침이 있는지 여부와 이것이 내 SSE 코드가 자동으로 EVEX 확장 지침을 얻고 모든 새로운 레지스터.

SIMD 레지스터 파일의 폭이 32 - 레지스터 ZMM0 ZMM31 개의 512 비트 256 비트 증가된다

위키이 말한다. 이 레지스터는 스트리밍 SIMD 확장의 AVX 확장 및 128 비트 XMM 레지스터에서 256 비트 YMM 레지스터로 처리 할 수 ​​있으며 EVEX를 사용하는 경우 레거시 AVX 및 SSE 명령어를 확장하여 16 개의 추가 레지스터 XMM16-XMM31 및 YMM16-YMM31에서 작동 할 수 있습니다 인코딩 된 양식. 이것은 불행하게도 AVX512 지원과 함께 컴파일 SSE4 코드 (최고) 같은으로 이어질 것입니다 여부를 명확히하지 않습니다

는 AVX2로 컴파일하는 것은 (기존 지침의 VEX 코딩)를 제공하는 속도를 높이는.

SSE2/4 코드 (C 내장 함수)가 AVX-512F 용으로 컴파일 될 때 어떤 일이 일어날 지 알고 있습니까? AVX1의 VEX 코딩에서 바이트 및 워드 명령어와 같은 속도 증가를 기대할 수 있습니까?

+1

은 좀 더보고 내 자신의 질문에 대답 수 있습니다. 이것의 마지막 문장을 참조하십시오 https://en.wikipedia.org/wiki/AVX-512#SIMD_modes ...이 AVX512BW 때까지 새로운 레지스터와 네임 스페이스를 공유하지 않습니다 바이트 단어 운영 SSE/AVX 명령어처럼 보인다. 이것이 실제로 성과 측면에서 의미있는 것이 있다면 어떤 설명이 필요한가? – user1649948

+0

당신은 Purley (내년에, 아마)를 기다리고 싶을지도 모른다 - 그것은 AVX-512BW 추가를 가질 것이다. –

+1

AVX-512F는 "Big Core"(Xeon)과 "Throughput hpc accelerator"(Xeon Phi)에서 모두 지원됩니다. 그러나 제온 피 (Xeon Phi)와 빅 코어 (Big Core)는 빅 코어 사용자만을 대상으로하거나 독점적으로 "처리량"사용을 목표로하는 추가 고유 AVX-512 명령어 세트를 보유하게된다. AVX-512BW는 Big core 전용으로, 예를 들면. AVX-512ER (상호)는 Xeon Phi에서만 사용할 수 있습니다. 퍼포먼스가 현명한 지 잘 모르겠지만, "파워 퍼포먼스가 현명하다"고 약간의 FP 포커스가 현명해야한다. (제온 파이는 더 많은 FP 지향 전력에 민감한 쓰루풋 중심 사용자를 대상으로한다.) 이전 주석의 연속에서 – zam

답변

3

좋아요, 괜찮은 대답을하기에 충분한 정보를 함께 정리했다고 생각합니다. 여기에 간다.

네이티브 SSE2/4 코드가 Knights Landing (KNL)에서 실행될 때 어떤 현상이 발생합니까?

코드는 코어 내의 단일 VPU (호환성 레이어라고 함)의 레지스터 중 하단 4 분의 1에서 실행됩니다. 콜 팩스 (Colfax)의 사전 출시 웹 세미나에 따르면 이는 코어에 사용 가능한 총 등록 공간의 1/4에서 1/8 만 차지하고 레거시 모드로 실행된다는 것을 의미합니다.

동일한 코드가 AVX-512F 용 컴파일러 플래그로 다시 컴파일되면 어떻게됩니까?

SSE2/4 코드는 VEX 접두어로 생성됩니다. 즉, pshufb는 vpshufb가되고 ymm에서는 다른 AVX 코드와 함께 작동합니다. 지침은 AVX512의 기본 EVEX로 승격되거나 새로운 zmm 레지스터를 구체적으로 처리 할 수 ​​없습니다. 명령어는 AVX512-VL을 사용하는 EVEX로만 승격 될 수 있습니다.이 경우 Zmm 레지스터에 직접 이름을 지정하는 기능을 사용할 수 있습니다. 이 시점에서 레지스터 공유가 가능한지 여부는 알 수 없지만 AVX2의 파이프 라이닝은 대부분의 경우 전체 256 비트 AVX2 코드와 마찬가지로 절반 너비 AVX2 (AVX-128)와 비슷한 처리량을 보여줍니다.

가장 중요한 것은 AVX512F에서 SSE2/4/AVX128 바이트/워드 크기 코드를 실행하려면 어떻게해야합니까? 그들은 항상 더 큰 정수 것처럼 당신은해야합니다

는/영 ZMM에서 32 비트에 그 바이트/단어를 확장하고 운영에 서명, XMM에 128 비트 청크를로드합니다. 그런 다음 끝나면 바이트/단어로 다시 변환하십시오.

이 빠른가요?

Larrabee (Knights Landing의 프로토 타입)에 게시 된 자료에 따르면 레지스터가 사용 가능한 한 모든 정수 너비의 유형 변환에는 xmm에서 zmm까지 자유롭고 그 반대로도 가능합니다. 또한 계산이 수행 된 후 32 비트 결과는 바이트/워드 길이로 즉시 절단되고 128 비트 청크로 정렬되지 않은 메모리에 쓰여질 수있어 잠재적으로 xmm 레지스터를 절약합니다. KNL에

각 코어는 서로 이야기 할 수있는 것 같다 2 VPU에 있습니다. 따라서 합리적인 처리량의 vperm * 2d 명령 하나에서 32-way 32 비트 검색이 가능합니다. 이는 128 비트 레인에서 또는 (바이트/워드 명령어에는 적용 할 수없는 32 비트 vpermd에만 해당하는 레인 사이에서만) 순열 할 수있는 AVX2에서도 가능하지 않습니다. 자유형 변환과 결합하여 AVX512에서 암시 적으로 마스크를 사용하는 기능 (비용이 많이 들고 레지스터 집약적 인 blendv 또는 명시 적 마스크 생성 사용하지 않음)과 더 많은 비교 자 (native NOT, 부호없는/signed lt/gt 등) 결국 AVX512F에 대한 SSE2/4 바이트/워드 코드를 다시 작성하는 데 합리적인 성능 향상을 제공 할 수 있습니다. 적어도 KNL에.

내가 내 내 손에 얻을 순간을 테스트거야, 걱정하지 마십시오. ;-)

+1

"무료"정수 유형 변환은 KNC에 있었지만 KNL에는 없습니다. 슬프게도. –