#include "sopnamsp.h" #include "machdefs.h" #include #include #include #include #include #include #include #include #include "sophyainit.h" #include "timing.h" #include "ctimer.h" #include "array.h" /* #include "cexpre.h" #include "rpneval.h" #include "commander.h" */ /* ------ Programme de test de rapidite comparative d'acces aux elements ----- Reza+cmv , Mars 2012 */ sa_size_t ASZ=1024*1024*128; sa_size_t BSZ=1024*1024*64; int NLOOP=20; using namespace std; class SAA { public: SAA(size_t n) { data_=new uint_1[n]; sz_=n; } ~SAA() { delete[] data_; } inline size_t Size() { return sz_; } inline uint_1 & operator[] (size_t k) { return *(data_+k); } uint_1* data_; size_t sz_; }; template class TAA { public: TAA(size_t n) { data_=new T[n]; sz_=n; for(int i=0; i<50; i++) flags[i]=i+5; } virtual ~TAA() { delete[] data_; } virtual size_t Size() { return sz_; } inline T & operator[] (size_t k) { return *(data_+k); } static int flags[50]; T* data_; size_t sz_; }; template int TAA::flags[50]; class WSAA { public: WSAA(size_t n) { sa_=new SAA(n); } ~WSAA() { delete sa_; } inline size_t Size() { return sa_->Size(); } inline uint_1 & operator[] (size_t k) { return *(sa_->data_+k); } SAA* sa_; }; class SADB { public: SADB(size_t n) : ndb_(n) { data_=ndb_.Begin(); sz_=n; } inline size_t Size() { return sz_; } inline uint_1 & operator[] (size_t k) { return *(data_+k); } NDataBlock ndb_; uint_1* data_; size_t sz_; }; static uint_1 mask_[8]={1,2,4,8,16,32,64,128}; class SBB { public: SBB(size_t n) { size_t n8=n/8; data_=new uint_1[n8]; sz_=n8*8; } ~SBB() { delete[] data_; } inline size_t Size() { return sz_; } inline bool operator[] (size_t k) { return (data_[k/8]&mask_[k%8]); } inline void set(size_t k, bool v) { (v?(data_[k/8]|=mask_[k%8]):(data_[k/8]&=(~mask_[k%8]))); } uint_1* data_; size_t sz_; }; /* --Main-- */ int main(int narg, char *arg[]) { cout << "--- programme telacc.cc : test temps d'acces aux tableaux --- " << endl; if (narg>1) { sa_size_t ifac=atoi(arg[1]); BSZ=1024*1024*ifac; } cout << " telacc.cc BSZ= " << BSZ << endl; Timer tm("ELACC"); try { double* x = new double[BSZ]; double* y = new double[BSZ]; double* z = new double[BSZ]; for(sa_size_t k=0; k ta(ASZ); tm.SplitQ(); for(int i=0; i db(ASZ); tm.SplitQ(); for(int i=0; i va(ASZ); tm.SplitQ(); for(int i=0; i