久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

SIMD(MMX/SSE/AVX)變量命名規(guī)范心得

 xinyz4104 2014-04-26

  當使用Intrinsics函數(shù)來操作SIMD指令集(MMX/SSE/AVX等)時,,會面對不同長度的SIMD數(shù)據(jù)類型,其中又分為多種緊縮格式,。為此,,我設(shè)計了一套SIMD變量命名規(guī)范,可以有效的提高代碼的可讀性,。

一,、SIMD數(shù)據(jù)類型簡介

  SIMD數(shù)據(jù)類型有——
__m64:64位緊縮整數(shù)(MMX)。
__m128:128位緊縮單精度(SSE),。
__m128d:128位緊縮雙精度(SSE2),。
__m128i:128位緊縮整數(shù)(SSE2)。
__m256:256位緊縮單精度(AVX)。
__m256d:256位緊縮雙精度(AVX),。
__m256i:256位緊縮整數(shù)(AVX),。
注:緊縮整數(shù)包括了8位、16位,、32位,、64位的帶符號和無符號整數(shù)。

  這些數(shù)據(jù)類型與寄存器的對應(yīng)關(guān)系為——
64位MM寄存器(MM0~MM7):__m64,。
128位SSE寄存器(XMM0~XMM15):__m128,、__m128d、__m128i,。
256位AVX寄存器(YMM0~YMM15):__m256,、__m256d、__m256i,。


二,、SIMD變量命名規(guī)范

  參考匈牙利命名法(Hungarian notation),在變量名前面增加類型前綴,。
  類型前綴為3個小寫字母,,首字母代表寄存器寬度,最后兩個字母代表緊縮數(shù)據(jù)類型,。

  寄存器寬度(首字母)——
m:64位MM寄存器,。對應(yīng) __m64
x:128位SSE寄存器。對應(yīng) __m128,、__m128d,、__m128i。
y:256位AVX寄存器,。對應(yīng) __m256,、__m256d、__m256i,。

  緊縮數(shù)據(jù)類型(兩個字母)——
mb:8位數(shù)據(jù),。用于只知道長度、不知道具體緊縮格式時,。(b:Byte)
mw:16位數(shù)據(jù),。(w:Word)
md:32位數(shù)據(jù)。(d:DoubleWord)
mq:64位數(shù)據(jù),。(q:QuadWord)
mo:128位數(shù)據(jù),。(o:OctaWord)
mh:256位數(shù)據(jù)。(h:HexWord)
ub:8位無符號整數(shù),。
uw:16位無符號整數(shù),。
ud:32位無符號整數(shù),。
uq:64位無符號整數(shù)。
ib:8位帶符號整數(shù),。
iw:16位帶符號整數(shù),。
id:32位帶符號整數(shù)。
iq:64位帶符號整數(shù),。
fh:16位浮點數(shù),,即半精度浮點數(shù)。(h:Half)
fs:32位浮點數(shù),,即單精度浮點數(shù)。(s:Single)
fd:64位浮點數(shù),,即雙精度浮點數(shù),。(d:double)

  例如——
mub:64位緊縮字節(jié)(64位MMX寄存器,其中存放了8個8位無符號整數(shù)),。
xfs:128位緊縮單精度(128位SSE寄存器,,其中存放了4個單精度浮點數(shù))。
xid:128位緊縮帶符號字(128位SSE寄存器,,其中存放了4個32位帶符號整數(shù)),。
yfd:256位緊縮雙精度(256位AVX寄存器,其中存放了4個雙精度浮點數(shù)),。
yfh:256位緊縮半精度(256位AVX寄存器,,其中存放了16個半精度浮點數(shù))。

 

三,、示例代碼

  例如SSE累加求和程序——

復(fù)制代碼
int sum3_Intrinsics(int *a, int size)
{
    if (NULL==a)    return 0;
    if (size<0)    return 0;

    int s = 0;    // 返回值
    __m128i xidSum = _mm_setzero_si128();    // 累積,。[SSE2] 賦初值0
    __m128i xidLoad;    // 加載
    int cntBlock = size / 4;    // 塊數(shù)。SSE寄存器能一次處理4個DWORD
    int cntRem = size & 3;    // 剩余數(shù)量
    __m128i* p = (__m128i*)a;
    for(int i = 0; i < cntBlock; ++i)
    {
        xidLoad = _mm_load_si128(p);    // [SSE2] 加載
        xidSum = _mm_add_epi32(xidSum, xidLoad);    // [SSE2] 帶符號32位緊縮加法
        ++p;
    }

    // 處理剩下的
    int* q = (int*)p;
    for(int i = 0; i < cntRem; ++i)    s += q[i];

    // 將累加值合并
    xidSum = _mm_hadd_epi32(xidSum, xidSum);    // [SSSE3] 帶符號32位水平加法
    xidSum = _mm_hadd_epi32(xidSum, xidSum);
    s += _mm_cvtsi128_si32(xidSum);    // [SSE2] 返回低32位

    return s;
}
復(fù)制代碼

   代碼出自——
http://topic.csdn.net/u/20120102/01/fc8d7aa4-bffc-4d9a-a34a-5056c6d27b54.html
#9樓

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多