param.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <util/datetime/cputimer.h>
  2. #include <yql/essentials/minikql/computation/mkql_computation_node.h>
  3. #include <yql/essentials/minikql/comp_nodes/mkql_factories.h>
  4. #include <yql/essentials/minikql/invoke_builtins/mkql_builtins.h>
  5. #include <yql/essentials/minikql/mkql_program_builder.h>
  6. #include <yql/essentials/minikql/mkql_function_registry.h>
  7. #include <util/datetime/cputimer.h>
  8. using namespace NKikimr;
  9. using namespace NKikimr::NMiniKQL;
  10. using namespace NKikimr::NUdf;
  11. int main(int, char**) {
  12. auto functionRegistry = CreateFunctionRegistry(CreateBuiltinRegistry());
  13. auto randomProvider = CreateDefaultRandomProvider();
  14. auto timeProvider = CreateDefaultTimeProvider();
  15. for (ui32 pass = 0; pass < 2; ++pass) {
  16. TString name = pass ? "param" : "const";
  17. TScopedAlloc alloc(__LOCATION__);
  18. TTypeEnvironment env(alloc);
  19. TProgramBuilder pgmBuilder(env, *functionRegistry);
  20. auto argType = pgmBuilder.NewDataType(EDataSlot::Uint32);
  21. auto arg = pgmBuilder.Arg(argType);
  22. auto pgm = pass ? arg : pgmBuilder.NewDataLiteral<ui32>(1);
  23. TExploringNodeVisitor explorer;
  24. explorer.Walk(pgm.GetNode(), env);
  25. TComputationPatternOpts opts(alloc.Ref(), env, GetBuiltinFactory(),
  26. functionRegistry.Get(), NUdf::EValidateMode::None, NUdf::EValidatePolicy::Exception, "OFF", EGraphPerProcess::Multi);
  27. auto pattern = MakeComputationPattern(explorer, pgm, { arg.GetNode(), pgm.GetNode() }, opts);
  28. auto graph = pattern->Clone(opts.ToComputationOptions(*randomProvider, *timeProvider));
  29. TBindTerminator terminator(graph->GetTerminator());
  30. auto param = graph->GetEntryPoint(0, false);
  31. auto& ctx = graph->GetContext();
  32. TSimpleTimer timer;
  33. for (ui32 i = 0; i < 100000000; ++i) {
  34. if (param) {
  35. param->SetValue(ctx, NUdf::TUnboxedValuePod(i));
  36. }
  37. auto resVal = graph->GetValue().Get<ui32>();
  38. Y_ABORT_UNLESS(resVal == (pass ? i : 1));
  39. }
  40. Cerr << "[" << name << "] Elapsed: " << timer.Get() << "\n";
  41. }
  42. return 0;
  43. }