Commit efe7b7ccb1b6ff21145e0165d561a6b233568f96

Authored by Pavel Govyadinov
1 parent 213d109c

Added a detailed spider class timer that is ran only in TIMING mode (has to be e…

…nabled in CMakeLists)
stim/cuda/cuda_texture.cuh
@@ -99,8 +99,8 @@ namespace stim @@ -99,8 +99,8 @@ namespace stim
99 &resource, 99 &resource,
100 tex, 100 tex,
101 target, 101 target,
102 -// cudaGraphicsMapFlagsReadOnly  
103 - cudaGraphicsRegisterFlagsNone 102 + cudaGraphicsMapFlagsReadOnly
  103 +// cudaGraphicsRegisterFlagsNone
104 ) 104 )
105 ); 105 );
106 106
stim/cuda/spider_cost.cuh
@@ -40,11 +40,10 @@ namespace stim{ @@ -40,11 +40,10 @@ namespace stim{
40 ///Returns the value of the template pixel. 40 ///Returns the value of the template pixel.
41 ///@param int x --location of a pixel. 41 ///@param int x --location of a pixel.
42 __device__ 42 __device__
43 - float Template(int x) 43 + float Template(int x, int max_x)
44 { 44 {
45 - if(x < 32/6 || x > 32*5/6 || (x > 32*2/6 && x < 32*4/6)){  
46 -// if(x < 2 || x > 13 || (x > 5 && x < 10)){  
47 -// if(x < ceilf(16/6) || x > floorf(16*5/6) || (x > floorf(16*2/6) && x < ceilf(16*4/6))){ 45 + if(x < max_x/6 || x > max_x*5/6 || (x > max_x*2/6 && x < max_x*4/6))
  46 + {
48 return 1.0; 47 return 1.0;
49 }else{ 48 }else{
50 return 0.0; 49 return 0.0;
@@ -71,7 +70,7 @@ namespace stim{ @@ -71,7 +70,7 @@ namespace stim{
71 int g_idx = blockIdx.y; 70 int g_idx = blockIdx.y;
72 71
73 float valIn = tex2D<unsigned char>(texIn, x, y)/255.0; 72 float valIn = tex2D<unsigned char>(texIn, x, y)/255.0;
74 - float valTemp = Template(x); 73 + float valTemp = Template(x, dx);
75 74
76 // print[idx] = abs(valIn); ///temporary 75 // print[idx] = abs(valIn); ///temporary
77 76
@@ -149,7 +148,7 @@ namespace stim{ @@ -149,7 +148,7 @@ namespace stim{
149 for( int i = 0; i<DIM_Y; i++){ 148 for( int i = 0; i<DIM_Y; i++){
150 if(output[i] < mini){ 149 if(output[i] < mini){
151 mini = output[i]; 150 mini = output[i];
152 - idx = i; 151 + idx = i;
153 } 152 }
154 } 153 }
155 154
stim/gl/gl_spider.h
@@ -31,6 +31,11 @@ @@ -31,6 +31,11 @@
31 31
32 #include <iostream> 32 #include <iostream>
33 #include <fstream> 33 #include <fstream>
  34 +#ifdef TIMING
  35 + #include <ctime>
  36 + #include <cstdio>
  37 +#endif
  38 +
34 #ifdef TESTING 39 #ifdef TESTING
35 #include <iostream> 40 #include <iostream>
36 #include <cstdio> 41 #include <cstdio>
@@ -48,6 +53,16 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -48,6 +53,16 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
48 //doesn't even need the texture iD really. 53 //doesn't even need the texture iD really.
49 private: 54 private:
50 55
  56 + #ifdef TIMING
  57 + double branch_time = 0;
  58 + double direction_time = 0;
  59 + double position_time = 0;
  60 + double size_time = 0;
  61 + double cost_time = 0;
  62 + double network_time = 0;
  63 + double hit_time = 0;
  64 + #endif
  65 +
51 // 66 //
52 stim::vec3<float> p; //vector designating the position of the spider. 67 stim::vec3<float> p; //vector designating the position of the spider.
53 stim::vec3<float> d; //vector designating the orientation of the spider 68 stim::vec3<float> d; //vector designating the orientation of the spider
@@ -118,11 +133,19 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -118,11 +133,19 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
118 void 133 void
119 findOptimalDirection() 134 findOptimalDirection()
120 { 135 {
  136 + #ifdef TIMING
  137 + gpuStartTimer();
  138 + #endif
121 setMatrix(); //create the transformation matrix. 139 setMatrix(); //create the transformation matrix.
122 glCallList(dList); //move the templates to p, d, m. 140 glCallList(dList); //move the templates to p, d, m.
  141 + glFlush();
  142 + #ifdef TIMING
  143 + direction_time += gpuStopTimer();
  144 + #endif
123 #ifdef TESTING 145 #ifdef TESTING
124 - test(texbufferID, GL_TEXTURE_2D,2*t_length,numSamples*t_length, "Final_Cost_Direction.bmp"); 146 +// test(texbufferID, GL_TEXTURE_2D,2*t_length,numSamples*t_length, "Final_Cost_Direction.bmp");
125 #endif 147 #endif
  148 +
126 int best = getCost(texbufferID,numSamples); //find min cost. 149 int best = getCost(texbufferID,numSamples); //find min cost.
127 stim::vec<float> next( //find next vector. 150 stim::vec<float> next( //find next vector.
128 dV[best][0]*S[0]*R[0], 151 dV[best][0]*S[0]*R[0],
@@ -143,10 +166,18 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -143,10 +166,18 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
143 void 166 void
144 findOptimalPosition() 167 findOptimalPosition()
145 { 168 {
  169 + #ifdef TIMING
  170 + gpuStartTimer();
  171 + #endif
146 setMatrix(); //create the transformation matrix. 172 setMatrix(); //create the transformation matrix.
147 glCallList(dList+1); //move the templates to p, d, m. 173 glCallList(dList+1); //move the templates to p, d, m.
  174 + glFlush();
  175 + #ifdef TIMING
  176 + position_time += gpuStopTimer();
  177 + #endif
  178 +
148 #ifdef TESTING 179 #ifdef TESTING
149 - test(ptexbufferID, GL_TEXTURE_2D,2*t_length, numSamplesPos*t_length, "Final_Cost_Position.bmp"); 180 +// test(ptexbufferID, GL_TEXTURE_2D,2*t_length, numSamplesPos*t_length, "Final_Cost_Position.bmp");
150 #endif 181 #endif
151 int best = getCost(ptexbufferID, numSamplesPos); //find min cost. 182 int best = getCost(ptexbufferID, numSamplesPos); //find min cost.
152 // std::cerr << best << std::endl; 183 // std::cerr << best << std::endl;
@@ -169,10 +200,17 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -169,10 +200,17 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
169 void 200 void
170 findOptimalScale() 201 findOptimalScale()
171 { 202 {
  203 + #ifdef TIMING
  204 + gpuStartTimer();
  205 + #endif
172 setMatrix(); //create the transformation. 206 setMatrix(); //create the transformation.
173 glCallList(dList+2); //move the templates to p, d, m. 207 glCallList(dList+2); //move the templates to p, d, m.
  208 + glFlush();
  209 + #ifdef TIMING
  210 + size_time += gpuStopTimer();
  211 + #endif
174 #ifdef TESTING 212 #ifdef TESTING
175 - test(mtexbufferID, GL_TEXTURE_2D, 2*t_length, numSamplesMag*t_length, "Final_Cost_Position.bmp"); 213 +// test(mtexbufferID, GL_TEXTURE_2D, 2*t_length, numSamplesMag*t_length, "Final_Cost_Position.bmp");
176 #endif 214 #endif
177 int best = getCost(mtexbufferID, numSamplesMag); //get best cost. 215 int best = getCost(mtexbufferID, numSamplesMag); //get best cost.
178 setMagnitude(m[0]*mV[best][0]); //adjust the magnitude. 216 setMagnitude(m[0]*mV[best][0]); //adjust the magnitude.
@@ -231,6 +269,10 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -231,6 +269,10 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
231 void 269 void
232 branchDetection2(int n = 8, int l_template = 8, int l_square = 8) 270 branchDetection2(int n = 8, int l_template = 8, int l_square = 8)
233 { 271 {
  272 + #ifdef TIMING
  273 + gpuStartTimer();
  274 + #endif
  275 +
234 if(cL.size() < 4){} 276 if(cL.size() < 4){}
235 else{ 277 else{
236 setMatrix(1); 278 setMatrix(1);
@@ -273,6 +315,9 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -273,6 +315,9 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
273 } 315 }
274 } 316 }
275 } 317 }
  318 + #ifdef TIMING
  319 + branch_time += gpuStopTimer();
  320 + #endif
276 } 321 }
277 322
278 323
@@ -305,58 +350,6 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -305,58 +350,6 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
305 //---------------------TEMPLATE CREATION METHODS----------------------------// 350 //---------------------TEMPLATE CREATION METHODS----------------------------//
306 //--------------------------------------------------------------------------// 351 //--------------------------------------------------------------------------//
307 352
308 - void  
309 - MonteCarloDirectionVectors(int nSamples, float solidAngle = 2*M_PI)  
310 - {  
311 -///equal area projection.  
312 -// std::vector<stim::vec<float> > vecsUni;  
313 -// for(int i = 0; i < nSamples; i++)  
314 -// {  
315 -// stim::vec<float> a = uniformRandVector();  
316 -// a[1] = a[1]*2*M_PI;  
317 -// a[0] = a[0]*(solidAngle);  
318 -// a = a.cyl2cart();  
319 -// stim::vec<float> b(  
320 -// sqrt(1.-(pow(a[0],2)+(pow(a[1],2)))/4)*a[0],  
321 -// sqrt(1.-(pow(a[0],2)+(pow(a[1],2)))/4)*a[1],  
322 -// 1.-(pow(a[0],2)+pow(a[1],2))/2);  
323 -// 2.*a[0]/(1.+pow(a[0],2)+pow(a[1],2)),  
324 -// 2.*a[1]/(1.+pow(a[0],2)+pow(a[1],2)),  
325 -// (-1.0+pow(a[0],2)+pow(a[1],2))/(1.0+pow(a[0],2)+pow(a[1],2)));  
326 -// b = b.norm();  
327 -// b[2] = -b[2]; //this doeswn't want to change  
328 -// vecsUni.push_back(b);  
329 -// }  
330 - float PHI[2], Z[2], range;  
331 - PHI[0] = asin(solidAngle/2);  
332 - PHI[1] = asin(0);  
333 -  
334 - Z[0] = cos(PHI[0]);  
335 - Z[1] = cos(PHI[1]);  
336 -  
337 -  
338 - range = Z[0] - Z[1];  
339 -  
340 -  
341 - float z, theta, phi;  
342 -  
343 - std::vector<stim::vec3<float> > vecsUni;  
344 - for(int i = 0; i < numSamplesPos; i++)  
345 - {  
346 - stim::vec3<float> a(uniformRandom()*0.8, uniformRandom()*0.8, 0.0);  
347 - a[0] = a[0]-0.4;  
348 - a[1] = a[1]-0.4;  
349 - vecsUni.push_back(a);  
350 - }  
351 -  
352 - stringstream name;  
353 - for(int i = 0; i < numSamplesPos; i++)  
354 - name << vecsUni[i].str() << std::endl;  
355 -  
356 - std::ofstream outFile;  
357 - outFile.open("New_Pos_Vectors.txt");  
358 - outFile << name.str().c_str();  
359 - }  
360 353
361 354
362 ///@param solidAngle, the size of the arc to sample. 355 ///@param solidAngle, the size of the arc to sample.
@@ -759,9 +752,6 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -759,9 +752,6 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
759 { 752 {
760 Bind(); 753 Bind();
761 CHECK_OPENGL_ERROR 754 CHECK_OPENGL_ERROR
762 - #ifdef TESTING  
763 - start = std::clock();  
764 - #endif  
765 findOptimalDirection(); 755 findOptimalDirection();
766 findOptimalPosition(); 756 findOptimalPosition();
767 findOptimalScale(); 757 findOptimalScale();
@@ -769,12 +759,6 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -769,12 +759,6 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
769 Bind(btexbufferID, bfboID, 27); 759 Bind(btexbufferID, bfboID, 27);
770 branchDetection(); 760 branchDetection();
771 Unbind(); 761 Unbind();
772 -  
773 - #ifdef TESTING  
774 - duration_sampling = duration_sampling +  
775 - (std::clock() - start) / (double) CLOCKS_PER_SEC;  
776 - num_sampling = num_sampling + 1.0;  
777 - #endif  
778 return current_cost; 762 return current_cost;
779 } 763 }
780 764
@@ -792,17 +776,9 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -792,17 +776,9 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
792 int 776 int
793 getCost() 777 getCost()
794 { 778 {
795 - #ifdef TESTING  
796 - start = std::clock();  
797 - #endif  
798 stim::vec<int> cost = 779 stim::vec<int> cost =
799 stim::cuda::get_cost(texbufferID, GL_TEXTURE_2D, numSamples); 780 stim::cuda::get_cost(texbufferID, GL_TEXTURE_2D, numSamples);
800 cudaDeviceSynchronize(); 781 cudaDeviceSynchronize();
801 - #ifdef TESTING  
802 - duration_cuda = duration_cuda +  
803 - (std::clock() - start) / (double) CLOCKS_PER_SEC;  
804 - num_cuda = num_cuda + 1.0;  
805 - #endif  
806 current_cost = cost[1]; 782 current_cost = cost[1];
807 return cost[0]; 783 return cost[0];
808 } 784 }
@@ -810,16 +786,13 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -810,16 +786,13 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
810 int 786 int
811 getCost(GLuint tID, int n) 787 getCost(GLuint tID, int n)
812 { 788 {
813 - #ifdef TESTING  
814 - start = std::clock(); 789 + #ifdef TIMING
  790 + gpuStartTimer();
815 #endif 791 #endif
816 stim::vec<int> cost = 792 stim::vec<int> cost =
817 stim::cuda::get_cost(tID, GL_TEXTURE_2D, n, 2*t_length, t_length); 793 stim::cuda::get_cost(tID, GL_TEXTURE_2D, n, 2*t_length, t_length);
818 - cudaDeviceSynchronize();  
819 - #ifdef TESTING  
820 - duration_cuda = duration_cuda +  
821 - (std::clock() - start) / (double) CLOCKS_PER_SEC;  
822 - num_cuda = num_cuda + 1.0; 794 + #ifdef TIMING
  795 + cost_time += gpuStopTimer();
823 #endif 796 #endif
824 current_cost = cost[1]; 797 current_cost = cost[1];
825 return cost[0]; 798 return cost[0];
@@ -839,13 +812,9 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -839,13 +812,9 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
839 //vectical rectangle forming the spider. 812 //vectical rectangle forming the spider.
840 stim::rect<float> ver; 813 stim::rect<float> ver;
841 814
842 - //Testing and Timing variables. 815 + //Timing variables.
843 #ifdef TESTING 816 #ifdef TESTING
844 std::clock_t start; 817 std::clock_t start;
845 - double duration_sampling = 0.0;  
846 - double duration_cuda = 0.0;  
847 - double num_sampling = 0.0;  
848 - double num_cuda = 0.0;  
849 #endif 818 #endif
850 819
851 //--------------------------------------------------------------------------// 820 //--------------------------------------------------------------------------//
@@ -939,10 +908,13 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -939,10 +908,13 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
939 texID = id; 908 texID = id;
940 //GenerateFBO(16, numSamples*8); 909 //GenerateFBO(16, numSamples*8);
941 GenerateFBO(t_length*2, numSamples*t_length, texbufferID, fboID); 910 GenerateFBO(t_length*2, numSamples*t_length, texbufferID, fboID);
  911 + std::cout << numSamples << std::endl;
942 CHECK_OPENGL_ERROR 912 CHECK_OPENGL_ERROR
943 GenerateFBO(t_length*2, numSamplesPos*t_length, ptexbufferID, pfboID); 913 GenerateFBO(t_length*2, numSamplesPos*t_length, ptexbufferID, pfboID);
  914 + std::cout << numSamplesPos << std::endl;
944 CHECK_OPENGL_ERROR 915 CHECK_OPENGL_ERROR
945 GenerateFBO(t_length*2, numSamplesMag*t_length, mtexbufferID, mfboID); 916 GenerateFBO(t_length*2, numSamplesMag*t_length, mtexbufferID, mfboID);
  917 + std::cout << numSamplesMag << std::endl;
946 CHECK_OPENGL_ERROR 918 CHECK_OPENGL_ERROR
947 GenerateFBO(16, 216, btexbufferID, bfboID); 919 GenerateFBO(16, 216, btexbufferID, bfboID);
948 CHECK_OPENGL_ERROR 920 CHECK_OPENGL_ERROR
@@ -1204,6 +1176,47 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -1204,6 +1176,47 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
1204 return seeds; 1176 return seeds;
1205 } 1177 }
1206 1178
  1179 + ///sets the number of direction templates.
  1180 + void
  1181 + setNumberDirectionTemplates(int n)
  1182 + {
  1183 + numSamples = n;
  1184 + }
  1185 +
  1186 + ///sets the number of position templates.
  1187 + void
  1188 + setNumberPositionTemplates(int n)
  1189 + {
  1190 + numSamplesPos = n;
  1191 + }
  1192 +
  1193 + ///sets the number of position templates.
  1194 + void
  1195 + setNumberSizeTemplates(int n)
  1196 + {
  1197 + numSamplesMag = n;
  1198 + }
  1199 +
  1200 + #ifdef TIMING
  1201 + ///Returns the timings at the moment the method is called.
  1202 + ///In the following order: Branch, Direction, Position, Size, Cost, Network, Hit_detetion.
  1203 + std::vector<double>
  1204 + getTimings()
  1205 + {
  1206 + std::vector <double> ret;
  1207 + ret.resize(7);
  1208 + ret[0] = branch_time;
  1209 + ret[1] = direction_time;
  1210 + ret[2] = position_time;
  1211 + ret[3] = size_time;
  1212 + ret[4] = cost_time;
  1213 + ret[5] = network_time;
  1214 + ret[6] = hit_time;
  1215 +
  1216 + return ret;
  1217 + }
  1218 + #endif
  1219 +
1207 ///returns true if all seed stacks are empty, else false. 1220 ///returns true if all seed stacks are empty, else false.
1208 bool 1221 bool
1209 Empty() 1222 Empty()
@@ -1302,9 +1315,6 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -1302,9 +1315,6 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
1302 { 1315 {
1303 Bind(texbufferID, fboID, numSamples, t_length); 1316 Bind(texbufferID, fboID, numSamples, t_length);
1304 CHECK_OPENGL_ERROR 1317 CHECK_OPENGL_ERROR
1305 - #ifdef TESTING  
1306 - start = std::clock();  
1307 - #endif  
1308 findOptimalDirection(); 1318 findOptimalDirection();
1309 Unbind(); 1319 Unbind();
1310 Bind(ptexbufferID, pfboID, numSamplesPos, t_length); 1320 Bind(ptexbufferID, pfboID, numSamplesPos, t_length);
@@ -1315,12 +1325,6 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -1315,12 +1325,6 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
1315 Unbind(); 1325 Unbind();
1316 CHECK_OPENGL_ERROR 1326 CHECK_OPENGL_ERROR
1317 1327
1318 - #ifdef TESTING  
1319 - duration_sampling = duration_sampling +  
1320 - (std::clock() - start) / (double) CLOCKS_PER_SEC;  
1321 - num_sampling = num_sampling + 1.0;  
1322 - #endif  
1323 - std::cout << current_cost << std::endl;  
1324 return current_cost; 1328 return current_cost;
1325 } 1329 }
1326 1330
@@ -1337,6 +1341,39 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -1337,6 +1341,39 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
1337 //--------------------------------------------------------------------------// 1341 //--------------------------------------------------------------------------//
1338 1342
1339 void 1343 void
  1344 + MonteCarloDirectionVectors(int nSamples, float solidAngle = 2*M_PI)
  1345 + {
  1346 + float PHI[2], Z[2], range;
  1347 + PHI[0] = asin(solidAngle/2);
  1348 + PHI[1] = asin(0);
  1349 +
  1350 + Z[0] = cos(PHI[0]);
  1351 + Z[1] = cos(PHI[1]);
  1352 +
  1353 +
  1354 + range = Z[0] - Z[1];
  1355 +
  1356 +
  1357 + float z, theta, phi;
  1358 +
  1359 + std::vector<stim::vec3<float> > vecsUni;
  1360 + for(int i = 0; i < numSamplesPos; i++)
  1361 + {
  1362 + stim::vec3<float> a(uniformRandom()*0.8, uniformRandom()*0.8, 0.0);
  1363 + a[0] = a[0]-0.4;
  1364 + a[1] = a[1]-0.4;
  1365 + vecsUni.push_back(a);
  1366 + }
  1367 +
  1368 + stringstream name;
  1369 + for(int i = 0; i < numSamplesPos; i++)
  1370 + name << vecsUni[i].str() << std::endl;
  1371 +
  1372 + std::ofstream outFile;
  1373 + outFile.open("New_Pos_Vectors.txt");
  1374 + outFile << name.str().c_str();
  1375 + }
  1376 + void
1340 DrawCylinder() 1377 DrawCylinder()
1341 { 1378 {
1342 glNewList(dList+3, GL_COMPILE); 1379 glNewList(dList+3, GL_COMPILE);
@@ -1442,6 +1479,10 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -1442,6 +1479,10 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
1442 selectObject(stim::vec3<float> loc, stim::vec3<float> dir, float mag) 1479 selectObject(stim::vec3<float> loc, stim::vec3<float> dir, float mag)
1443 { 1480 {
1444 //Define the varibles and turn on Selection Mode 1481 //Define the varibles and turn on Selection Mode
  1482 +
  1483 + #ifdef TIMING
  1484 + gpuStartTimer();
  1485 + #endif
1445 1486
1446 float s = 3.0; 1487 float s = 3.0;
1447 GLuint selectBuf[2048]; 1488 GLuint selectBuf[2048];
@@ -1501,6 +1542,10 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -1501,6 +1542,10 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
1501 // glEnable(GL_CULL_FACE); 1542 // glEnable(GL_CULL_FACE);
1502 hits = glRenderMode(GL_RENDER); 1543 hits = glRenderMode(GL_RENDER);
1503 int found_hits = processHits(hits, selectBuf); 1544 int found_hits = processHits(hits, selectBuf);
  1545 + #ifdef TIMING
  1546 + hit_time += gpuStopTimer();
  1547 + #endif
  1548 +
1504 return found_hits; 1549 return found_hits;
1505 } 1550 }
1506 1551
@@ -1548,6 +1593,10 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -1548,6 +1593,10 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
1548 addToNetwork(pair<stim::fiber<float>, int> in, stim::vec3<float> spos, 1593 addToNetwork(pair<stim::fiber<float>, int> in, stim::vec3<float> spos,
1549 stim::vec<float> smag, stim::vec3<float> sdir) 1594 stim::vec<float> smag, stim::vec3<float> sdir)
1550 { 1595 {
  1596 + #ifdef TIMING
  1597 + double s = std::clock();
  1598 + #endif
  1599 +
1551 std::vector<stim::vec3<float> > ce = in.first.centerline(); 1600 std::vector<stim::vec3<float> > ce = in.first.centerline();
1552 std::vector<stim::vec<float> > cm = in.first.centerlinemag(); 1601 std::vector<stim::vec<float> > cm = in.first.centerlinemag();
1553 //if the fiber is longer than 2 steps (the number it takes to diverge) 1602 //if the fiber is longer than 2 steps (the number it takes to diverge)
@@ -1581,6 +1630,11 @@ class gl_spider : public virtual gl_texture&lt;T&gt; @@ -1581,6 +1630,11 @@ class gl_spider : public virtual gl_texture&lt;T&gt;
1581 } else { nt.addEdge(ce,cm, -1, -1);} 1630 } else { nt.addEdge(ce,cm, -1, -1);}
1582 } 1631 }
1583 } 1632 }
  1633 +
  1634 + #ifdef TIMING
  1635 + double network_time = (std::clock() - s) / (double) CLOCKS_PER_SEC;
  1636 + network_time += network_time * 1000.0;
  1637 + #endif
1584 } 1638 }
1585 1639
1586 1640
stim/image/image.h
@@ -193,6 +193,7 @@ public: @@ -193,6 +193,7 @@ public:
193 get_interleaved_bgr(buffer); 193 get_interleaved_bgr(buffer);
194 cv::Mat cvImage((int)Y(), (int)X(), cv_type(), buffer); 194 cv::Mat cvImage((int)Y(), (int)X(), cv_type(), buffer);
195 cv::imwrite(filename, cvImage); 195 cv::imwrite(filename, cvImage);
  196 + free(buffer);
196 } 197 }
197 198
198 void set_interleaved(T* buffer, size_t width, size_t height, size_t channels){ 199 void set_interleaved(T* buffer, size_t width, size_t height, size_t channels){