문제

GHC가 다양한 SSE 세대를위한 SIMD 코드를 생성 할 수 있습니까?

예를 들어. 이와 같은 프로그램이 있습니다

import Data.Array.Vector
main = print . sumU $ (enumFromToFracU 1 10000000 :: UArr Double)

생성 된 코드 (64 비트 x86에 대해 컴파일) 스칼라 모드 (C 및 ASM 백엔드 모두)에서 SSE 지침을 사용하는 것을 볼 수 있습니다. addpd보다는 addsd입니다. 프로그램 유형의 경우 벡터 지침을 사용하는 것이 성능에 중요합니다. 나 자신과 같은 초보자가 GHC가 SSE를 사용하여 코드를 동시화 할 수있는 쉬운 방법이 있습니까?

도움이 되었습니까?

해결책

예, C 백엔드를 통해 가능하지만 시행 착오입니다. 내가 사용하는 깃발 :

 gcc -O2 -funbox-strict-fields -fvia-C -optc-O3 -march=native -optc-msse4

그런 다음 GCC가 Uvector 코드를 통해 타이트 루프 GHC가 생성하는 것을 발견하고 SIMD 잠재력이 있음을 깨닫습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top