- fix merge conflicts

This commit is contained in:
Pablo Reble 2011-11-10 01:09:31 -08:00
parent a114e3997d
commit 1636501973
4 changed files with 34 additions and 16 deletions

View file

@ -114,6 +114,8 @@ static int mail_noise(void*arg) {
return 0; return 0;
} }
/* N has to be multiple of UEs */
//#define N 1024 //#define N 1024
//#define N 512 //#define N 512
#define N 128 #define N 128
@ -204,9 +206,9 @@ static int svm_test(void *arg)
svm_flags |= SVM_L2; svm_flags |= SVM_L2;
#endif #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)); memset((void*) A[0], 0x00, 3*N*N*sizeof(int));
// initialize matrices // initialize matrices
@ -215,6 +217,7 @@ static int svm_test(void *arg)
B[i] = A[0] + (i*N + N*N); B[i] = A[0] + (i*N + N*N);
C[i] = A[0] + (i*N + 2*N*N); C[i] = A[0] + (i*N + 2*N*N);
} }
if (!my_ue) { if (!my_ue) {
for(i=0; i<N; i++) { for(i=0; i<N; i++) {
A[i][i] = 1; 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"); kputs("Start parallel calculation...\n");
start = rdtsc(); start = rdtsc();
@ -245,9 +247,8 @@ static int svm_test(void *arg)
} }
} }
svm_flush(0); svm_barrier(svm_flags);
RCCE_barrier(&RCCE_COMM_WORLD);
end = rdtsc(); end = rdtsc();
kputs("Check results...\n"); 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); 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(); svm_statistics();
@ -339,7 +340,7 @@ int test_init(void)
//create_kernel_task(NULL, mail_noise, NULL, NORMAL_PRIO); //create_kernel_task(NULL, mail_noise, NULL, NORMAL_PRIO);
create_kernel_task(NULL, svm_test, NULL, NORMAL_PRIO); create_kernel_task(NULL, svm_test, NULL, NORMAL_PRIO);
//create_kernel_task(NULL, pi, 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/hello", argv);
//create_user_task(NULL, "/bin/tests", argv); //create_user_task(NULL, "/bin/tests", argv);
//create_user_task(NULL, "/bin/jacobi", 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); int svm_emit_page(size_t addr, int ue);
#ifdef CONFIG_ROCKCREEK
/* @brief invalidate the cache entries for all SVM regions /* @brief invalidate the cache entries for all SVM regions
*/ */
#ifndef SVM_WB
static inline void svm_invalidate(void) static inline void svm_invalidate(void)
{ {
asm volatile ( ".byte 0x0f; .byte 0x0a;\n" ); // CL1FLUSHMB asm volatile ( ".byte 0x0f; .byte 0x0a;\n" ); // CL1FLUSHMB
} }
#else
void svm_invalidate(void);
#endif
/* *brief flushs the cache for all SVM regions /* *brief flushs the cache for all SVM regions
*/ */
#ifdef CONFIG_ROCKCREEK
#ifndef SVM_WB #ifndef SVM_WB
static inline void svm_flush(void) 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); kprintf("Map configuration registers at 0x%x\n", viraddr);
// map SCC's message passing buffers // 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); kprintf("Map message passing buffers at 0x%x\n", viraddr);
// map the FPGA registers // map the FPGA registers

View file

@ -203,9 +203,7 @@ int svm_access_request(size_t addr)
return ret; return ret;
} }
#if 0
static atomic_int32_t size_counter = ATOMIC_INIT(0); static atomic_int32_t size_counter = ATOMIC_INIT(0);
#endif
void* svm_malloc(size_t size, uint32_t consistency) void* svm_malloc(size_t size, uint32_t consistency)
{ {
@ -411,6 +409,20 @@ void svm_flush(void)
*/ */
#ifdef SVM_WB #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 ) void svm_flush( size_t phyaddr )
{ {
task_t* task = per_core(current_task); task_t* task = per_core(current_task);
@ -497,18 +509,19 @@ wrong_addr:
} }
#endif #endif
int svm_barrier(uint32_t type) int svm_barrier(uint32_t flags)
{ {
int i; int i;
RCCE_COMM *comm = &RCCE_COMM_WORLD; RCCE_COMM *comm = &RCCE_COMM_WORLD;
static int index = 0; 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_flush(0);
svm_invalidate(); svm_invalidate();
} }
#if 1 #if 0
// Lubachevsky barrier with flags // Lubachevsky barrier with flags
index = !index; index = !index;
if (incregs[AIREG1].counter > (comm->size - 2)) { if (incregs[AIREG1].counter > (comm->size - 2)) {