2014-12-07 3 views
2

두 개의 float32 변수를 더하거나, 합계 할 수 있습니까?SSE 64 비트 레지스터

SSE 레지스터에서 (예 : 간단한 총알 탄도를 계산하는 동안 비디오 게임에서) 발생하는 모든 합계 및 곱셈을 수행하는 것이 가치가 있습니까?

+0

아니요. 프로파일 러를 사용하는 방법을 배우는 것이 좋습니다. –

+0

@HansPassant 왜 프로파일 러에 대해 쓰고 있습니까? 나는 단지 수학적 기능을 향상시키고 싶다. – greenfox

+1

컴파일러는 이미 SSE 명령어를 부동 소수점으로 사용하기 때문에 컴파일러보다 더 나은 작업을 수행하는 데 어떤 문제가 있는지 전혀 알 수 없습니다. 당신은 그것을 더 느리게 만들 수 있었지만 아직 어떤 차이도 느끼지 못했습니다. –

답변

1

SSE의 모든 요점은 실제로 많은 숫자를 신속하게 처리합니다. 그리고 한 번에 두 개의 숫자를 처리하는 능력은 그 점에 많은 도움이됩니다. 예를 들어, 단일 명령어 (ADDPS)로 좌표 {x, y}에 단계 {dx, dy}을 실제로 추가 할 수 있습니다. 레지스터가 128 비트이기 때문에 실제로 4 개의 부동 소수점을 추가 할 수 있지만, 이는 귀하의 경우에 불필요 할 수 있습니다. ADDPD은 2x64의 128 비트를 분할하여 두 개의 double을 더합니다. ("float64")

+1

그러나 대부분의 최신 x86 CPU에는 2 개의 FPU가 있으므로 2 와이드 SIMD 작업으로 얻게되는 것이 많지 않습니다. 그래도 한 번에 4 개의 부동을 수행 할 수 있다면 스칼라 코드보다 2 배 이상 우승해야합니다. –

+0

@PaulR : 문서를 다시 확인하고 싶을 수도 있습니다. AMD Bulldozer가 코어간에 FPU를 공유한다는 점에서 작은 진실이 있습니다. 따라서 쿼드 코어에는 실제로 두 개의 FPU가 있습니다. 그러나 SSE이기 때문에 한 번에 4 개의 부동 소수점을 처리 할 수 ​​있으므로 총 8 개까지 처리 할 수 ​​있습니다. – MSalters

+0

저는 AMD CPU에 익숙하지 않지만 현재 및 최신 Intel Core i7은 코어 당 2 개의 FPU를 가지고 있으므로 클럭 사이클 당 2 개의 스칼라 부동 소수점 명령어를 실행할 수 있습니다. –