help-gift
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [help-GIFT] patches


From: risc
Subject: Re: [help-GIFT] patches
Date: Wed, 16 Aug 2006 13:04:21 -0500
User-agent: Mutt/1.4.1i

whoops. patch 70 is reversed, and not as tidy as i'd like, i'll re-generate it.

Julia Longtin <address@hidden>

On Wed, Aug 16, 2006 at 12:58:07PM -0500, address@hidden wrote:
> I'm commiting the earlier discussed patches.
> 
> the patches i'm commiting change the performance from 1.9, to 1.7. 10% speed 
> boost. ;D
> 
> attatched, you will find even more patches. per patch policy, i post them for 
> review. i'll apply friday if no-one objects.
> 
> patch 60 speeds things up slightly, as does patch 70. the important thing 
> about 70 is that it allows me to pull my "sse2 neat trick" in the next round
> of patches!
> 
> for your perusal...
> 
> Julia Longtin <address@hidden>

> --- ../../dev2/gift/ChangeLog 2006-08-13 17:18:40.000000000 +0000
> +++ ChangeLog 2006-08-13 17:21:22.000000000 +0000
> @@ -1,3 +1,9 @@
> +2006-08-13    <address@hidden>
> +
> +     * FeatureExtraction/gabor.c
> +     dont use calloc for conv, instead declare, and clear manually.
> +     change to C99 datatypes in gabor_filter().
> +
>  2006-08-02    <address@hidden>
>       * FeatureExtraction/extract_block_features.c
>       define the kernals here, pass to gabor.c for init, use

> --- ../../dev2/gift/FeatureExtraction/gabor.c 2006-08-13 16:47:51.000000000 
> +0000
> +++ FeatureExtraction/gabor.c 2006-08-13 17:07:00.000000000 +0000
> @@ -79,15 +79,18 @@
>       }
>  }
>  
> -void gabor_filter(double *image, int width, int height, int filter_scale, 
> int orientation, double ** kernelsxy, double *output) {
> +void gabor_filter(double *image, int width, int height, int filter_scale, 
> int orientation, double **kernelsxy, double *output) {
>  
> -     double *conv;
> -     int x, y, t_x, t_y;
> -     int i;
> +     uint32_t x, y;
> +     int32_t t_x, t_y;
> +     uint32_t i;
>       double * target_kernal;
> +     double conv[65536]; /* take advantage of our fixed image size. 65536 == 
> width*height */
>  
> -
> -     conv = (double *)calloc(width*height, sizeof(double));
> +     for (i = 0; i < width*height; i++)
> +       {
> +         conv[i]= 0;   /* needs to be zeroed */
> +       }
>  
>       target_kernal=kernelsxy[filter_scale*num_gabors_per_scale+orientation];
>  
> @@ -144,5 +147,4 @@
>       }
>       }
>  
> -     free(conv);
>  }

> --- ../../dev2/gift/ChangeLog 2006-08-14 01:54:51.000000000 +0000
> +++ ChangeLog 2006-08-14 02:03:22.000000000 +0000
> @@ -1,3 +1,8 @@
> +2006-08-14    <address@hidden>
> +
> +     * FeatureExtraction/gabor.c
> +     remove int32_t t_x, replace with uint32_t k. uint32_t is slightly 
> faster, and simplifies the inner loops.
> +
>  2006-08-13    <address@hidden>
>  
>       * FeatureExtraction/gabor.c

> --- FeatureExtraction/gabor.c 2006-08-14 01:56:25.000000000 +0000
> +++ ../../dev2/gift/FeatureExtraction/gabor.c 2006-08-14 01:54:58.000000000 
> +0000
> @@ -82,36 +82,33 @@
>  void gabor_filter(double *image, int width, int height, int filter_scale, 
> int orientation, double **kernelsxy, double *output) {
>  
>       uint32_t x, y;
> -     int32_t t_y;
> +     int32_t t_x, t_y;
>       uint32_t i;
> -     uint32_t k;
>       double * target_kernal;
>       double conv[65536]; /* take advantage of our fixed image size. 65536 == 
> width*height */
> -     double * target_conv;
> -     double * target_image;
>  
>       for (i = 0; i < width*height; i++)
>         {
>           conv[i]= 0;   /* needs to be zeroed */
> -         output[i]= 0;   /* needs to be zeroed */
>         }
>  
> -     /* first convolution */
>       target_kernal=kernelsxy[filter_scale*num_gabors_per_scale+orientation];
> +
> +     /* first convolution */
>       for (x = 0; x < width; x++) {
>       for (y = 0; y < height; y++) {
> -             
> target_image=&image[(width*height)-(y*width+x+kernal_size[filter_scale]/2)];
> -             for (k=0; k < kernal_size[filter_scale]; k++) {
> -                     if ((x+kernal_size[filter_scale]/2 >= k) && 
> (x+kernal_size[filter_scale]/2 < width+k)) {
> +             output[y*width + x] = 0; /* might as well be here */
> +             for (t_x = -kernal_size[filter_scale]/2; t_x <= 
> kernal_size[filter_scale]/2; t_x++) {
> +                     if (((x - t_x) >= 0) && ((x - t_x) < width)) {
>                               conv[y*width + x] +=
> -                                     target_kernal[k]*target_image[k];       
>                           
> +                                     target_kernal[t_x + 
> kernal_size[filter_scale]/2]*image[65536-(y*width+ (x - t_x))];
>                       }
>               }
>       }
>       }
>  
> -     /* second convolution */
>       target_kernal=&target_kernal[kernal_size[filter_scale]];
> +     /* second convolution */
>       for (x = 0; x < width; x++) {
>       for (y = 0; y < height; y++) {
>               for (t_y = -kernal_size[filter_scale]/2; t_y <= 
> kernal_size[filter_scale]/2; t_y++) {
> @@ -125,22 +122,21 @@
>       for (i = 0; i < width*height; i++)
>               conv[i] = 0;
>  
> -     /* third convolution */
>       target_kernal=&target_kernal[kernal_size[filter_scale]];
> +     /* third convolution */
>       for (x = 0; x < width; x++) {
>       for (y = 0; y < height; y++) {
> -             
> target_image=&image[(width*height)-(y*width+x+kernal_size[filter_scale]/2)];
> -             for (k=0; k < kernal_size[filter_scale]; k++) {
> -                     if ((x+kernal_size[filter_scale]/2 >= k) && 
> (x+kernal_size[filter_scale]/2 < width+k)) {
> +             for (t_x = -kernal_size[filter_scale]/2; t_x <= 
> kernal_size[filter_scale]/2; t_x++) {
> +                     if (((x - t_x) >= 0) && ((x - t_x) < width)) {
>                               conv[y*width + x] +=
> -                                     target_kernal[k]*target_image[k];       
>                           
> +                                     target_kernal[t_x + 
> kernal_size[filter_scale]/2]*image[65536-(y*width + (x - t_x))];
>                       }
>               }
>       }
>       }
>  
> -     /* fourth convolution */
>       target_kernal=&target_kernal[kernal_size[filter_scale]];
> +     /* fourth convolution */
>       for (x = 0; x < width; x++) {
>       for (y = 0; y < height; y++) {
>               for (t_y = -kernal_size[filter_scale]/2; t_y <= 
> kernal_size[filter_scale]/2; t_y++) {

> _______________________________________________
> help-GIFT mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/help-gift




reply via email to

[Prev in Thread] Current Thread [Next in Thread]