zoukankan      html  css  js  c++  java
  • (转)DELPHI求乱序数组最小值快速算法(Delphi MMX优化算法应用之三)

    type

      PMyList 
    = ^TMylist;

      TMylist 
    = array of word;



    function GetMinValue(List: PMyList):Word; stdcall;

    var

      ForCount, ListCount,i: Dword;

      MAXVaule: int64;

      List0Address: Dword;



    begin

      Result :
    = $7FFF;

      ListCount :
    = High(List^) + 1;

      
    if (ListCount < 16or ((ListCount mod 16)<>0then

      
    begin

       
    for I := 0 to ListCount - 1 do

          
    begin

             
    if List^[i] <  Result then  Result := List^[i];

          
    end;

      
    end else

      
    begin

        MAXVaule :
    = $7FFF7FFF7FFF7FFF;

        List0Address :
    = Dword(@List^[0]);

        ForCount :
    = ListCount div 16//4*MMX

        
    asm

          push eax

          push ecx

          push esi

          mov esi, List0Address  
    //开始地址

          mov ecx, ForCount      
    //长度

          MOVQ MM0,MAXVaule

          mov eax,
    0

        @CmpLoop:

          prefetchnta [esi 
    + eax + 1024// fetch ahead by 1024 bytes

          movq mm1, qword [esi
    +eax]

          movq mm2, qword [esi
    +eax+8]

          movq mm3, qword [esi
    +eax+16]

          movq mm4, qword [esi
    +eax+24]

          PMINSW MM0,MM1

          PMINSW MM0,MM2

          PMINSW MM0,MM3

          PMINSW MM0,MM4

          add eax,
    32

          sub ecx, 
    1

        jnz @CmpLoop

          MOVQ MM1,MM0

          PSRLQ MM1,$
    20  //右移

          PMINSW MM0,MM1

          MOVQ MM1,MM0

          PSRLQ MM1,$
    10  //右移

          PMINSW MM0,MM1

          Movd eax,mm0

          Mov  Result,AX

          Sfence

          Emms

          pop esi

          pop ecx

          pop eax

        
    end;

      
    end;



    end;
  • 相关阅读:
    编写高质量的代码,改善c#程序的157个建议_之1~10
    文件指针创建失败!File *fp失败
    一拜天地
    现金流中的机会,及其评估(摘抄)
    隐藏Mac Dock 中的某个图标
    vim快捷方式
    mac 快捷键
    mysql explain
    druid 连接池配置
    分布式数据库中间件
  • 原文地址:https://www.cnblogs.com/jxgxy/p/1595722.html
Copyright © 2011-2022 走看看