WEB开发网
开发学院软件开发VC 利用模板元编程实现解循环优化 阅读

利用模板元编程实现解循环优化

 2008-08-09 19:26:08 来源:WEB开发网   
核心提示: dim=11:循环点积计算发生了变化,代码如下://MyGenerate(v1,v1+dim,"v1");00401017moveax,offset string "v1" (402134h)0040101Cleaedi,[esp+68h]00401

dim=11:

循环点积计算发生了变化,代码如下:

//MyGenerate(v1,v1+dim,"v1");
00401017 mov  eax,offset string "v1" (402134h)
0040101C lea  edi,[esp+68h]
00401020 lea  ebx,[esp+3Ch]
00401024 call  MyGenerate<int *> (401280h)
//MyGenerate(v2,v2+dim,"v2");
00401029 mov  eax,offset string "v2" (402138h)
0040102E lea  edi,[esp+3Ch]
00401032 lea  ebx,[esp+10h]
00401036 call  MyGenerate<int *> (401280h)
// v1[0]:esp+3Ch, v2[0]:esp+10h
//int r1 = dot_product(dim,v1,v2);
0040103B xor  ebp,ebp
// int result = ebp=0;
0040103D xor  eax,eax
// eax=0;
0040103F nop
// align
// i=eax;
// loops:
00401040 mov  ecx,dword ptr [esp+eax+10h]
// ecx = *(v2+i);
00401044 imul  ecx,dword ptr [esp+eax+3Ch]
// ecx *= *(v1+i);
00401049 add  eax,4
// ++i;
0040104C add  ebp,ecx
// result+=ecx
0040104E cmp  eax,2Ch
// if (i<11)
00401051 jl    main+30h (401040h)
// goto loops;

编译器已经不能“忍受”这样长度的循环展开,将其老老实实的翻译成真正的循环。

但是,编译器仍然对函数做了inline工作。

对于模板元解循环,因为代码要求11层函数调用,编译器能做的只有将11层调用inline,得到的是就地展开的计算。

dim=12:

上一页  3 4 5 6 7 8 9  下一页

Tags:利用 模板 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接