| 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()))); |
nothing calls this directly
no test coverage detected