mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-23 21:07:17 +00:00
rogueviz:: parallelize moved from flocking to rogueviz.h
This commit is contained in:
parent
b6d665ff0e
commit
7411f21b59
@ -16,30 +16,6 @@
|
|||||||
|
|
||||||
// press 'o' when flocking active to change the parameters.
|
// press 'o' when flocking active to change the parameters.
|
||||||
|
|
||||||
#ifdef USE_THREADS
|
|
||||||
#include <thread>
|
|
||||||
int threads = 1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template<class T> auto parallelize(long long N, T action) -> decltype(action(0,0)) {
|
|
||||||
#ifndef USE_THREADS
|
|
||||||
return action(0,N);
|
|
||||||
#else
|
|
||||||
if(threads == 1) return action(0,N);
|
|
||||||
std::vector<std::thread> v;
|
|
||||||
typedef decltype(action(0,0)) Res;
|
|
||||||
std::vector<Res> results(threads);
|
|
||||||
for(int k=0; k<threads; k++)
|
|
||||||
v.emplace_back([&,k] () {
|
|
||||||
results[k] = action(N*k/threads, N*(k+1)/threads);
|
|
||||||
});
|
|
||||||
for(std::thread& t:v) t.join();
|
|
||||||
Res res = 0;
|
|
||||||
for(Res r: results) res += r;
|
|
||||||
return res;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "rogueviz.h"
|
#include "rogueviz.h"
|
||||||
|
|
||||||
namespace rogueviz {
|
namespace rogueviz {
|
||||||
@ -372,11 +348,9 @@ namespace flocking {
|
|||||||
shift(); ini_speed = argf();
|
shift(); ini_speed = argf();
|
||||||
shift(); max_speed = argf();
|
shift(); max_speed = argf();
|
||||||
}
|
}
|
||||||
#ifdef USE_THREADS
|
|
||||||
else if(argis("-threads")) {
|
else if(argis("-threads")) {
|
||||||
shift(); threads = argi();
|
shift(); threads = argi();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
else return 1;
|
else return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -342,6 +342,25 @@ namespace objmodels {
|
|||||||
#define addHook_slideshows(x, y) 0
|
#define addHook_slideshows(x, y) 0
|
||||||
#define addHook_rvtour(x, y) 0
|
#define addHook_rvtour(x, y) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* parallelize a computation */
|
||||||
|
inline int threads = 1;
|
||||||
|
|
||||||
|
template<class T> auto parallelize(long long N, T action) -> decltype(action(0,0)) {
|
||||||
|
if(threads == 1) return action(0,N);
|
||||||
|
std::vector<std::thread> v;
|
||||||
|
typedef decltype(action(0,0)) Res;
|
||||||
|
std::vector<Res> results(threads);
|
||||||
|
for(int k=0; k<threads; k++)
|
||||||
|
v.emplace_back([&,k] () {
|
||||||
|
results[k] = action(N*k/threads, N*(k+1)/threads);
|
||||||
|
});
|
||||||
|
for(std::thread& t:v) t.join();
|
||||||
|
Res res = 0;
|
||||||
|
for(Res r: results) res += r;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user