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

View file

@ -49,13 +49,15 @@ int svm_init(void);
* *
* @return Pointer to the new memory range * @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 /** @brief Frees memory, which is managed by the SVM subsystem
* *
* Like RCCE function, belongs svmfree to the synchronous function. * 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 /** @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); 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; size_t phyaddr, viraddr, i;
uint32_t flags; uint32_t flags;
@ -238,7 +238,7 @@ void* svmmalloc(size_t size, uint32_t consistency)
#endif #endif
} }
void svmfree(void* addr, size_t size) void svm_free(void* addr, size_t size)
{ {
size_t phyaddr, i; size_t phyaddr, i;
uint32_t flags; uint32_t flags;
@ -341,6 +341,18 @@ void svm_flush(void)
} }
#endif #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) int svm_statistics(void)
{ {
uint32_t i; uint32_t i;