Blame view

cpp/cudafunc.cu 2.33 KB
6ef1dab9   Laila Saadatifard   fix one bug in th...
1
2
3
  #include "cuda_fp16.h"
  #include "float_to_half.cuh"
  #include "half_to_float.cuh"
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
4
5
  #include "gaussian_blur3.cuh"
  #include "gradient3.cuh"
f12505fb   Laila Saadatifard   upload the ivote ...
6
7
8
9
  #include "mag3.cuh"
  #include "vote3.cuh"
  #include "update_dir3.cuh"
  #include "local_max3.cuh"
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
10
11
  
  
f12505fb   Laila Saadatifard   upload the ivote ...
12
13
14
  void ivote3(float* center, float* img, float sigma[], float phi, float d_phi, unsigned int r[],
  			int iter, float t, unsigned int conn[], unsigned int x, unsigned int y, unsigned int z){
  
f12505fb   Laila Saadatifard   upload the ivote ...
15
  	// compute the number of bytes in the input data
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
16
  	unsigned int bytes = x * y * z * sizeof(float);
f12505fb   Laila Saadatifard   upload the ivote ...
17
18
  
  	//assign memory on gpu for the input data.
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
19
  	float* gpuI0;
f12505fb   Laila Saadatifard   upload the ivote ...
20
21
22
  	cudaMalloc(&gpuI0, bytes);	
  
  	//copy the image data to the GPU.
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
23
24
  	cudaMemcpy(gpuI0, img, bytes, cudaMemcpyHostToDevice);
  
f12505fb   Laila Saadatifard   upload the ivote ...
25
  	//call the blurring function from the gpu.
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
26
27
  	gpu_gaussian_blur3<float>(gpuI0, sigma, x, y, z);
  
f12505fb   Laila Saadatifard   upload the ivote ...
28
29
30
31
32
33
  	cudaDeviceSynchronize();
  		
  	//copy the blur data back to the cpu
  	//cudaMemcpy(img, gpuI0, bytes, cudaMemcpyDeviceToHost);
  	
  	//assign memory on the gpu for the gradient along the X, y, z.
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
34
35
36
  	float* gpu_grad;
  	cudaMalloc(&gpu_grad, bytes*3);
  	
f12505fb   Laila Saadatifard   upload the ivote ...
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  	//call the gradient function from the gpu.
  	gpu_gradient3<float>(gpu_grad, gpuI0, x, y, z);
  	cudaFree(gpuI0);
  	
  	//assign memory on the gpu for the gradient magnitude
  	float* gpu_mag;
  	cudaMalloc(&gpu_mag, bytes);
  	
  	//call the magnitude function
  	gpu_mag3<float>(gpu_mag, gpu_grad, x, y, z);
  	//cudaMemcpy(img, gpu_mag, bytes, cudaMemcpyDeviceToHost);
  	//assign memory on the gpu for the vote.
  	float* gpu_vote;
  	cudaMalloc(&gpu_vote, bytes);
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
51
  
f12505fb   Laila Saadatifard   upload the ivote ...
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  	float cos_phi = cos(phi);
  
  	//call the vote function.
  	for (int i = 0; i < iter; i++){
  
  		gpu_vote3<float>(gpu_vote, gpu_grad, gpu_mag, cos_phi, r, x, y, z);
  		cudaDeviceSynchronize();
  		if (i==0)
  			cudaMemcpy(img, gpu_vote, bytes, cudaMemcpyDeviceToHost);
  		
  		if (phi >= d_phi){	
  			gpu_update_dir3<float>(gpu_grad, gpu_vote, cos_phi, r, x, y, z);
  			cudaDeviceSynchronize();
  			phi = phi - d_phi;
  			cos_phi = cos(phi);
  		}
  	
  	}
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
70
  
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
71
  	cudaFree(gpu_grad);
f12505fb   Laila Saadatifard   upload the ivote ...
72
  	cudaFree(gpu_mag);
6ef1dab9   Laila Saadatifard   fix one bug in th...
73
  	cudaMemcpy(center, gpu_vote, bytes, cudaMemcpyDeviceToHost);
f12505fb   Laila Saadatifard   upload the ivote ...
74
75
76
77
78
79
80
81
82
  
  	//allocate space on the gpu for the final detected cells.
  	float* gpu_output;
  	cudaMalloc(&gpu_output, bytes);
  
  	//call the local max function
  	gpu_local_max3<float>(gpu_output, gpu_vote, t, conn, x, y, z);
  
  	//copy the final result to the cpu.
6ef1dab9   Laila Saadatifard   fix one bug in th...
83
  	//cudaMemcpy(center, gpu_output, bytes, cudaMemcpyDeviceToHost);
f12505fb   Laila Saadatifard   upload the ivote ...
84
85
86
87
88
  		
  	
  	cudaFree(gpu_vote);
  	cudaFree(gpu_output);
  	
c9aba18a   Laila Saadatifard   ivote3 on the GPU...
89
  }