18int prepareArray(uintptr_t *
array,
long long len,
long long stride,
long long secSize,
int pattern){
19 assert(
array != NULL );
30 fprintf(
stderr,
"prepareArray() unknown array access pattern: %d\n",pattern);
43 assert(
array != NULL );
45 long long elemCnt, maxElemCnt, sec,
i;
46 long long currElemCnt, uniqIndex, taken;
48 long long currSecSize = secSize;
49 long long secCnt = 1+len/secSize;
50 long long *availableNumbers;
52 p = (uintptr_t **)&
array[0];
54 maxElemCnt = currSecSize/stride;
55 availableNumbers = (
long long *)calloc(maxElemCnt,
sizeof(
long long));
58 for(sec=0; sec<secCnt; ++sec){
62 currSecSize = (len%secSize);
64 for(
i=0;
i<maxElemCnt;
i++)
65 availableNumbers[
i] =
i;
67 currElemCnt = currSecSize/stride;
74 long long remainingElemCnt = currElemCnt;
76 for(elemCnt=0; elemCnt<currElemCnt-taken; ++elemCnt){
78 long long index = taken + random() % (remainingElemCnt-taken);
80 uniqIndex = sec*secSize + stride*availableNumbers[index];
82 availableNumbers[index] = availableNumbers[remainingElemCnt-1];
87 next = &
array[uniqIndex];
89 p = (uintptr_t **)next;
97 free(availableNumbers);
108 uintptr_t **p, *next;
110 p = (uintptr_t **)&
array[0];
113 for(curr=0; curr<len; curr+=stride){
116 p = (uintptr_t **)next;
static double array[ARRAYSIZE]
volatile uintptr_t opt_killer_zero
int prepareArray(uintptr_t *array, long long len, long long stride, long long secSize, int pattern)
static void _prepareArray_sections_random(uintptr_t *array, long long len, long long stride, long long secSize)
static void _prepareArray_sequential(uintptr_t *array, long long len, long long stride)