내가 조금 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));
처음에는 __m128 a = _mm_loadu_ps ((__ m128 *) & m (0,0))를 사용했습니다. 하지만 그것은 나에게 같은 오류가 발생합니다 ('__m128 *'에서 'const float *'로 매개 변수 1을 변환 할 수 없습니다). 왜냐하면 __m128 전에 const를 추가했기 때문입니다 ... – Totoro
'__m128 *'하지만 'float *'. (귀하의 매트릭스 멤버가 편리하게 주문되었다고 가정하십시오 : v). 아마도 매트릭스에 데이터가있는 float *을 수동으로 빌드해야합니다. 16 바이트의 메모리를 할당하고 그 공간에 순서대로 수레를 씁니다. –
이 답변에 감사드립니다! 그것은 내가 말했듯이, 내 데이터를 캐스팅 할 필요가 없다는 것을 깨닫게했다. 실제로 16 바이트 정렬되지 않은 주소를 읽고있다. 이제이 방법으로 작동합니다. __ m128 a = _mm_loadu_ps (& m (0,0)); 고맙습니다! 늦었고 내 시야가 조금 흐려진다. – Totoro