盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

基于MMX指令集的程序设计简介

时间:2024/12/18作者:未知来源:盾怪网教程人气:

[摘要]= nBlue; __m64 nNull = _m_from_int(0); // null __m64 tmp = _m_from_int(0); ...
= nBlue;

    __m64 nNull = _m_from_int(0);           // null
    __m64 tmp = _m_from_int(0);             // 临时工作临时变量初始化

    _mm_empty();                            // 清空MMX寄存器。

    __m64 nCoeff = Get_m64(c);

    DWORD* pIn = (DWORD*) pSource;          // 输入双字数组
    DWORD* pOut = (DWORD*) pDest;           // 输出双字数组

    for ( int i = 0; i < nNumberOfPixels; i++ )
    {
        tmp = _m_from_int(*pIn);                // tmp = *pIn (在tmp的低32位写入数据)

        tmp = _mm_unpacklo_pi8(tmp, nNull );    //将tmp中低位的4个字节转化为字
//字的高位用nNull中对应位上的位值填充。

        tmp =  _mm_mullo_pi16 (tmp , nCoeff);   //将tmp中的每一个字相乘,将相乘结果的高位送到nCoeff,在tmp中只保留每个结果的低位。

        tmp = _mm_srli_pi16 (tmp , 8);          // 将tmp中的每一个字右移8位,相当于除以256

        tmp = _mm_packs_pu16 (tmp, nNull);      // 使用饱和模式将tmp中的结果做如下处理:
                                                //将tmp中的4个字转化为4个字节,并将这4个字节写到tmp中的低32位中
                                                // 同时,将nNull中的4个字转化为4个字节,并将这4个字节写到tmp的高32位中。

        *pOut = _m_to_int(tmp);                 // *pOut = tmp (将tmp低32位的数据放入pOut数组中)
        
        pIn++;
        pOut++;

    }

    _mm_empty();                        
}

你可以参看示例项目的源代码了解有关此项目的更多的细节。

SSE2 技术

SSE2技术包含有一个类似MMX中对整数操作的指令集,同时也包含128位的SSE寄存器组。比如,用SSE2技术实现更改图象颜色平衡度能够比用纯C++代码实现此功能在效率上有很大提升。SSE2同时是SSE技术的扩展,比如它不仅可以单精度浮点数数组,而且能够处理双精度浮点数数据类型的数组。用C++实现的MMXSwarm 示例项目不仅使用了MMX指令函数,而且使用了SSE2指令对整型数操作的函数。

参考文档:

[1] Intel软件说明书(Intel Software manuals):http://developer.intel.com/design/archives/processors/mmx/index.htm 。

[2]  MSDN中有关MMX技术的主题:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vcrefsupportformmxtechnology.asp。

[3] Microsoft Visual C++ CPUID项目示例:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample/html/vcsamcpuiddeterminecpucapabilities.asp。

[4] Microsoft Visual C++ MMXSwarm项目示例:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample/html/vcsamMMXSwarmSampleDemonstratesCImageVisualCsMMXSupport.asp。

[5]
Matt Pietrek在Microsoft Systems Journal 1998年2月刊上的评论文章:
http://www.microsoft.com/msj/0298/hood0298.aspx 。

关键词:基于MMX指令集的程序设计简介




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版