Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


etc:teach:diplomants:projects:2009:gccvec

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

etc:teach:diplomants:projects:2009:gccvec [2008/02/18 00:57] – создано zpsetc:teach:diplomants:projects:2009:gccvec [2008/02/24 03:07] (current) zps
Line 8: Line 8:
 [[ etc:common_activities:gcc_vectorization | уже сделали ]] [[ etc:common_activities:gcc_vectorization | уже сделали ]]
  
-FIXME написать план+ 
 + 
 +===== Ассемблер IA-64 ===== 
 + 
 + 
 +Чтобы хоть как-то въехать и подружиться с этим зверем решил разобрать пример (: 
 + 
 +<code c> 
 +#define N 16 
 + 
 +float S[2*N]; 
 +float M[N]; 
 + 
 +void decoder() 
 +
 +  int i; 
 +  for(i=0; i<N; i++) 
 +    M[i]=S[i]/2 + S[i]*2; 
 +
 +</code> 
 + 
 +<code asm> 
 +        .file   "cc.c" 
 +        .pred.safe_across_calls p1-p5,p16-p63 
 +        .sdata 
 +        .align 8 
 +.LC0: 
 +        data4   1056964608 
 +        data4   1056964608 
 +        .align 8 
 +.LC1: 
 +        data4   1073741824 
 +        data4   1073741824 
 +        .text 
 +        .align 16 
 +        .global decoder# 
 +        .type   decoder#, @function 
 +        .proc decoder# 
 +decoder: 
 +        .regstk 0, 0, 0, 0 
 +        .prologue 
 +        .body 
 +        .mmi 
 +        addl r14 = @ltoffx(S#), r1 
 +        addl r15 = @gprel(.LC1), gp 
 +        addl r16 = @gprel(.LC0), gp 
 +        ;; 
 +        .mmi 
 +        ld8.mov r14 = [r14], S# 
 +        ldf8 f10 = [r15] 
 +        nop 0 
 +        .mii 
 +        ldf8 f11 = [r16] 
 +        addl r15 = @ltoffx(M#), r1 
 +        ;; 
 +        nop 0 
 +        .mmi 
 +        ldf8 f8 = [r14], 8 
 +        ld8.mov r15 = [r15], M# 
 +        nop 0 
 +        ;; 
 +        .mmf 
 +        ldf8 f7 = [r14], 8 
 +        nop 0 
 +        fpmpy f6 = f8, f10 
 +        ;; 
 +        .mfi 
 +        nop 0 
 +        fpma f8 = f8, f11, f6 
 +        nop 0 
 +        .mmf 
 +        ldf8 f9 = [r14], 8 
 +        nop 0 
 +        fpmpy f6 = f7, f10 
 +        ;; 
 +        .mfi 
 +        nop 0 
 +        fpma f7 = f7, f11, f6 
 +        nop 0 
 +        .mmf 
 +        stf8 [r15] = f8, 8 
 +        ldf8 f8 = [r14], 8 
 +        fpmpy f6 = f9, f10 
 +        ;; 
 +        .mfi 
 +        nop 0 
 +        fpma f9 = f9, f11, f6 
 +        nop 0 
 +        .mmf 
 +        stf8 [r15] = f7, 8 
 +        ldf8 f7 = [r14], 8 
 +        fpmpy f6 = f8, f10 
 +        ;; 
 +        .mfi 
 +        nop 0 
 +        fpma f8 = f8, f11, f6 
 +        nop 0 
 +        .mmf 
 +        stf8 [r15] = f9, 8 
 +        ldf8 f9 = [r14], 8 
 +        fpmpy f6 = f7, f10 
 +        ;; 
 +        .mfi 
 +        nop 0 
 +        fpma f7 = f7, f11, f6 
 +        nop 0 
 +        .mmf 
 +        stf8 [r15] = f8, 8 
 +        ldf8 f8 = [r14], 8 
 +        fpmpy f6 = f9, f10 
 +        ;; 
 +        .mfi 
 +        nop 0 
 +        fpma f9 = f9, f11, f6 
 +        nop 0 
 +        .mmf 
 +        stf8 [r15] = f7, 8 
 +        ldf8 f7 = [r14] 
 +        fpmpy f6 = f8, f10 
 +        ;; 
 +        .mfi 
 +        nop 0 
 +        fpma f8 = f8, f11, f6 
 +        nop 0 
 +        .mfi 
 +        stf8 [r15] = f9, 8 
 +        fpmpy f10 = f7, f10 
 +        nop 0 
 +        ;; 
 +        .mfi 
 +        nop 0 
 +        fpma f7 = f7, f11, f10 
 +        nop 0 
 +        .mmi 
 +        nop 0 
 +        stf8 [r15] = f8, 8 
 +        nop 0 
 +        ;; 
 +        .mib 
 +        stf8 [r15] = f7 
 +        nop 0 
 +        br.ret.sptk.many b0 
 +        .endp decoder# 
 +        .common S#,128,8 
 +        .common M#,64,8 
 +        .ident  "GCC: (GNU) 4.3.0 20080202 (experimental)" 
 +</code> 
 +Цикл был развернут компилятором и превращен в нечто выше. Однако, судя по туториалу((можно посмотреть на ftp://kkv.spb.su/pub/projects/gccvect/)) все должно было быть не совсем так. и данная простая програмулька может быть еще оптимизировна на стадии ее исполнения.  
 + 
 +FIXME разобраться с тем что написано в ассемблере, чтобы не сильно пугаться всевозможных команд.
  
etc/teach/diplomants/projects/2009/gccvec.1203285475.txt.gz · Last modified: 2008/02/18 00:57 by zps