2012-02-24 5 views
2

SSE (AVX)에서 정수 및 부동 소수점을 모두 처리하는 경우 모든 int를 부동 소수점으로 변환하고 소수에서만 사용할 수있는 좋은 방법입니까? 그 후 몇 가지 SIMD 명령어가 필요하기 때문에이 변환이 완전히 유지되어야하는 추가 및 비교 명령어 (<, <=, ==) 만 사용해야합니다.SSE ints vs. floats 연습

+3

이상적으로 int보다는 float를 없애는 것이 좋습니다. 인치는 빠르고, 더 강하고 더 강하다. –

+0

SSE에서도 ?? 나는 그것이 확실하지 않다. 우리는 float을 제거 할 수 없습니다. int 4 -> 4.00000'을 변환하는 것은 괜찮지 만 평등을 유지해야합니다. – Cartesius00

+5

당신이하려는 일의 예를 보여 주어야합니다. 'int'! ='float'. 또한 AVX는 256 비트 와이드 정수 연산을 아직 지원하지 않습니다. (AVX2 will) 그래서 나는 왜 당신이 이것을하고 싶어하는지 알 수 있습니다. 그것이 더 빨라지는 여부는 당신이하려고하는 것에 크게 의존 할 것입니다. – Mysticial

답변

6

내 의견을 대답으로 확대하십시오. 정수와

스틱 :

은 기본적으로 다음과 같은 트레이드 오프 무게

  • 정수 SSE는 낮은 지연 시간, 높은 처리량이다. (Sandy Bridge의 이중 문제)
  • 128 비트 SIMD 너비로 제한됩니다. 부동 소수점에

변환 : 256 비트 AVX에서

  • 혜택을 누릴 수 있습니다.
  • 단일 문제 더하기/빼기 (샌디 브리지에서)
  • 초기 변환 오버 헤드가 발생합니다.
  • 정확도 손실없이 float에 맞는 입력을 제한합니다.

저는 현재 정수로 고수하고 있습니다. float 버전으로 코드를 복제하고 싶지 않다면 전화를하십시오.

부동 소수점으로 정수를 에뮬레이트하는 것이 더 빠르게되는 부분은 본인이 구분해야 할 때입니다.


수동 벡터화로 다이빙하는 것이 성능이 더 중요하다는 것을 의미하므로 가독성을 언급하지 않았습니다.

+0

AVX 부동 소수점은 Sandy Bridge에서 단일 발행되지 않습니다. 정확한 특성을 간결하게 표현하기는 어렵지만 Sandy Bridge는 FP 추가 및 모든 사이클 (로드, 저장 및 순열의 일부 조합은 물론)을 수행 할 수 있습니다. 자세한 내용은 인텔 최적화 매뉴얼 2.1.4를 참조하십시오. (공평히 말하면, 질문자는 어떤 곱셈도하지 않는 것처럼 보이므로 표식에서 완전히 벗어난 것은 아닙니다.) –

+0

나는 어떤 종류의 셔플과 함께 add + mul 문제를 완전히 알고 있습니다. 그러나 예, FP- 추가가 단일 문제라고 말했습니다. (비록 내가 그것에 대해 조금 더 명확 해졌음을 인정하지만.) – Mysticial