2013-06-03 3 views
2

내가 조금 SSE 코드를 작성하기 위해 노력하고있어하지만이 오류로 인해 계속할 수 없습니다 :SSE : const를 float로 const를 __m128의 * 변환 *

error C2664: '_mm_loadu_ps' : cannot convert parameter 1 from 'const __m128 *' to 'const float *'

나는 정렬되지 않은 데이터를로드했습니다

과에 SSE 내장 함수를 사용하려면 __m128로 변환하십시오. 웹에서 검색하고 있지만이 작업을 수행 할 수 없습니다.

const Matrix<T> mul_SSE (const Matrix<T>& m)const{ 
    // ... 
    __m128 a = _mm_loadu_ps((__m128 const*)&m(0,0)); //<-Here's the error line 
    // ... 
} 

매개 변수 m은 수레의 행렬이다 : 다음은 내 코드입니다. 제안 사항이 있으십니까? 고마워요!

ps. 이 해결

error C2664: '_mm_loadu_ps' : cannot convert parameter 1 from '__m128 *' to 'const float *'

: 나는 __m128 a = _mm_loadu_ps((__m128*)&m(0,0));를 작성하는 경우 또한 그것은 나에게 같은 오류주고 을 올바른 방법 :

__m128 a = _mm_loadu_ps(&m(0,0)); 

답변

0

The documentation on MSDN states that _mm_loadu_ps takes a float* with 4 floats.

당신의 배열을 가리키는 float*에 전달해야 행렬의 수레 (실제로 4 개).

함수가 float* 일 때 행렬에 대한 참조를 __m128 const*으로 변환합니다.

+0

처음에는 __m128 a = _mm_loadu_ps ((__ m128 *) & m (0,0))를 사용했습니다. 하지만 그것은 나에게 같은 오류가 발생합니다 ('__m128 *'에서 'const float *'로 매개 변수 1을 변환 할 수 없습니다). 왜냐하면 __m128 전에 const를 추가했기 때문입니다 ... – Totoro

+1

'__m128 *'하지만 'float *'. (귀하의 매트릭스 멤버가 편리하게 주문되었다고 가정하십시오 : v). 아마도 매트릭스에 데이터가있는 float *을 수동으로 빌드해야합니다. 16 바이트의 메모리를 할당하고 그 공간에 순서대로 수레를 씁니다. –

+0

이 답변에 감사드립니다! 그것은 내가 말했듯이, 내 데이터를 캐스팅 할 필요가 없다는 것을 깨닫게했다. 실제로 16 바이트 정렬되지 않은 주소를 읽고있다. 이제이 방법으로 작동합니다. __ m128 a = _mm_loadu_ps (& m (0,0)); 고맙습니다! 늦었고 내 시야가 조금 흐려진다. – Totoro