diff --git a/Eigen/src/Sparse/RandomSetter.h b/Eigen/src/Sparse/RandomSetter.h index efe8ba2db..8606e03c6 100644 --- a/Eigen/src/Sparse/RandomSetter.h +++ b/Eigen/src/Sparse/RandomSetter.h @@ -90,12 +90,12 @@ class RandomSetter inline RandomSetter(SparseMatrixType& target) : mp_target(&target) { - int outerPackets = target.outerSize() >> OuterPacketBits; + m_outerPackets = target.outerSize() >> OuterPacketBits; if (target.outerSize()&OuterPacketMask) - outerPackets += 1; - m_hashmaps = new HashMapType[outerPackets]; + m_outerPackets += 1; + m_hashmaps = new HashMapType[m_outerPackets]; KeyType ik = (1<innerSize()+1; - for (int k=0; k::setInvalidKey(m_hashmaps[k],ik); } @@ -115,11 +115,20 @@ class RandomSetter return m_hashmaps[outerMajor][key].value; } + int nonZeros() const + { + int nz = 0; + for (int k=0; k +#include +#include +#include + +#ifndef SIZE +#define SIZE 10000 +#endif + +#ifndef DENSITY +#define DENSITY 0.01 +#endif + +#ifndef REPEAT +#define REPEAT 1 +#endif + +#include "BenchSparseUtil.h" + +#ifndef MINDENSITY +#define MINDENSITY 0.0004 +#endif + +#ifndef NBTRIES +#define NBTRIES 10 +#endif + +#define BENCH(X) \ + timer.reset(); \ + for (int _j=0; _j(0,rows-1) + ei_random(0,cols-1); + t.stop(); + double rtime = t.value(); + std::cout << "rtime = " << rtime << " (" << dummy << ")\n\n"; + const int Bits = 6; + for (;;) + { + { + RandomSetter set1(sm1); + t.reset(); t.start(); + for (int k=0; k(0,rows-1),ei_random(0,cols-1)) += 1; + t.stop(); + std::cout << "std::map => \t" << t.value()-rtime + << " nnz=" << set1.nonZeros() << "\n";getchar(); + } + { + RandomSetter set1(sm1); + t.reset(); t.start(); + for (int k=0; k(0,rows-1),ei_random(0,cols-1)) += 1; + t.stop(); + std::cout << "gnu::hash_map => \t" << t.value()-rtime + << " nnz=" << set1.nonZeros() << "\n";getchar(); + } + { + RandomSetter set1(sm1); + t.reset(); t.start(); + for (int k=0; k(0,rows-1),ei_random(0,cols-1)) += 1; + t.stop(); + std::cout << "google::dense => \t" << t.value()-rtime + << " nnz=" << set1.nonZeros() << "\n";getchar(); + } + { + RandomSetter set1(sm1); + t.reset(); t.start(); + for (int k=0; k(0,rows-1),ei_random(0,cols-1)) += 1; + t.stop(); + std::cout << "google::sparse => \t" << t.value()-rtime + << " nnz=" << set1.nonZeros() << "\n";getchar(); + } + std::cout << "\n\n"; + } + + return 0; +} +