rename svmmalloc to svm_malloc, rename svmfree to svm_free, add the function svm_barrier
This commit is contained in:
parent
1f998714e5
commit
9dbde43197
3 changed files with 41 additions and 37 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue