找到一段优化的好东东,对比赛应该有用

代替dist = sqrt(distx + disty + distz)的东东:

void CSSETestDlg(
float* pArray1, // [输入] 源数组1
float* pArray2, // [输入] 源数组2
float* pArray3, // [输入] 源数组3
float* pResult, // [输出] 用来存放结果的数组
int nSize) // [输入] 数组的大小
{
int nLoop = nSize/ 4;

__m128 m1, m2, m3, m4;

__m128* pSrc1 = (__m128*) pArray1;
__m128* pSrc2 = (__m128*) pArray2;
__m128* pSrc3 = (__m128*) pArray3;
__m128* pDest = (__m128*) pResult;


__m128 m0_5 = _mm_set_ps1(0.5f); // m0_5[0, 1, 2, 3] = 0.5

for ( int i = 0; i < nLoop; i++ )
{
m1 = _mm_mul_ps(*pSrc1, *pSrc1); // m1 = *pSrc1 * *pSrc1
m2 = _mm_mul_ps(*pSrc2, *pSrc2);
m3 = _mm_mul_ps(*pSrc3, *pSrc3);
m4 = _mm_add_ps(m1, m2);
m4 = _mm_add_ps(m4, m3);
*pDest = _mm_sqrt_ps(m4); // m4 = sqrt(m3)

pSrc1++;
pSrc2++;
pSrc3++;
pDest++;
}
}
...全文
821 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyj_yy 2007-01-24
  • 打赏
  • 举报
回复
哪位帮忙解答一下?
tyj_yy 2007-01-23
  • 打赏
  • 举报
回复
另外, 我用的是赛杨2.6, VS2003, Intel C++ 9.1
tyj_yy 2007-01-23
  • 打赏
  • 举报
回复
我把上面的代码编译了一下, 与sqrt(*pSrc1 * *pSrc1 +*pSrc2 * *pSrc2 +*pSrc3 * *pSrc3)
这样的纯C代码相比, 到倒慢了, 请问, 是怎么回事儿?
每个数组的大小都是400K, 我反复试过了, 无论是用VC编译, 还是用Intel C++编译, 打开了所有的优化, 都是这样的结果, 我简直不敢相信.
请大家指教一下.
wh_esther 2007-01-05
  • 打赏
  • 举报
回复
不是double
celineshi 2007-01-04
  • 打赏
  • 举报
回复
isline (缘清)

呵呵,终于看到你的作品了
m2213231 2007-01-04
  • 打赏
  • 举报
回复
不用pd似乎会降低精度哎

568

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧