Xmipp  v3.23.11-Nereus
advisor.cpp
Go to the documentation of this file.
1 #include "advisor.h"
2 
3 namespace cuFFTAdvisor {
4 
5 std::vector<BenchmarkResult const *> *Advisor::benchmark(
6  int device, int x, int y, int z, int n, Tristate::Tristate isBatched,
7  Tristate::Tristate isFloat, Tristate::Tristate isForward,
8  Tristate::Tristate isInPlace, Tristate::Tristate isReal) {
9  Validator::validate(x, y, z, n, device);
10  std::vector<Transform const *> transforms;
11  TransformGenerator generator;
12  generator.generate(device, x, y, z, n, isBatched, isFloat, isForward,
13  isInPlace, isReal, transforms);
14  std::vector<BenchmarkResult const *> *result = benchmark(transforms);
15  return result;
16 }
17 
18 int Advisor::getMaxMemory(int device, int size) {
19  if (size == INT_MAX) {
20  return std::ceil(toMB(getTotalMemory(device)));
21  }
22  return size;
23 }
24 
25 std::vector<Transform const *> *Advisor::recommend(
26  int howMany, int device, int x, int y, int z, int n,
27  Tristate::Tristate isBatched, Tristate::Tristate isFloat,
28  Tristate::Tristate isForward, Tristate::Tristate isInPlace,
29  Tristate::Tristate isReal, int maxSignalInc, int maxMemory,
30  bool allowTransposition, bool squareOnly, bool crop) {
31  Validator::validate(device);
32  maxMemory = getMaxMemory(device, maxMemory);
33  Validator::validate(x, y, z, n, device, maxSignalInc, maxMemory, allowTransposition, squareOnly);
34  GeneralTransform tr = GeneralTransform(device, x, y, z, n, isBatched, isFloat,
35  isForward, isInPlace, isReal);
36 
37  SizeOptimizer optimizer(CudaVersion::V_8, tr, allowTransposition);
38  std::vector<const Transform *> *result =
39  optimizer.optimize(howMany, maxSignalInc, maxMemory, squareOnly, crop);
40  return result;
41 }
42 
43 std::vector<BenchmarkResult const *> *Advisor::find(
44  int howMany, int device, int x, int y, int z, int n,
45  Tristate::Tristate isBatched, Tristate::Tristate isFloat,
46  Tristate::Tristate isForward, Tristate::Tristate isInPlace,
47  Tristate::Tristate isReal, int maxSignalInc, int maxMemory,
48  bool allowTransposition, bool squareOnly, bool crop) {
49  std::vector<Transform const *> *candidates =
50  recommend(howMany, device, x, y, z, n, isBatched, isFloat, isForward,
51  isInPlace, isReal, maxSignalInc, maxMemory, allowTransposition,
52  squareOnly, crop);
53  std::vector<BenchmarkResult const *> *result = benchmark(*candidates);
54  std::sort(result->begin(), result->end(), BenchmarkResult::execSort);
55  delete candidates;
56  return result;
57 }
58 
59 std::vector<BenchmarkResult const *> *Advisor::benchmark(
60  std::vector<Transform const *> &transforms) {
61  std::vector<BenchmarkResult const *> *results =
62  new std::vector<BenchmarkResult const *>();
63  int size = transforms.size();
64  for (int i = 0; i < size; i++) {
65  results->push_back(Benchmarker::benchmark(transforms.at(i)));
66  }
67  return results;
68 }
69 
70 } // namespace cuFFTAdvisor
static BenchmarkResult const * benchmark(Transform const *tr)
static std::vector< BenchmarkResult const * > * find(int howMany, int device, int x, int y=1, int z=1, int n=1, Tristate::Tristate isBatched=Tristate::TRUE, Tristate::Tristate isFloat=Tristate::TRUE, Tristate::Tristate isForward=Tristate::TRUE, Tristate::Tristate isInPlace=Tristate::TRUE, Tristate::Tristate isReal=Tristate::TRUE, int maxSignalInc=INT_MAX, int maxMemory=INT_MAX, bool allowTransposition=false, bool squareOnly=false, bool crop=false)
Definition: advisor.cpp:43
std::vector< const Transform * > * optimize(size_t nBest, int maxPercIncrease, int maxMemMB, bool squareOnly, bool crop)
static double * y
static void validate(int x, int y, int z, int n, int device)
Definition: validator.cpp:43
static std::vector< BenchmarkResult const * > * benchmark(int device, int x, int y=1, int z=1, int n=1, Tristate::Tristate isBatched=Tristate::TRUE, Tristate::Tristate isFloat=Tristate::TRUE, Tristate::Tristate isForward=Tristate::TRUE, Tristate::Tristate isInPlace=Tristate::TRUE, Tristate::Tristate isReal=Tristate::TRUE)
Definition: advisor.cpp:5
doublereal * x
#define i
static void generate(int device, int x, int y, int z, int n, Tristate::Tristate isBatched, Tristate::Tristate isFloat, Tristate::Tristate isForward, Tristate::Tristate isInPlace, Tristate::Tristate isReal, std::vector< Transform const *> &result)
double z
void sort(struct DCEL_T *dcel)
Definition: sorting.cpp:18
static std::vector< Transform const * > * recommend(int howMany, int device, int x, int y=1, int z=1, int n=1, Tristate::Tristate isBatched=Tristate::TRUE, Tristate::Tristate isFloat=Tristate::TRUE, Tristate::Tristate isForward=Tristate::TRUE, Tristate::Tristate isInPlace=Tristate::TRUE, Tristate::Tristate isReal=Tristate::TRUE, int maxSignalInc=INT_MAX, int maxMemory=INT_MAX, bool allowTransposition=false, bool squareOnly=false, bool crop=false)
Definition: advisor.cpp:25
static bool execSort(const BenchmarkResult *l, const BenchmarkResult *r)
int * n