rename svmmalloc to svm_malloc, rename svmfree to svm_free, add the function svm_barrier

This commit is contained in:
Stefan Lankes 2011-11-07 12:19:57 -08:00
parent 1f998714e5
commit 9dbde43197
3 changed files with 41 additions and 37 deletions

View file

@ -54,12 +54,8 @@
//#define FIX 1024
#define FIX 1
#define USE_STRONG 1
#define USE_LAZYRELEASE 0
#if USE_STRONG && USE_LAZYRELEASE
#error Please, use only one memory model
#endif
#define SVM_TYPE SVM_STRONG
//define SVM_TYPE SVM_LAZYRELEASE
static inline double pow(double a, int b)
{
@ -76,7 +72,6 @@ int laplace(void *arg)
{
//char* argv[] = {"/bin/laplace", "192.168.4.254", "12301", NULL};
//int argc = 3;
uint32_t flags;
#ifdef _USE_GFX
uint32_t ret;
#endif
@ -98,10 +93,8 @@ int laplace(void *arg)
uint64_t start, end;
flags = irq_nested_disable();
my_rank = RCCE_ue();
num_ranks = RCCE_num_ues();
irq_nested_enable(flags);
my_rank = RCCE_IAM;
num_ranks = RCCE_NP;
#ifdef _USE_GFX
kprintf("Laplace calls gfx_init\n");
@ -140,19 +133,15 @@ int laplace(void *arg)
#endif
NewValues = (volatile DATA **)kmalloc((N + 2) * sizeof(DATA *));
#if USE_STRONG
NewValues[0] = (DATA *) svmmalloc((N + 2) * (M + 2) * sizeof(DATA), SVM_STRONG);
#elif USE_LAZYRELEASE
NewValues[0] = (DATA *) svmmalloc((N + 2) * (M + 2) * sizeof(DATA), SVM_LAZYRELEASE);
#ifdef SVM_TYPE
NewValues[0] = (DATA *) svm_malloc((N + 2) * (M + 2) * sizeof(DATA), SVM_TYPE);
#else
NewValues[0] = (DATA *) kmalloc((N + 2) * (M + 2) * sizeof(DATA));
#endif
OldValues = (volatile DATA **)kmalloc((N + 2) * sizeof(DATA *));
#if USE_STRONG
OldValues[0] = (DATA *) svmmalloc((N + 2) * (M + 2) * sizeof(DATA), SVM_STRONG);
#elif USE_LAZYRELEASE
OldValues[0] = (DATA *) svmmalloc((N + 2) * (M + 2) * sizeof(DATA), SVM_LAZYRELEASE);
#ifdef SVM_TYPE
OldValues[0] = (DATA *) svm_malloc((N + 2) * (M + 2) * sizeof(DATA), SVM_TYPE);
#else
OldValues[0] = (DATA *) kmalloc((N + 2) * (M + 2) * sizeof(DATA));
#endif
@ -169,7 +158,9 @@ int laplace(void *arg)
BufValues[i] = BufValues[i - 1] + (M);
}
RCCE_barrier(&RCCE_COMM_WORLD);
#ifdef SVM_TYPE
svm_barrier(SVM_TYPE);
#endif
kprintf("(%d) Memory allocated!\n", my_rank);
@ -203,16 +194,13 @@ int laplace(void *arg)
}
}
#if USE_LAZYRELEASE
svm_flush();
svm_invalidate();
#ifdef SVM_TYPE
svm_barrier(SVM_TYPE);
#endif
RCCE_barrier(&RCCE_COMM_WORLD);
kprintf("(%d) Arrays initialized!\n", my_rank);
start = rdtsc();
start = rdtsc();
// START ITERATIONS LOOP
for (t = 0; t < TMAX; t++) {
@ -230,16 +218,14 @@ int laplace(void *arg)
OldValues[I + i][J + j + 1]) / 4;
}
}
#if USE_LAZYRELEASE
svm_flush();
svm_invalidate();
#endif
tmp = NewValues;
NewValues = OldValues;
OldValues = tmp;
RCCE_barrier(&RCCE_COMM_WORLD);
#ifdef SVM_TYPE
svm_barrier(SVM_TYPE);
#endif
#ifdef _USE_GFX
if ((my_rank == 0) && (t % 50 == 0)) {
@ -263,18 +249,22 @@ int laplace(void *arg)
GFX_update();
}
RCCE_barrier(&RCCE_COMM_WORLD);
#ifdef SVM_TYPE
svm_barrier(SVM_TYPE);
#endif
#endif
// END ITERATIONS LOOP
}
RCCE_barrier(&RCCE_COMM_WORLD);
#ifdef SVM_TYPE
svm_barrier(SVM_TYPE);
#endif
end = rdtsc();
kprintf("Calculation time: %llu ms (%llu ticks)\n", (end-start)/(1000ULL*get_cpu_frequency()), end-start);
#if USE_STRONG || USE_LAZYRELEASE
#ifdef SVM_TYPE
svm_statistics();
#endif
}

View file

@ -49,13 +49,15 @@ int svm_init(void);
*
* @return Pointer to the new memory range
*/
void* svmmalloc(size_t sizei, uint32_t flags);
void* svm_malloc(size_t sizei, uint32_t flags);
/** @brief Frees memory, which is managed by the SVM subsystem
*
* Like RCCE function, belongs svmfree to the synchronous function.
*/
void svmfree(void* addr, size_t size);
void svm_free(void* addr, size_t size);
int svm_barrier(uint32_t flags);
/** @brief Request for exlusive access
*

View file

@ -148,7 +148,7 @@ int svm_access_request(size_t addr)
static atomic_int32_t size_counter = ATOMIC_INIT(0);
void* svmmalloc(size_t size, uint32_t consistency)
void* svm_malloc(size_t size, uint32_t consistency)
{
size_t phyaddr, viraddr, i;
uint32_t flags;
@ -238,7 +238,7 @@ void* svmmalloc(size_t size, uint32_t consistency)
#endif
}
void svmfree(void* addr, size_t size)
void svm_free(void* addr, size_t size)
{
size_t phyaddr, i;
uint32_t flags;
@ -341,6 +341,18 @@ void svm_flush(void)
}
#endif
int svm_barrier(uint32_t type)
{
if (type == SVM_LAZYRELEASE) {
svm_flush();
svm_invalidate();
}
RCCE_barrier(&RCCE_COMM_WORLD);
return 0;
}
int svm_statistics(void)
{
uint32_t i;