/normxcorr/trunk

To get this branch, use:
bzr branch http://suren.me/webbzr/normxcorr/trunk

« back to all changes in this revision

Viewing changes to dict_hw/src/local_sum.cu.h

  • Committer: Suren A. Chilingaryan
  • Date: 2009-12-12 01:38:41 UTC
  • Revision ID: csa@dside.dyndns.org-20091212013841-feih3qa4i28x75j4
Provide stand-alone library

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#include <stdio.h>
2
 
#include <stdlib.h>
3
 
 
4
 
#include <mex.h>
5
 
 
6
1
#include "normxcorr_hw.h"
7
 
#include "local_sum.h"
8
 
 
9
 
#include "local_sum_kernel.cu"
10
 
 
11
 
#include <unistd.h>
12
 
 
13
 
int local_sum(TProcessingState *ps, 
 
2
#include "local_sum_kernel.cu.h"
 
3
 
 
4
 
 
5
static inline int local_sum(TProcessingState *ps, 
14
6
    float *lsum, float *denom,
15
7
    float *tmp1, float *tmp2,
16
8
    float *in1, float *in2,
53
45
 
54
46
    return 0;
55
47
}
56
 
 
57
 
int local_sum_validate(TProcessingState *ps, int icp, const mxArray *lsum, const mxArray *denom) {
58
 
    int res = 0;
59
 
#ifdef VALIDATE_LSUM
60
 
    int size = ps->fft_size;
61
 
    int size2 = size*size;
62
 
    int alloc_size = ps->fft_alloc_size;
63
 
 
64
 
    if (lsum&&denom) {
65
 
        float *tmp = (float*)malloc(size2*sizeof(float));
66
 
        
67
 
        cudaMemcpy(tmp, ps->cuda_lsum_cache + icp * alloc_size, size2*sizeof(float), cudaMemcpyDeviceToHost);
68
 
        float *real =  (float*)mxGetData(lsum);
69
 
        if (memcmp(tmp, real, size2*sizeof(float))) {
70
 
            printf("lsum fault: %i\n", 1);
71
 
            for (int i = 0; i < size2; i++) {
72
 
                if (tmp[i] != real[i]) {
73
 
                    res = 1;
74
 
                    printf("lsum fault: %i %i - %f %f\n", i / size, i % size, tmp[i], real[i]);
75
 
                    break;
76
 
                }
77
 
            }
78
 
        }
79
 
 
80
 
        cudaMemcpy(tmp, ps->cuda_denom_cache + icp * alloc_size, size2*sizeof(float), cudaMemcpyDeviceToHost);
81
 
        real =  (float*)mxGetData(denom);
82
 
        if (memcmp(tmp, real, size2*sizeof(float))) {
83
 
            for (int i = 0; i < size2; i++) {
84
 
                float diff = (tmp[i] == real[i])?0:2*fabs(tmp[i] - real[i])/(tmp[i] = real[i]);
85
 
                if (diff > 0.0001) {
86
 
                    res = 1;
87
 
                    printf("denom fault: %i %i - %f %f %f\n", i / size, i % size, tmp[i], real[i], diff);
88
 
                    break;
89
 
                }
90
 
            }
91
 
        }
92
 
 
93
 
        free(tmp);
94
 
    }
95
 
#endif /* VALIDATE_LSUM */
96
 
 
97
 
    return res;
98
 
}