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;
  • 相关阅读:
    实验4:开源控制器实践——OpenDaylight
    实验3:OpenFlow协议分析实践
    实验2:Open vSwitch虚拟交换机实践
    第一次个人编程作业
    SDN实验1:SDN拓扑实践
    第一次博客作业
    LeetCode-1290.Convert Binary Number in a Linked List to Integer
    面试题 02.02. Kth Node From End of List LCCI
    剑指 Offer 24. 反转链表
    剑指 Offer 06. 从尾到头打印链表
  • 原文地址:https://www.cnblogs.com/jxgxy/p/1595722.html
Copyright © 2011-2022 走看看