20 #include <gtest/gtest.h>
23 #include "xmmintrin.h"
51 ASSERT_TRUE ( lPtr != NULL );
53 ASSERT_EQ (
sizeof (
double ) * 50, manager.
getUsedMemory() );
55 ASSERT_NO_FATAL_FAILURE (
56 for (
int n = 0; n < 50; n++ ) {
61 #ifdef PARENTAL_CONTROL
72 ADHERETO (
double, testelements );
85 unsigned int sizeA =
sizeof ( A );
86 unsigned int sizeInt =
sizeof ( int );
87 unsigned int sizeDouble =
sizeof ( double );
89 ADHERETOLOC ( A, managedA, locA );
91 ASSERT_TRUE ( locA != NULL );
94 double *testelements = adhTestelements;
95 ASSERT_TRUE ( testelements != NULL );
106 EXPECT_EQ ( 2 * ( sizeA + 10 * sizeDouble ) + 10 * sizeInt, manager.
getUsedMemory() );
108 EXPECT_EQ ( 2 * ( sizeA + 10 * sizeDouble ), manager.
getUsedMemory() );
145 const int memsize = 10240;
146 const int allocarrn = 4000;
153 for (
int n = 0; n < allocarrn; n++ ) {
159 for (
int o = 0; o < 100; o++ ) {
162 for (
int n = 0; n < allocarrn; n++ ) {
166 for (
int m = 0; m < 10; m++ ) {
167 darr[m] = n * 13 + m * o;
171 for (
int n = 0; n < allocarrn; n++ ) {
174 for (
int m = 0; m < 10; m++ ) {
175 EXPECT_EQ ( n * 13 + m * o, darr[m] );
184 for (
int n = 0; n < allocarrn; n++ ) {
195 const int fac = 1000;
196 const int memsize = 10.240 * fac;
197 const int allocarrn = 4 * fac;
208 for (
int n = 0; n < allocarrn; ++n ) {
212 for (
int m = 0; m < 10; ++m ) {
222 double averageRate = 0;
223 double datain = 0, dataout = 0;
230 for (
int o = 0; o < 10; ++o ) {
237 for (
int n = 0; n < allocarrn; ++n ) {
238 unsigned int randomi = test.
random ( allocarrn );
244 for (
int m = 0; m < 10; m++ ) {
245 darr[m] = randomi * 13 + m * o;
258 for (
int n = 0; n < allocarrn; n++ ) {
260 const double *darr = aLoc;
261 for (
int m = 0; m < 10; ++m ) {
262 EXPECT_TRUE ( darr[m] == -1 || ( darr[m] == n * 13 + m * o ) );
271 for (
int n = 0; n < allocarrn; ++n ) {
274 for (
int m = 0; m < 10; ++m ) {
287 double ideal_homirate = ( ( double ) memsize ) / ( allocarrn * 10 *
sizeof ( double ) );
288 infomsgf (
"Ideal hits over misses %lf vs. reached: %lf factor of ~ %lf", ideal_homirate, averageRate, ideal_homirate / averageRate );
289 EXPECT_TRUE ( averageRate > .5 * ideal_homirate );
291 double ideal_rate = ( 10 * allocarrn * 10 *
sizeof ( double ) ) * ( 1 - ideal_homirate );
292 infomsgf (
"Ideal data rate %lf vs. reached: %lf (in) %lf (out) factor of ~ %lf ", ideal_rate, datain, dataout, ( .5 * ( datain + dataout ) / ideal_rate ) );
293 EXPECT_TRUE ( datain < 4 * ideal_rate );
294 EXPECT_TRUE ( dataout < 4 * ideal_rate );
298 for (
int n = 0; n < allocarrn; n++ ) {
312 const unsigned int memsize =
sizeof ( double ) * 10;
313 const unsigned int swapmem = 100 * memsize;
318 for (
unsigned int o = 0; o < 10; ++o ) {
319 const unsigned int targetsize = o + 1;
320 const unsigned int totalspace = 8 * targetsize *
sizeof ( double );
321 const unsigned int swappedmin = ( totalspace > memsize ? totalspace - memsize : 0u );
323 for (
unsigned int p = 0; p < 8; ++p ) {
330 for (
unsigned int p = 0; p < 8; ++p ) {
332 ADHERETOLOC (
double, a, locA );
336 for (
unsigned int p = 0; p < 8; ++p ) {
338 ADHERETOLOC (
double, a, locA );
339 EXPECT_EQ ( o + p, locA[0] );
342 for (
unsigned int p = 0; p < 8; ++p ) {
356 const unsigned int memsize =
sizeof ( double ) * 10;
357 const unsigned int swapmem = 10000 * memsize;
364 for (
unsigned int o = 0; o < 10; ++o ) {
365 const unsigned int arraysize = test.
random ( 10 ) + 1;
366 const unsigned int targetsize = test.
random ( 10 ) + 1;
367 const unsigned int totalspace = arraysize * targetsize *
sizeof ( double );
368 const unsigned int swappedmin = ( totalspace > memsize ? totalspace - memsize : 0u );
371 for (
unsigned int p = 0; p < arraysize; ++p ) {
379 for (
unsigned int p = 0; p < arraysize; ++p ) {
381 ADHERETOLOC (
double, a, locA );
386 for (
unsigned int p = 0; p < arraysize; ++p ) {
388 ADHERETOLOC (
double, a, locA );
389 EXPECT_EQ ( o + p, locA[0] );
393 for (
unsigned int p = 0; p < arraysize; ++p ) {
408 const unsigned int memsize =
sizeof ( double ) / 2;
409 const unsigned int swapmem = memsize;
422 const unsigned int memsize =
sizeof ( double ) * 2;
423 const unsigned int swapmem = memsize;
433 const unsigned int memsize =
sizeof ( double ) * 20;
434 const unsigned int swapmem = memsize;
439 ptr1 = ptr2 = ptr3 = ptr4 = ptr5 = NULL;
462 } __attribute__ ( ( aligned ( 16 ) ) );
464 const unsigned int memsize =
sizeof ( double ) * 3;
465 const unsigned int swapmem = memsize * 100;
472 ADHERETOLOC ( sixteen, ptr1, locptr1 );
473 for (
int i = 0; i < 4; ++i ) {
480 ADHERETOLOC ( sixteen, ptr2, locptr2 );
481 for (
int i = 0; i < 4; ++i ) {
482 locptr2[0].f[i] = i + 5;
487 ADHERETOLOC ( sixteen, ptr1, locptr1 );
488 for (
int i = 0; i < 4; ++i ) {
489 ASSERT_EQ ( i, locptr1[0].f[i] );
493 for (
int i = 0; i < 4; ++i ) {
496 locptr1[0].simd = _mm_add_ps ( locptr1[0].simd, s.simd );
500 ADHERETOLOCCONST ( sixteen, ptr2, locptr2 );
501 for (
int i = 0; i < 4; ++i ) {
502 ASSERT_EQ ( i + 5, locptr2[0].f[i] );
507 ADHERETOLOC ( sixteen, ptr1, locptr1 );
508 for (
int i = 0; i < 4; ++i ) {
509 ASSERT_EQ ( 11 * i, locptr1[0].f[i] );
538 for (
int j = 0; j < 2; ++j ) {
539 a1[j].d = 100.0 * i * j;
545 for (
int j = 0; j < 2; ++j ) {
546 loca2[j].d = 1000.0 * i * j;
547 loca2[j].i = 10 * i * j;
560 const unsigned int memsize = (
sizeof ( B ) +
sizeof ( A ) * 4 ) * 2;
561 const unsigned int swapmem = memsize * 2;
568 ADHERETOLOC ( B, b, locb );
569 ASSERT_NO_THROW ( locb[0].set ( 1 ) );
570 ASSERT_NO_THROW ( locb[1].set ( 2 ) );
575 ADHERETOLOC (
int, i, loci );
576 for (
int j = 0; j < 5; ++j ) {
582 ADHERETOLOCCONST ( B, b, locb );
583 for (
int i = 0, k = 1; i < 2; ++i, ++k ) {
584 ASSERT_EQ ( 10.0 * k, locb[i].d1 );
588 for (
int j = 0; j < 2; ++j ) {
589 ASSERT_EQ ( 100.0 * k * j, loca1[j].d );
590 ASSERT_EQ ( k * j, loca1[j].i );
593 ASSERT_EQ ( 20.0 * k, locb[i].d2 );
594 ASSERT_EQ ( 30.0 * k, locb[i].d3 );
598 for (
int j = 0; j < 2; ++j ) {
599 ASSERT_EQ ( 1000.0 * k * j, loca2[j].d );
600 ASSERT_EQ ( 10 * k * j, loca2[j].i );
611 const unsigned int memsize = 10 *
sizeof ( double );
612 const unsigned int swapmem = memsize * 10;
621 for (
int i = 0; i < 10; ++i ) {
630 for (
int i = 0; i < 10; ++i ) {
638 ASSERT_NO_FATAL_FAILURE (
delete manager );
639 ASSERT_NO_FATAL_FAILURE (
delete swap );
651 const unsigned int n_el = 1024;
652 const unsigned int memsize = n_el *
sizeof ( char ) / 2;
653 const unsigned int swapsize = 10 * memsize;
666 for (
unsigned int n = 0; n < n_el * 10; ++n ) {
672 infomsgf (
"HoMrate = %lf ", homi_rate );
673 EXPECT_TRUE ( homi_rate > 50 );
676 for (
unsigned int n = 0; n < n_el * 10; ++n ) {
677 unsigned int idx = test.
random ( (
int ) n_el - 1 );
683 infomsgf (
"HoMrate = %lf", homi_rate );
684 EXPECT_TRUE ( homi_rate < 1 );
688 for (
unsigned int n = 0; n < n_el * 10; ++n ) {
695 infomsgf (
"HoMrate = %lf", homi_rate );
696 EXPECT_TRUE ( homi_rate > 40 );
Exception for errors with the memory.
global_bytesize getSwappedMemory() const
returns current swap usage
Main class to fetch memory that is managed by rambrain for actual usage.
void printMemUsage() const
prints out current memory usage
global_bytesize getUsedMemory() const
returns current ram usage
virtual global_bytesize getUsedSwap() const
Simple getter.
void setSeed(unsigned int seed=time(NULL))
Set a new seed for random number generation.
int random(int max) const
Get a random number (integer)
Main class to allocate memory that is managed by the rambrain memory defaultManager.
bool checkCycle()
checks whether the scheduler believes to be sane and prints an error message if not ...
void resetSwapstats()
reset statistic about the number, size and efficiency of swapping actions
static const memoryID root
TEST(cyclicManagedMemory, Unit_AllocatePointers)
double getTotalSwappedInBytes()
simple Getter
A basic class to be used by tests. Provides helper methods and functionality e.g. time measurements...
rambrainConfig config
You will find the object in managedMemory.cpp as we have to define it in some 'used' file in the link...
void reinit(bool reread=true)
Reinitialises the system.
void printSwapstats() const
print statistic about the number, size and efficiency of swapping actions
scheduler working with a double linked cycle. Details see paper.
unsigned int getNumberOfChildren(const memoryID &id)
conveniently returns number of children of the memoryChunk with id id
bool setMemoryLimit(global_bytesize size)
dynamically adjusts allowed ram usage
A dummy swap that just copies swapped out chunks to a different location in ram.
double getHitsOverMisses()
returns current hits over misses rate for accessing elements.