Merge branch 'svm' of git.lfbs.rwth-aachen.de:metalsvm into svm
This commit is contained in:
commit
8c67426c8c
4 changed files with 34 additions and 16 deletions
19
apps/tests.c
19
apps/tests.c
|
@ -114,6 +114,8 @@ static int mail_noise(void*arg) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* N has to be multiple of UEs */
|
||||
|
||||
//#define N 1024
|
||||
//#define N 512
|
||||
#define N 128
|
||||
|
@ -204,9 +206,9 @@ static int svm_test(void *arg)
|
|||
svm_flags |= SVM_L2;
|
||||
#endif
|
||||
|
||||
A[0] = (int*) svmmalloc(3*N*N*sizeof(int), svm_flags);
|
||||
A[0] = (int*) svm_malloc(3*N*N*sizeof(int), svm_flags);
|
||||
|
||||
if (!my_ue)
|
||||
if (!my_ue)
|
||||
memset((void*) A[0], 0x00, 3*N*N*sizeof(int));
|
||||
|
||||
// initialize matrices
|
||||
|
@ -215,6 +217,7 @@ static int svm_test(void *arg)
|
|||
B[i] = A[0] + (i*N + N*N);
|
||||
C[i] = A[0] + (i*N + 2*N*N);
|
||||
}
|
||||
|
||||
if (!my_ue) {
|
||||
for(i=0; i<N; i++) {
|
||||
A[i][i] = 1;
|
||||
|
@ -223,9 +226,8 @@ static int svm_test(void *arg)
|
|||
}
|
||||
}
|
||||
|
||||
svm_flush(0);
|
||||
svm_barrier(svm_flags);
|
||||
|
||||
RCCE_barrier(&RCCE_COMM_WORLD);
|
||||
kputs("Start parallel calculation...\n");
|
||||
|
||||
start = rdtsc();
|
||||
|
@ -245,9 +247,8 @@ static int svm_test(void *arg)
|
|||
}
|
||||
}
|
||||
|
||||
svm_flush(0);
|
||||
|
||||
RCCE_barrier(&RCCE_COMM_WORLD);
|
||||
svm_barrier(svm_flags);
|
||||
|
||||
end = rdtsc();
|
||||
|
||||
kputs("Check results...\n");
|
||||
|
@ -270,7 +271,7 @@ static int svm_test(void *arg)
|
|||
|
||||
kprintf("Calculation time (par): %llu ms (%llu ticks)\n", (end-start)/(1000ULL*get_cpu_frequency()), end-start);
|
||||
|
||||
svmfree((void*) A[0], 3*N*sizeof(int));
|
||||
svm_free((void*) A[0], 3*N*sizeof(int));
|
||||
|
||||
svm_statistics();
|
||||
|
||||
|
@ -339,7 +340,7 @@ int test_init(void)
|
|||
//create_kernel_task(NULL, mail_noise, NULL, NORMAL_PRIO);
|
||||
create_kernel_task(NULL, svm_test, NULL, NORMAL_PRIO);
|
||||
//create_kernel_task(NULL, pi, NULL, NORMAL_PRIO);
|
||||
create_kernel_task(NULL, laplace, NULL, NORMAL_PRIO);
|
||||
//create_kernel_task(NULL, laplace, NULL, NORMAL_PRIO);
|
||||
//create_user_task(NULL, "/bin/hello", argv);
|
||||
//create_user_task(NULL, "/bin/tests", argv);
|
||||
//create_user_task(NULL, "/bin/jacobi", argv);
|
||||
|
|
|
@ -78,16 +78,20 @@ int svm_access_request(size_t addr);
|
|||
*/
|
||||
int svm_emit_page(size_t addr, int ue);
|
||||
|
||||
#ifdef CONFIG_ROCKCREEK
|
||||
/* @brief invalidate the cache entries for all SVM regions
|
||||
*/
|
||||
#ifndef SVM_WB
|
||||
static inline void svm_invalidate(void)
|
||||
{
|
||||
asm volatile ( ".byte 0x0f; .byte 0x0a;\n" ); // CL1FLUSHMB
|
||||
}
|
||||
#else
|
||||
void svm_invalidate(void);
|
||||
#endif
|
||||
|
||||
/* *brief flushs the cache for all SVM regions
|
||||
*/
|
||||
#ifdef CONFIG_ROCKCREEK
|
||||
#ifndef SVM_WB
|
||||
static inline void svm_flush(void)
|
||||
{
|
||||
|
|
|
@ -784,7 +784,7 @@ int arch_paging_init(void)
|
|||
kprintf("Map configuration registers at 0x%x\n", viraddr);
|
||||
|
||||
// map SCC's message passing buffers
|
||||
viraddr = map_region(MPB_X0_Y0, MPB_X0_Y0, (MPB_OWN-MPB_X0_Y0+64*1024*1024) >> PAGE_SHIFT, MAP_KERNEL_SPACE|MAP_MPE);
|
||||
viraddr = map_region(MPB_X0_Y0, MPB_X0_Y0, (MPB_OWN-MPB_X0_Y0+16*1024*1024) >> PAGE_SHIFT, MAP_KERNEL_SPACE|MAP_MPE);
|
||||
kprintf("Map message passing buffers at 0x%x\n", viraddr);
|
||||
|
||||
// map the FPGA registers
|
||||
|
|
|
@ -209,9 +209,7 @@ int svm_access_request(size_t addr)
|
|||
return ret;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static atomic_int32_t size_counter = ATOMIC_INIT(0);
|
||||
#endif
|
||||
|
||||
void* svm_malloc(size_t size, uint32_t consistency)
|
||||
{
|
||||
|
@ -432,6 +430,20 @@ void svm_flush(void)
|
|||
*/
|
||||
|
||||
#ifdef SVM_WB
|
||||
|
||||
void svm_invalidate(void)
|
||||
{
|
||||
task_t* task = per_core(current_task);
|
||||
|
||||
if(task->flags & TASK_L2) {
|
||||
asm volatile ( ".byte 0x0f; .byte 0x0a;\n" ); // CL1FLUSHMB
|
||||
} else {
|
||||
/* no action needed svm_flush already invalidates cache */
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void svm_flush( size_t phyaddr )
|
||||
{
|
||||
task_t* task = per_core(current_task);
|
||||
|
@ -518,18 +530,19 @@ wrong_addr:
|
|||
}
|
||||
#endif
|
||||
|
||||
int svm_barrier(uint32_t type)
|
||||
int svm_barrier(uint32_t flags)
|
||||
{
|
||||
int i;
|
||||
RCCE_COMM *comm = &RCCE_COMM_WORLD;
|
||||
static int index = 0;
|
||||
|
||||
if (type == SVM_LAZYRELEASE) {
|
||||
if( flags & SVM_LAZYRELEASE ) {
|
||||
kputs("svm barrier has to flush and invalidate!\n");
|
||||
svm_flush(0);
|
||||
svm_invalidate();
|
||||
}
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
// Lubachevsky barrier with flags
|
||||
index = !index;
|
||||
if (incregs[AIREG1].counter > (comm->size - 2)) {
|
||||
|
|
Loading…
Add table
Reference in a new issue