Merge branch 'svm' of git.lfbs.rwth-aachen.de:metalsvm into svm

This commit is contained in:
Stefan Lankes 2011-11-10 01:15:37 -08:00
commit 8c67426c8c
4 changed files with 34 additions and 16 deletions

View file

@ -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);

View file

@ -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)
{

View file

@ -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

View file

@ -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)) {