Advertisement
lamiastella

finalSAD_rh

Jun 27th, 2013
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "disparity.h"
  4. #include "m5op.h"
  5.  
  6. void finalSAD(F2D* integralImg, int win_sz, F2D* retSAD)
  7. {
  8. int endR, endC;
  9. int i, j, k;
  10. endR = integralImg->height;
  11. endC = integralImg->width;
  12. k = 0;
  13. sizeM=endC-win_sz;
  14. sizeN=endR-win_sz;
  15.  
  16. asm volatile (
  17.               "vmov d0, %[sizeN], %[sizeM]\n\t"
  18.                                 :
  19.               [sizeN] "r" (sizeN), [sizeM] "r" (sizeM)
  20.                                 :
  21.              );
  22. m5rh_start(kernel_number,1);
  23. int togo, size;
  24. //togo = sizeM*sizeN - i;
  25. //togo=(endC-win_sz)*(endR-win_sz) -i ;
  26.  
  27. //for(j=0; j<(endC-win_sz)*(endR-win_sz); j=j+8)
  28. for(j=0; j< sizeM * sizeN; j=j+8)  
  29. {    
  30.     togo = sizeM*sizeN - j;                                                                                                                                    
  31.     size = (togo > 8) ? 8 : togo;
  32.      
  33.      m5_rh_load_data(0, 1, 5 , 0); //Exec time  --subtraction takes only five cycles and they are all done in parallel
  34.     for(i=0; size ; i++)
  35.          {
  36.               m5_rh_load_data(0, 2, 2, 0); //2 cycles for address generation (???)  //how many cycles for address generation???
  37.               m5_rh_load_data(integralImg->data+j, size, 4, 1); //sizeof(int)=4  (should it be i or j ? ) (This line is the most confusing line for me !!!) --loading the data
  38.               m5_rh_load_data(0, 1, 5 , 0); //Exec time  --subtraction takes only five cycles and they are all done in parallel
  39.               //subsref(retSAD,i,j) = subsref(integralImg,(win_sz+i),(j+win_sz)) + subsref(integralImg,(i+1) ,(j+1)) - subsref(integralImg,(i+1),(j+win_sz)) - subsref(integralImg,(win_sz+i),(j+1));
  40.               //asubsref(current,i+j) = asubsref(in1,i+j) - asubsref(in2,i+j); @Amin's code in diffs.c in sift_rh
  41.               asubsref(retSAD,i+j) = asubsref(integralImg,(win_sz+i)+(j+win_sz)) + asubsref(integralImg,(i+1)+ (j+1)) - asubsref(integralImg,(i+1)+(j+win_sz)) - asubsref(integralImg,(win_sz+i)+(j+1));
  42.               m5_rh_load_data(0, 0, 0, 0); //done
  43.            
  44.           }
  45.      }  
  46.     m5rh_start(kernel_number,0);
  47.       return;
  48.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement