MCPcopy Create free account
hub / github.com/NGSolve/ngsolve / Timing

Method Timing

fem/hdivfe.cpp:359–439  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

357
358 template<int D>
359 list<tuple<string,double>> HDivFiniteElement<D> :: Timing () const
360 {
361 list<tuple<string,double>>timings;
362 IntegrationRule ir(ElementType(), Order());
363 SIMD_IntegrationRule simdir(ElementType(), Order());
364 Matrix<> shape(GetNDof(), D);
365 Vector<> coefs(GetNDof());
366 Matrix<> values(ir.Size(), D);
367 Vector<> divvalues(ir.Size());
368 Vector<SIMD<double>> adivvalues(simdir.Size());
369 Matrix<SIMD<double>> avalues(D, simdir.Size());
370 FE_ElementTransformation<D,D> trafo(ElementType());
371 static LocalHeap lh (100000, "FE - Timing");
372 // auto & mir = trafo(ir, lh);
373 auto & simdmir = trafo(simdir, lh);
374
375 coefs = 1;
376
377 double maxtime = 0.5;
378 double time;
379
380 constexpr size_t steps = 1000;
381 time = RunTiming([&]() {
382 for (size_t i = 0; i < steps; i++)
383 this -> CalcShape(ir[0], shape);
384 });
385 timings.push_back(make_tuple("CalcShape", time/steps*1e9/(D*GetNDof())));
386
387 time = RunTiming([&]() {
388 for (size_t i = 0; i < steps; i++)
389 this -> Evaluate(ir, coefs, values);
390 }, maxtime);
391 timings.push_back(make_tuple("Evaluate",time/steps*1e9/(D*GetNDof()*ir.GetNIP())));
392
393 time = RunTiming([&]() {
394 for (size_t i = 0; i < steps; i++)
395 this -> Evaluate(simdmir, coefs, avalues);
396 }, maxtime);
397 timings.push_back(make_tuple("Evaluate(SIMD)", time/steps*1e9/(D*GetNDof()*ir.GetNIP())));
398
399 /*
400 time = RunTiming([&]() {
401 for (size_t i = 0; i < steps; i++)
402 this -> EvaluateDiv(mir, coefs, divvalues);
403 }, maxtime);
404 timings.push_back(make_tuple("Evaluate Grad", time/steps*1e9/(D*GetNDof()*ir.GetNIP())));
405 */
406 time = RunTiming([&]() {
407 for (size_t i = 0; i < steps; i++)
408 this -> EvaluateDiv(simdmir, coefs, adivvalues);
409 }, maxtime);
410 timings.push_back(make_tuple("Evaluate Grad(SIMD)", time/steps*1e9/(GetNDof()*ir.GetNIP())));
411
412 time = RunTiming([&]() {
413 for (size_t i = 0; i < steps; i++)
414 this -> EvaluateTrans(ir, values, coefs);
415 }, maxtime);
416 timings.push_back(make_tuple("Evaluate Trans", time/steps*1e9/(D*GetNDof()*ir.GetNIP())));

Callers

nothing calls this directly

Calls 10

ElementTypeFunction · 0.85
EvaluateDivMethod · 0.80
AddDivTransMethod · 0.80
OrderFunction · 0.70
GetNDofFunction · 0.70
SizeMethod · 0.45
CalcShapeMethod · 0.45
EvaluateMethod · 0.45
GetNIPMethod · 0.45
AddTransMethod · 0.45

Tested by

no test coverage detected