File indexing completed on 2026-04-09 07:49:14
0001
0002
0003 #include "sproc.h"
0004
0005 #include <iostream>
0006 #include <iomanip>
0007 #include <string>
0008 #include <sstream>
0009 #include <cstring>
0010 #include <cstdlib>
0011 #include <cassert>
0012
0013 template<typename T>
0014 struct A
0015 {
0016 A(int ni_, int nj_=1, int nk_=1, int nl_=1, int nm_=1)
0017 :
0018 ni(ni_),
0019 nj(nj_),
0020 nk(nk_),
0021 nl(nl_),
0022 nm(nm_),
0023 ptr(NULL)
0024 {
0025 }
0026
0027 unsigned size() const { return ni*nj*nk*nl*nm ; }
0028 unsigned itemsize() const { return nj*nk*nl*nm ; }
0029
0030 void allocate()
0031 {
0032 unsigned num_bytes = sizeof(T)*size() ;
0033 if(num_bytes > 0)
0034 {
0035 ptr = (T*)malloc(num_bytes) ;
0036 }
0037 }
0038
0039 void add(T* src, unsigned num_vals)
0040 {
0041 unsigned item = itemsize() ;
0042 assert( num_vals % item == 0 );
0043 unsigned num_item = num_vals / item ;
0044
0045 unsigned cur_bytes = sizeof(T)*size() ;
0046 unsigned add_bytes = sizeof(T)*num_item*item ;
0047 unsigned new_bytes = cur_bytes+add_bytes ;
0048
0049 if( ptr == NULL )
0050 {
0051 ptr = (T*)malloc(add_bytes) ;
0052 }
0053 else
0054 {
0055 ptr = (T*)realloc(ptr, new_bytes);
0056 }
0057 memcpy( ptr + ni*item, src, add_bytes );
0058
0059 ni += num_item ;
0060 }
0061
0062 void reset()
0063 {
0064 free(ptr);
0065 ptr = NULL ;
0066 ni = 0 ;
0067 }
0068
0069 std::string desc() const
0070 {
0071 std::stringstream ss ;
0072 ss << " shape (" << ni << "," << nj << "," << nk << "," << nl << "," << nm << ")" ;
0073 std::string s = ss.str();
0074 return s ;
0075 }
0076
0077 int ni ;
0078 int nj ;
0079 int nk ;
0080 int nl ;
0081 int nm ;
0082
0083 T* ptr ;
0084 };
0085
0086
0087 int main()
0088 {
0089 unsigned itemsize = 6*4 ;
0090 float* f = new float[itemsize];
0091 for(int i=0 ; i < int(itemsize) ; i++) f[i] = float(i);
0092
0093 A<float>* a = new A<float>(0, 6, 4 );
0094
0095 float vm0 = sproc::VirtualMemoryUsageMB() ;
0096
0097 for(int e=0 ; e < 100 ; e++)
0098 {
0099 for(int s=0 ; s < 1000 ; s++) a->add(f, itemsize);
0100 std::cout << std::setw(4) << e << " : " << a->desc() << std::endl ;
0101 a->reset();
0102 }
0103 float vm1 = sproc::VirtualMemoryUsageMB() ;
0104 float dv = vm1 - vm0 ;
0105 std::cout
0106 << " vm0 " << vm0
0107 << " vm1 " << vm1
0108 << " dv " << dv
0109 << std::endl
0110 ;
0111
0112 return 0;
0113 }