哪方法文本效率最高?
文本A 200M
格式:
dsafdsafd
dsafdsafdsafdsa
dsafdsafdsa
dsafdsaf
.....
文本B 150M
格式:相同
用哪方法文本A中文本B中相同的行掉
最好不要用什之的
[解决办法]
分两种优化,1种是逻辑上算法的优化,一般最后都需要对比两段字串是否相同而这个操作是最耗费时间的
第二种就是代码级的优化。下面大概写了算法,使用了SIMD指令:
- Delphi(Pascal) code
Mov esi,srcMov edi,destMov ebx,ptmp //size 64byte@loop://读入A一行128bytexorps xmm0,xmm0movups xmmword ptr [ebx], xmm0movups xmm0, xmmword ptr [esi]movups xmm1, xmmword ptr [esi+$10]movups xmm2, xmmword ptr [esi+$20]movups xmm3, xmmword ptr [esi+$30]movups xmm4, xmmword ptr [esi+$40]movups xmm5, xmmword ptr [esi+$50]movups xmm6, xmmword ptr [esi+$60]movups xmm7, xmmword ptr [esi+$70]//与B一行 xorxorps xmm0, xmmword ptr [edi]xorps xmm1, xmmword ptr [edi+$10]xorps xmm2, xmmword ptr [edi+$20]xorps xmm3, xmmword ptr [edi+$30]xorps xmm4, xmmword ptr [edi+$40]xorps xmm5, xmmword ptr [edi+$50]xorps xmm6, xmmword ptr [edi+$60]xorps xmm7, xmmword ptr [edi+$70]//判断是否全相等xorps xmmword ptr [ebx],xmm0xorps xmmword ptr [ebx],xmm1xorps xmmword ptr [ebx],xmm2xorps xmmword ptr [ebx],xmm3xorps xmmword ptr [ebx],xmm4xorps xmmword ptr [ebx],xmm5xorps xmmword ptr [ebx],xmm6xorps xmmword ptr [ebx],xmm7Xor eax,eaxCmp eax,[ebx]Cmp eax,[ebx+4]Cmp eax,[ebx+8]Cmp eax,[ebx+$C]//判断后这里可以处理如果[ebx]16byte全0则代表两行相同//…..Add esi,$80 //下一行Add edi,$80Cmp esi,endlenJnz loopCmp edi,endlenJnz loop