Commit d11e2fb6499ce3d67d387d49fc0d664f144e2c72

Authored by David Mayerich
1 parent cf5b4c92

fixed async bugs in GCC

Showing 1 changed file with 6 additions and 6 deletions   Show diff stats
stim/envi/bsq.h
... ... @@ -10,7 +10,7 @@
10 10 #include <deque>
11 11 #include <chrono>
12 12 #include <future>
13   -
  13 +#include <algorithm>
14 14  
15 15  
16 16 namespace stim{
... ... @@ -403,7 +403,7 @@ public:
403 403 dst[1] = (T*) malloc(max_batch_bytes);
404 404  
405 405 size_t N[2]; //number of slices stored in buffers 0 and 1
406   - N[0] = N[1] = min(Y(), max_slices_per_batch); //start with the maximum number of slices that can be stored (may be the entire data set)
  406 + N[0] = N[1] = std::min<size_t>(Y(), max_slices_per_batch); //start with the maximum number of slices that can be stored (may be the entire data set)
407 407  
408 408 std::ofstream target(outname.c_str(), std::ios::binary); //open an output file for writing
409 409 //initialize with buffer 0 (used for double buffering)
... ... @@ -425,7 +425,7 @@ public:
425 425 if(y_load < Y()){ //if there are still slices to be loaded, load them
426 426 if(y_load + N[b] > Y()) N[b] = Y() - y_load; //if the next batch would process more than the total slices, adjust the batch size
427 427 rthread = std::async(std::launch::async, &stim::bsq<T>::readlines, this, src[b], y_load, N[b]);
428   -
  428 + //rthread.wait();
429 429 y_load += N[b]; //increment the number of loaded slices
430 430 }
431 431  
... ... @@ -438,7 +438,7 @@ public:
438 438 t_end = std::chrono::high_resolution_clock::now();
439 439 t_batch = std::chrono::duration_cast<std::chrono::milliseconds>(t_end-t_start).count();
440 440 t_total += t_batch;
441   - rthread.wait();
  441 + if(y_load < Y()) rthread.wait(); //if a new batch was set to load, make sure it loads after calculations
442 442 }
443 443  
444 444 std::cout<<"Total time to execute: "<<t_total<<" ms"<<std::endl;
... ... @@ -471,7 +471,7 @@ public:
471 471 dst[1] = (T*) malloc(max_batch_bytes);
472 472  
473 473 size_t N[2]; //number of slices stored in buffers 0 and 1
474   - N[0] = N[1] = min(Y(), max_slices_per_batch); //start with the maximum number of slices that can be stored (may be the entire data set)
  474 + N[0] = N[1] = std::min<size_t>(Y(), max_slices_per_batch); //start with the maximum number of slices that can be stored (may be the entire data set)
475 475  
476 476 std::ofstream target(outname.c_str(), std::ios::binary); //open an output file for writing
477 477 //initialize with buffer 0 (used for double buffering)
... ... @@ -506,7 +506,7 @@ public:
506 506 t_end = std::chrono::high_resolution_clock::now();
507 507 t_batch = std::chrono::duration_cast<std::chrono::milliseconds>(t_end-t_start).count();
508 508 t_total += t_batch;
509   - rthread.wait();
  509 + if(y_load < Y()) rthread.wait(); //if a batch was threaded to load, make sure it finishes
510 510 }
511 511  
512 512 std::cout<<"Total time to execute: "<<t_total<<" ms"<<std::endl;
... ...