Skip to content

Commit 0b9c4b6

Browse files
Eric Ehlersjenkins
authored andcommitted
QPR-12389 Additional Unit Test For GPGPU Framework
1 parent 656e06c commit 0b9c4b6

1 file changed

Lines changed: 133 additions & 131 deletions

File tree

QuantExt/test/computeenvironment.cpp

Lines changed: 133 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -256,20 +256,18 @@ BOOST_AUTO_TEST_CASE(testReplayFlowError) {
256256
namespace {
257257
double externalAverage(const std::vector<double>& v) {
258258
boost::accumulators::accumulator_set<double, boost::accumulators::stats<boost::accumulators::tag::mean>> acc;
259-
for (auto const& x : v) {
259+
for (auto const& x : v)
260260
acc(x);
261-
}
262261
return boost::accumulators::mean(acc);
263262
}
264263
struct S0 {
265264
std::size_t randomVariableOpCode;
266265
std::vector<std::size_t> args;
267266
std::vector<bool> vb;
268267
};
269-
void runBacktest(const std::string &d, const std::size_t id, const std::vector<S0>& s0, double expected) {
270-
BOOST_TEST_MESSAGE("testing backtest iteration on device '" << d << "'.");
268+
void runBacktest(const std::string &d, const std::size_t id, const std::vector<S0>& v0, double expected) {
271269

272-
ComputeEnvironmentFixture fixture;
270+
BOOST_TEST_MESSAGE("testing backtest iteration on device '" << d << "'.");
273271
ComputeEnvironment::instance().selectContext(d);
274272

275273
const std::size_t n = 10000;
@@ -280,7 +278,7 @@ void runBacktest(const std::string &d, const std::size_t id, const std::vector<S
280278
ComputeEnvironment::instance().context().initiateCalculation(n, externalCalculationId_, cgVersion_);
281279
constexpr double max = std::numeric_limits<float>::max();
282280

283-
std::vector<double> v0 = {
281+
std::vector<double> v1 = {
284282
-56340, -39240, -37560, -37380, -35460, -30960, -26220, -26160, -24920, -24060, -22820,
285283
-22680, -20640, -18780, -18540, -17480, -16680, -15960, -15380, -15120, -14100, -13380,
286284
-13140, -13080, -13020, -12460, -11120, -10640, -10320, -9480, -9400, -9020, -8920,
@@ -292,13 +290,13 @@ void runBacktest(const std::string &d, const std::size_t id, const std::vector<S
292290
1500, 2100, 3000, 30000, 187460, 200000, 400000, max, 0.0242777, 0.000589407, 0.99513,
293291
0.998575, -0.172332, 0.998575};
294292

295-
for (const auto& x : v0)
293+
for (const auto& x : v1)
296294
ComputeEnvironment::instance().context().createInputVariable(x);
297295

298296
std::vector<std::vector<std::size_t>> rv = {{11}};
299297
auto gen = ComputeEnvironment::instance().context().createInputVariates(rv.size(), rv.front().size(), 42);
300298

301-
for (const auto& s : s0) {
299+
for (const auto& s : v0) {
302300
ComputeEnvironment::instance().context().applyOperation(s.randomVariableOpCode, s.args);
303301
int i = 0;
304302
for (const auto& b : s.vb) {
@@ -320,129 +318,133 @@ void runBacktest(const std::string &d, const std::size_t id, const std::vector<S
320318

321319
BOOST_AUTO_TEST_CASE(testBacktest) {
322320

323-
// Replicate one iteration of the static backtest, execute it on the GPU
324-
std::string d0 = "BasicCpu/Default/Default";
325-
const std::size_t id0 = 78;
326-
std::vector<S0> s0 = {
327-
{5, {99, 98}, {false, false}},
328-
{4, {65, 97}, {true, false}},
329-
{15, {103}, {true}},
330-
{3, {65}, {true}},
331-
{2, {103, 104}, {true, true}},
332-
{13, {100}, {false}},
333-
{4, {96, 102}, {false, true}},
334-
{1, {100, 103}, {false, true}},
335-
{1, {105, 65}, {true, true}},
336-
{13, {103}, {true}},
337-
{8, {65, 62}, {false, false}},
338-
{8, {65, 78}, {false, false}},
339-
{2, {81, 105}, {false, true}},
340-
{4, {103, 106}, {true, true}},
341-
{2, {65, 78}, {false, false}},
342-
{4, {94, 106}, {true, true}},
343-
{4, {105, 103}, {false, true}},
344-
{2, {81, 105}, {false, true}},
345-
{8, {65, 78}, {false, false}},
346-
{8, {65, 95}, {false, true}},
347-
{2, {81, 94}, {false, true}},
348-
{4, {105, 95}, {true, true}},
349-
{2, {65, 78}, {true, true}},
350-
{4, {93, 95}, {true, true}},
351-
{1, {106, 78}, {false, true}},
352-
{4, {94, 95}, {false, true}},
353-
{2, {81, 94}, {false, true}},
354-
{4, {95, 106}, {true, true}},
355-
{1, {78, 94}, {true, true}},
356-
{9, {106, 62}, {false, true}},
357-
{1, {89, 106}, {false, false}},
358-
{4, {94, 62}, {false, true}},
359-
{2, {81, 94}, {false, false}},
360-
{4, {62, 89}, {true, true}},
361-
{1, {78, 95}, {true, true}},
362-
{4, {94, 83}, {false, true}},
363-
{2, {81, 94}, {false, true}},
364-
{4, {83, 82}, {true, true}},
365-
{1, {95, 94}, {true, true}},
366-
{9, {89, 91}, {true, true}},
367-
{2, {81, 94}, {false, false}},
368-
{2, {81, 94}, {false, false}},
369-
{5, {81, 101}, {false, false}},
370-
{5, {81, 95}, {false, true}},
371-
{4, {106, 83}, {false, false}},
372-
{4, {94, 95}, {false, true}},
373-
{2, {81, 94}, {false, false}},
374-
{2, {81, 94}, {false, true}},
375-
{4, {106, 83}, {true, true}},
376-
{1, {78, 94}, {false, true}},
377-
{4, {62, 83}, {false, true}},
378-
{2, {81, 62}, {true, true}},
379-
{4, {83, 78}, {true, true}},
380-
{1, {94, 62}, {true, true}},
381-
};
382-
runBacktest(d0, id0, s0, -39400);
383-
384-
// Uncomment the code below to replicate one iteration of the backtest on the GPUs
385-
//std::string d1 = "OpenCL/Intel(R) OpenCL Graphics/Intel(R) Iris(R) Xe Graphics";
386-
//std::string d2 = "OpenCL/NVIDIA CUDA/NVIDIA GeForce RTX 3050 Ti Laptop GPU";
387-
//const std::size_t id1 = 111;
388-
//std::vector<S0> s1 = {
389-
// {5, {99, 98}, {false, false}},
390-
// {4, {65, 97}, {true, false}},
391-
// {15, {103}, {true}},
392-
// {3, {105}, {true}},
393-
// {2, {103, 104}, {true, true}},
394-
// {13, {100}, {false}},
395-
// {4, {96, 102}, {false, true}},
396-
// {1, {100, 103}, {false, true}},
397-
// {1, {102, 105}, {true, true}},
398-
// {13, {103}, {true}},
399-
// {8, {105, 62}, {false, false}},
400-
// {8, {105, 78}, {false, false}},
401-
// {2, {81, 102}, {false, true}},
402-
// {4, {103, 106}, {true, true}},
403-
// {2, {105, 78}, {false, false}},
404-
// {4, {94, 106}, {true, true}},
405-
// {4, {102, 103}, {false, true}},
406-
// {2, {81, 102}, {false, true}},
407-
// {8, {105, 78}, {false, false}},
408-
// {8, {105, 95}, {false, true}},
409-
// {2, {81, 107}, {false, true}},
410-
// {4, {102, 108}, {true, true}},
411-
// {2, {105, 78}, {true, true}},
412-
// {4, {93, 108}, {true, true}},
413-
// {1, {106, 105}, {false, true}},
414-
// {4, {107, 108}, {false, true}},
415-
// {2, {81, 107}, {false, true}},
416-
// {4, {108, 106}, {true, true}},
417-
// {1, {105, 107}, {true, true}},
418-
// {9, {106, 62}, {false, true}},
419-
// {1, {89, 106}, {false, false}},
420-
// {4, {107, 105}, {false, true}},
421-
// {2, {81, 107}, {false, false}},
422-
// {4, {105, 89}, {true, true}},
423-
// {1, {108, 102}, {true, true}},
424-
// {4, {107, 83}, {false, true}},
425-
// {2, {81, 107}, {false, true}},
426-
// {4, {108, 82}, {true, true}},
427-
// {1, {102, 107}, {true, true}},
428-
// {9, {105, 91}, {true, true}},
429-
// {2, {81, 107}, {false, false}},
430-
// {2, {81, 107}, {false, false}},
431-
// {5, {81, 101}, {false, false}},
432-
// {5, {81, 109}, {false, true}},
433-
// {4, {106, 110}, {false, false}},
434-
// {4, {107, 109}, {false, true}},
435-
// {2, {81, 107}, {false, false}},
436-
// {2, {81, 107}, {false, true}},
437-
// {4, {106, 110}, {true, true}},
438-
// {1, {111, 107}, {false, true}},
439-
// {4, {112, 110}, {false, true}},
440-
// {2, {81, 112}, {true, true}},
441-
// {4, {110, 111}, {true, true}},
442-
// {1, {107, 112}, {true, true}},
443-
//};
444-
//runBacktest(d1, id1, s1, -39438);
445-
//runBacktest(d2, id1, s1, -39438);
321+
ComputeEnvironmentFixture fixture;
322+
std::size_t id;
323+
double expected;
324+
std::vector<S0> v;
325+
for (auto const& d : ComputeEnvironment::instance().getAvailableDevices()) {
326+
327+
if (d == "BasicCpu/Default/Default") {
328+
id = 78;
329+
expected = -39400;
330+
v = {
331+
{5, {99, 98}, {false, false}},
332+
{4, {65, 97}, {true, false}},
333+
{15, {103}, {true}},
334+
{3, {65}, {true}},
335+
{2, {103, 104}, {true, true}},
336+
{13, {100}, {false}},
337+
{4, {96, 102}, {false, true}},
338+
{1, {100, 103}, {false, true}},
339+
{1, {105, 65}, {true, true}},
340+
{13, {103}, {true}},
341+
{8, {65, 62}, {false, false}},
342+
{8, {65, 78}, {false, false}},
343+
{2, {81, 105}, {false, true}},
344+
{4, {103, 106}, {true, true}},
345+
{2, {65, 78}, {false, false}},
346+
{4, {94, 106}, {true, true}},
347+
{4, {105, 103}, {false, true}},
348+
{2, {81, 105}, {false, true}},
349+
{8, {65, 78}, {false, false}},
350+
{8, {65, 95}, {false, true}},
351+
{2, {81, 94}, {false, true}},
352+
{4, {105, 95}, {true, true}},
353+
{2, {65, 78}, {true, true}},
354+
{4, {93, 95}, {true, true}},
355+
{1, {106, 78}, {false, true}},
356+
{4, {94, 95}, {false, true}},
357+
{2, {81, 94}, {false, true}},
358+
{4, {95, 106}, {true, true}},
359+
{1, {78, 94}, {true, true}},
360+
{9, {106, 62}, {false, true}},
361+
{1, {89, 106}, {false, false}},
362+
{4, {94, 62}, {false, true}},
363+
{2, {81, 94}, {false, false}},
364+
{4, {62, 89}, {true, true}},
365+
{1, {78, 95}, {true, true}},
366+
{4, {94, 83}, {false, true}},
367+
{2, {81, 94}, {false, true}},
368+
{4, {83, 82}, {true, true}},
369+
{1, {95, 94}, {true, true}},
370+
{9, {89, 91}, {true, true}},
371+
{2, {81, 94}, {false, false}},
372+
{2, {81, 94}, {false, false}},
373+
{5, {81, 101}, {false, false}},
374+
{5, {81, 95}, {false, true}},
375+
{4, {106, 83}, {false, false}},
376+
{4, {94, 95}, {false, true}},
377+
{2, {81, 94}, {false, false}},
378+
{2, {81, 94}, {false, true}},
379+
{4, {106, 83}, {true, true}},
380+
{1, {78, 94}, {false, true}},
381+
{4, {62, 83}, {false, true}},
382+
{2, {81, 62}, {true, true}},
383+
{4, {83, 78}, {true, true}},
384+
{1, {94, 62}, {true, true}},
385+
};
386+
} else {
387+
id = 111;
388+
expected = -39438;
389+
v = {
390+
{5, {99, 98}, {false, false}},
391+
{4, {65, 97}, {true, false}},
392+
{15, {103}, {true}},
393+
{3, {105}, {true}},
394+
{2, {103, 104}, {true, true}},
395+
{13, {100}, {false}},
396+
{4, {96, 102}, {false, true}},
397+
{1, {100, 103}, {false, true}},
398+
{1, {102, 105}, {true, true}},
399+
{13, {103}, {true}},
400+
{8, {105, 62}, {false, false}},
401+
{8, {105, 78}, {false, false}},
402+
{2, {81, 102}, {false, true}},
403+
{4, {103, 106}, {true, true}},
404+
{2, {105, 78}, {false, false}},
405+
{4, {94, 106}, {true, true}},
406+
{4, {102, 103}, {false, true}},
407+
{2, {81, 102}, {false, true}},
408+
{8, {105, 78}, {false, false}},
409+
{8, {105, 95}, {false, true}},
410+
{2, {81, 107}, {false, true}},
411+
{4, {102, 108}, {true, true}},
412+
{2, {105, 78}, {true, true}},
413+
{4, {93, 108}, {true, true}},
414+
{1, {106, 105}, {false, true}},
415+
{4, {107, 108}, {false, true}},
416+
{2, {81, 107}, {false, true}},
417+
{4, {108, 106}, {true, true}},
418+
{1, {105, 107}, {true, true}},
419+
{9, {106, 62}, {false, true}},
420+
{1, {89, 106}, {false, false}},
421+
{4, {107, 105}, {false, true}},
422+
{2, {81, 107}, {false, false}},
423+
{4, {105, 89}, {true, true}},
424+
{1, {108, 102}, {true, true}},
425+
{4, {107, 83}, {false, true}},
426+
{2, {81, 107}, {false, true}},
427+
{4, {108, 82}, {true, true}},
428+
{1, {102, 107}, {true, true}},
429+
{9, {105, 91}, {true, true}},
430+
{2, {81, 107}, {false, false}},
431+
{2, {81, 107}, {false, false}},
432+
{5, {81, 101}, {false, false}},
433+
{5, {81, 109}, {false, true}},
434+
{4, {106, 110}, {false, false}},
435+
{4, {107, 109}, {false, true}},
436+
{2, {81, 107}, {false, false}},
437+
{2, {81, 107}, {false, true}},
438+
{4, {106, 110}, {true, true}},
439+
{1, {111, 107}, {false, true}},
440+
{4, {112, 110}, {false, true}},
441+
{2, {81, 112}, {true, true}},
442+
{4, {110, 111}, {true, true}},
443+
{1, {107, 112}, {true, true}},
444+
};
445+
}
446+
runBacktest(d, id, v, expected);
447+
}
446448
}
447449

448450
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)