作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想要做的是加载四个字符值并将它们添加到一个由 4 个 float 组成的 vector 中。起初我所做的是这样的:
// char b[1024] is defined somewhere else
__declspec(align(16)) float d[3];
__declspec(align(16)) float a[4];
__m128* pSrcDst1 = (__m128*) d;
__m128* pSrc2 = (__m128*) a;
a[0] = b[i ];
a[1] = b[i+1];
a[2] = b[i+2];
a[3] = b[i+3];
*pSrcDst1 = _mm_add_ps(*pSrcDst1, *pSrc2);
我想利用 _mm_loadu_ps
之类的东西来实现 char*
,所以我可以这样做:
// char b[1024] is defined somewhere else
__declspec(align(16)) float d[3];
__declspec(align(16)) float a[4];
__declspec(align(16)) char c[4];
__m128* pSrcDst1 = (__m128*) d;
__m128* pSrc2 = (__m128*) a;
__m64* pSrc3 = (__m64*) c;
*pSrc3 = _mm_loadu_ps(&b[i]);
*pSrc2 = _mm_cvtpu8_ps(*pSrc3);
*pSrcDst1 = _mm_add_ps(*pSrcDst1, *pSrc2);
执行此操作的正确和优化方法是什么?
最佳答案
据我所知,您首先需要将 uint8_t 值扩展为 uint32_t 值,然后您可以加载它们并执行您喜欢的任何操作。有关详细信息,请参见此处:SSE: convert short integer to float
关于c++ - char * 的 _mm_loadu_ps 是否有等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19209149/
我想要做的是加载四个字符值并将它们添加到一个由 4 个 float 组成的 vector 中。起初我所做的是这样的: // char b[1024] is defined somewhere else
我是一名优秀的程序员,十分优秀!