MCPcopy Create free account
hub / github.com/Derious/cuMPC / packetmath

Function packetmath

dependence/eigen-3.4.0/test/packetmath.cpp:392–619  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

390
391template <typename Scalar, typename Packet>
392void packetmath() {
393 typedef internal::packet_traits<Scalar> PacketTraits;
394 const int PacketSize = internal::unpacket_traits<Packet>::size;
395 typedef typename NumTraits<Scalar>::Real RealScalar;
396
397 if (g_first_pass)
398 std::cerr << "=== Testing packet of type '" << typeid(Packet).name() << "' and scalar type '"
399 << typeid(Scalar).name() << "' and size '" << PacketSize << "' ===\n";
400
401 const int max_size = PacketSize > 4 ? PacketSize : 4;
402 const int size = PacketSize * max_size;
403 EIGEN_ALIGN_MAX Scalar data1[size];
404 EIGEN_ALIGN_MAX Scalar data2[size];
405 EIGEN_ALIGN_MAX Scalar data3[size];
406 EIGEN_ALIGN_MAX Scalar ref[size];
407 RealScalar refvalue = RealScalar(0);
408
409 eigen_optimization_barrier_test<Packet>::run();
410 eigen_optimization_barrier_test<Scalar>::run();
411
412 for (int i = 0; i < size; ++i) {
413 data1[i] = internal::random<Scalar>() / RealScalar(PacketSize);
414 data2[i] = internal::random<Scalar>() / RealScalar(PacketSize);
415 refvalue = (std::max)(refvalue, numext::abs(data1[i]));
416 }
417
418 internal::pstore(data2, internal::pload<Packet>(data1));
419 VERIFY(test::areApprox(data1, data2, PacketSize) && "aligned load/store");
420
421 for (int offset = 0; offset < PacketSize; ++offset) {
422 internal::pstore(data2, internal::ploadu<Packet>(data1 + offset));
423 VERIFY(test::areApprox(data1 + offset, data2, PacketSize) && "internal::ploadu");
424 }
425
426 for (int offset = 0; offset < PacketSize; ++offset) {
427 internal::pstoreu(data2 + offset, internal::pload<Packet>(data1));
428 VERIFY(test::areApprox(data1, data2 + offset, PacketSize) && "internal::pstoreu");
429 }
430
431 if (internal::unpacket_traits<Packet>::masked_load_available) {
432 test::packet_helper<internal::unpacket_traits<Packet>::masked_load_available, Packet> h;
433 unsigned long long max_umask = (0x1ull << PacketSize);
434
435 for (int offset = 0; offset < PacketSize; ++offset) {
436 for (unsigned long long umask = 0; umask < max_umask; ++umask) {
437 h.store(data2, h.load(data1 + offset, umask));
438 for (int k = 0; k < PacketSize; ++k) data3[k] = ((umask & (0x1ull << k)) >> k) ? data1[k + offset] : Scalar(0);
439 VERIFY(test::areApprox(data3, data2, PacketSize) && "internal::ploadu masked");
440 }
441 }
442 }
443
444 if (internal::unpacket_traits<Packet>::masked_store_available) {
445 test::packet_helper<internal::unpacket_traits<Packet>::masked_store_available, Packet> h;
446 unsigned long long max_umask = (0x1ull << PacketSize);
447
448 for (int offset = 0; offset < PacketSize; ++offset) {
449 for (unsigned long long umask = 0; umask < max_umask; ++umask) {

Callers

nothing calls this directly

Calls 15

runFunction · 0.85
areApproxFunction · 0.85
isApproxAbsFunction · 0.85
preduxFunction · 0.85
REF_MULFunction · 0.85
predux_mulFunction · 0.85
absFunction · 0.70
pstoreFunction · 0.50
pstoreuFunction · 0.50
isApproxFunction · 0.50
pfirstFunction · 0.50
predux_half_dowto4Function · 0.50

Tested by

no test coverage detected