@@ -256,20 +256,18 @@ BOOST_AUTO_TEST_CASE(testReplayFlowError) {
256256namespace {
257257double 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}
264263struct 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
321319BOOST_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
448450BOOST_AUTO_TEST_SUITE_END ()
0 commit comments