float4/double4 구조체의 AVX-256/512 코드에서 기본 작동 *, +, /, -을 벡터 오버로드하여 벡터에서 빠른 성능 향상을 얻으려는 스칼라 등의 배율을 찾고 있습니다. float4/double4를 사용하여 작성된 코드에서의 연산. OpenCL은 이러한 데이터 유형을 intrinsics로 가지고 있지만 XeonPhi에서 실행되는 C++ 코드는 512 비트 SIMD 단위를 활용하는 새로운 구현이 필요합니다.AVX float4/double4 struct
답변
찾으시는 분은 Agner Fog 님의 Vector Class Library(VCL)입니다. 나는 이것을 주로 OpenCL에서 벡터 유형을 대체하는 데 사용했습니다.
VCL float4
은 Vec4f
이고 double4
은 Vec4d
입니다. OpenCL처럼 AVX와 AVX512에 대해 걱정할 필요가 없습니다. Vec8d
을 사용하고 AVX 용으로 컴파일하면 두 개의 AVX 레지스터를 사용하여 AVX512를 에뮬레이션합니다.
VCL에는 원하는 모든 작업 (예 : *,+,/,-,+=,-=,/=,*=, multiply and divide by scalar
)이 있으며 더 많은 기능이 있습니다.
OpenCL과 VCL의 주된 차이점은 OpenCL은 기본적으로 CPU 디스패처를 만듭니다. 반면 VCL에서는 CPU 디스패처를 직접 작성해야합니다 (설명서와 함께이 작업을 수행하는 데 필요한 몇 가지 예제 코드가 포함되어 있습니다). VCL은 SSE2에서 AVX512까지의 기능을 최적화하여 여러 명령어 세트를 대상으로 할 수 있습니다. Knights Corner Xeon Phi는 a special version of the VCL입니다.
내가 놓친 OpenCL의 또 다른 기능은 치환을위한 구문입니다. OpenCL에서 float4
의 구성 요소의 순서를 반대로하려면 v.wzyx
을 수행 할 수 있지만 VCL에서는 permute4f<3,2,1,0>(v)
을 수행 할 수 있습니다. create this syntax with C++ 일 수도 있지만 확실하지 않습니다.
VCL, OpenMP 및 사용자 지정 CPU 디스패처를 사용하여 CPU에서 OpenCL을 대체했습니다.
- 1. struct in struct in struct
- 2. SIMD (AVX) 비교
- 3. AVX 및 버블 정렬
- 4. AVX 레지스터에 정수 배열로드
- 5. AVX 정수 연산 수행
- 6. Tensorflow AVX 지원
- 7. md5 vectorized sse * && avx
- 8. AVX 레지스터의 불법 콘텐츠
- 9. 기본 구조체가있는 struct struct?
- 10. 파일 프로그래밍에서 struct struct
- 11. C# struct with struct
- 12. 정수형 SIMD 명령어 C에서 AVX
- 13. SSE 및 AVX 내장 혼합물
- 14. 함수 구조체로서의 struct struct C
- 15. Go (Struct)와 Struct (Struct)의 차이점은 무엇입니까?
- 16. struct reg와 struct user_regs_struc 사이의 차이점은 무엇입니까?
- 17. struct 멤버가 다른 struct 멤버를 가리키고 있습니다
- 18. struct addrinfo와 struct sockaddr의 차이점은 무엇입니까
- 19. C# struct C# struct 구조체의 마샬 배열
- 20. struct 포인터의 끝에 struct 포인터를 추가하십시오.
- 21. struct cdev와 struct device의 차이점은 무엇입니까
- 22. struct sockaddr에서 struct addrinfo를 생성하는 방법은 무엇입니까?
- 23. struct tm in another struct - c
- 24. 호환되지 않는 유형 struct * 및 struct
- 25. typedef struct
- 26. struct serialization
- 27. Extern Struct?
- 28. Sandybridge 및 IvyBridge의 sse 및 avx 성능
- 29. AVX/AVX2를 사용하여 8x8 플로트 변환
- 30. 현재 어떤 어셈블러가 AVX 명령어 세트를 지원합니까?
주제를 벗어나서 불충분 함. SIMD 벡터를 벡터로 사용하는 것은 때로는 합리적이지만 아주 자주는 좋지 않은 아이디어입니다. 즉, 점 제품과 정규화를 고려하면 가로로 수행하면 비효율적입니다. 추가는 물론 괜찮습니다. 따라서 벡터에서 수행 할 작업에 따라 다릅니다. – harold
나는이 방법으로 도트 제품이 나쁘다는 것을 알고있다. 원하는 작업은 *, +, /, -, + =, - =,/=, * =, mulitply 및 스칼라로 나누기 – user1382302
그럼 괜찮습니다. 물론, 실제로 512 비트 SIMD를 사용하지는 않을 것입니다. 4 개의 double은 결국 256 비트입니다. – harold