Changeset 140 for trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el
- Timestamp:
- Mar 9, 2011, 4:11:43 PM (14 years ago)
- Location:
- trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el
- Files:
-
- 4 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/Makefile
r137 r140 1 1 #NO_SOFT = 1 2 2 ARCH = mips32el 3 #SIMULATION_ARGS = 1000004 #SOCLIB_CC_ADD_ARGS = "-DCC_XCACHE_WRAPPER_DEBUG=1"5 SOCLIB_CC_ADD_ARGS =-t systemcass3 #SIMULATION_ARGS = 4 #SOCLIB_CC_ADD_ARGS = -t systemc_32 5 SOCLIB_CC_ADD_ARGS = -t systemcass 6 6 SOCLIB ?= $(shell soclib-cc --getpath) 7 7 export SOCLIB -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/configuration/default.cfg
r134 r140 1 1 4 2 1 1 2 3 4 64 16 3 4 4 64 16 4 88 165 4 8 16 5 6 16 256 16 4096 -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/configuration/gen_config.sh
r134 r140 1 1 #!/bin/bash 2 2 3 # archi1 archi2 archi3 archi44 archi_name=( " 00512" "16384" "01024" "02048");5 iways=( "1" "4" "16" "4" );6 isets=( "8" "64" "1" "8");7 iwords=( "16" "16" "16" "16" );8 dways=( "1" "4" "16" "4" );9 dsets=( "8" "64" "1" "8");10 dwords=( "16" "16" "16" "16" );11 memc_nways=( "4" "16" "8" "2");12 memc_nsets=( "4" "256" "64" "32" );13 memc_words=( "16" "16" "16" "16" );14 memc_heap_size=("4096" "4096" "4096" "4096" );3 # archi1 archi2 archi3 archi4 archi5 4 archi_name=( "min" "tsar" "full_assoc" "2k" "4k" ); 5 iways=( "1" "4" "16" "4" "4" ); 6 isets=( "8" "64" "1" "8" "16" ); 7 iwords=( "16" "16" "16" "16" "16" ); 8 dways=( "1" "4" "16" "4" "4" ); 9 dsets=( "8" "64" "1" "8" "16" ); 10 dwords=( "16" "16" "16" "16" "16" ); 11 memc_nways=( "4" "16" "8" "2" "16" ); 12 memc_nsets=( "4" "256" "64" "32" "64" ); 13 memc_words=( "16" "16" "16" "16" "16" ); 14 memc_heap_size=("4096" "4096" "4096" "4096" "4096" ); 15 15 16 nb_proc=( "1" "15" "+1" "4"); 17 wnwords=( "1" "16" "*2" "8"); 18 wnlines=( "1" "8" "*2" "8"); 19 wtimeout=("1" "1024" "*4" "16"); 16 nb_proc=( "1" "15" "+1" "4"); 17 nb_cpu_by_cache=("1" "15" "*2" "1"); 18 nb_cache=( "1" "16" "*2" "1"); 19 #wnwords=( "1" "16" "*2" "4"); 20 #wnlines=( "1" "8" "*2" "8"); 21 #wtimeout=( "1" "1024" "*4" "16"); 22 23 wnwords=( "4" "4" "*2" "4"); 24 wnlines=( "8" "8" "*2" "8"); 25 wtimeout=( "16" "16" "*4" "16"); 20 26 21 27 archi_default="1"; 28 gen_cfg=0; 22 29 23 30 function gen_file () 24 31 { 25 filename=$(printf " x%.2d-xcache_%s-wbuf_%.2d_%.2d_%.4d.cfg" ${1} ${archi_name[${2}]} ${3} ${4} ${5});32 filename=$(printf "archi_%s-x%.2d_%.2d_%.2d-wbuf_%.2d_%.2d_%.4d.cfg" ${archi_name[${4}]} ${1} ${2} ${3} ${5} ${6} ${7}); 26 33 27 34 echo ${filename}; 28 35 29 echo "${1}" > ${filename}; 30 echo "${iways[${2}]} ${isets[${2}]} ${iwords[${2}]}" >> ${filename}; 31 echo "${dways[${2}]} ${dsets[${2}]} ${dwords[${2}]}" >> ${filename}; 32 echo "${3} ${4} ${5}" >> ${filename}; 33 echo "${memc_nways[${2}]} ${memc_nsets[${2}]} ${memc_words[${2}]} ${memc_heap_size[${2}]}" >> ${filename}; 36 echo "${1}" > ${filename}; 37 echo "${2} ${3}" >> ${filename}; 38 echo "${iways[${4}]} ${isets[${4}]} ${iwords[${4}]}" >> ${filename}; 39 echo "${dways[${4}]} ${dsets[${4}]} ${dwords[${4}]}" >> ${filename}; 40 echo "${5} ${6} ${7}" >> ${filename}; 41 echo "${memc_nways[${4}]} ${memc_nsets[${4}]} ${memc_words[${4}]} ${memc_heap_size[${4}]}" >> ${filename}; 34 42 } 35 43 … … 41 49 echo ${filename}; 42 50 43 echo "${nb_proc[3]}" > ${filename}; 51 echo "${nb_proc[3]}" > ${filename}; 52 echo "${nb_cpu_by_cache[3]} ${nb_cache[3]}" >> ${filename}; 44 53 echo "${iways[${archi}]} ${isets[${archi}]} ${iwords[${archi}]}" >> ${filename}; 45 54 echo "${dways[${archi}]} ${dsets[${archi}]} ${dwords[${archi}]}" >> ${filename}; … … 50 59 gen_default ${archi_default}; 51 60 52 nb_archi=${#iways[*]}; 61 if test ${gen_cfg} -ne 0; then 62 nb_archi=${#iways[*]}; 63 64 num_archi=0; 65 while test ${num_archi} -lt ${nb_archi}; do 66 num_proc=${nb_proc[0]}; 67 while test ${num_proc} -le ${nb_proc[1]}; do 68 num_cpu_by_cache=${nb_cpu_by_cache[0]}; 69 while test ${num_cpu_by_cache} -le ${nb_cpu_by_cache[1]}; do 53 70 54 num_archi=0; 55 while test ${num_archi} -lt ${nb_archi}; do 56 num_proc=${nb_proc[0]}; 57 while test ${num_proc} -le ${nb_proc[1]}; do 58 num_words=${wnwords[0]}; 59 while test ${num_words} -le ${wnwords[1]}; do 60 num_lines=${wnlines[0]}; 61 while test ${num_lines} -le ${wnlines[1]}; do 62 num_timeout=${wtimeout[0]}; 63 while test ${num_timeout} -le ${wtimeout[1]}; do 71 if test $((${num_proc} * ${num_cpu_by_cache})) -le ${nb_cpu_by_cache[1]}; then 64 72 65 gen_file ${num_proc} ${num_archi} ${num_words} ${num_lines} ${num_timeout}; 73 num_cache=${nb_cache[0]}; 74 while test ${num_cache} -le ${nb_cache[1]}; do 75 76 if test ${num_cache} -ge ${num_cpu_by_cache}; then 77 if test ${num_cpu_by_cache} -ne 1 -o ${num_cache} -eq 1; then 66 78 67 num_timeout=$((${num_timeout} ${wtimeout[2]})); 79 num_words=${wnwords[0]}; 80 while test ${num_words} -le ${wnwords[1]}; do 81 num_lines=${wnlines[0]}; 82 while test ${num_lines} -le ${wnlines[1]}; do 83 num_timeout=${wtimeout[0]}; 84 while test ${num_timeout} -le ${wtimeout[1]}; do 85 86 gen_file ${num_proc} ${num_cpu_by_cache} ${num_cache} ${num_archi} ${num_words} ${num_lines} ${num_timeout}; 87 88 num_timeout=$((${num_timeout} ${wtimeout[2]})); 89 done; 90 num_lines=$((${num_lines} ${wnlines[2]})); 91 done; 92 num_words=$((${num_words} ${wnwords[2]})); 93 done; 94 fi; 95 fi; 96 num_cache=$((${num_cache} ${nb_cache[2]})); 68 97 done; 69 num_lines=$((${num_lines} ${wnlines[2]})); 98 fi; 99 num_cpu_by_cache=$((${num_cpu_by_cache} ${nb_cpu_by_cache[2]})); 70 100 done; 71 num_ words=$((${num_words} ${wnwords[2]}));101 num_proc=$((${num_proc} ${nb_proc[2]})); 72 102 done; 73 num_ proc=$((${num_proc} ${nb_proc[2]}));103 num_archi=$((${num_archi}+1)); 74 104 done; 75 num_archi=$((${num_archi}+1)); 76 done; 105 fi; 77 106 78 -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/segmentation.h
r134 r140 35 35 #define MC_M_SIZE 0x000F0000 36 36 37 #define MC_R_BASE 0x20200000 38 #define MC_R_SIZE 0x00000008 39 40 #define MC_U_BASE 0x30000000 41 #define MC_U_SIZE 0x000F0000 42 37 43 ////////////////////////////////////////////////////////// 38 44 // System devices … … 51 57 #define C_PROC_SIZE 0x00000010 52 58 #define C_PROC_SPAN 0x01000000 53 54 #define MC_R_BASE 0x2020000055 #define MC_R_SIZE 0x0000000856 57 //#define C_MC_M_BASE 0x0020000058 //#define C_MC_M_SIZE 0x0000000859 60 //#define XRAM_BASE 0xB020000061 //#define XRAM_SIZE 0x0000000862 63 //#define CLEANUP_OFFSET 0x20200000 -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/Makefile
r134 r140 1 ADD_OBJS = stdio.o stdlib.o exception.o system.o \ 2 $(patsubst %.c,%.o,$(wildcard *.c)) \ 3 $(patsubst common/%.c,common/%.o,$(wildcard common/*.c)) \ 4 $(patsubst irq/%.c,irq/%.o,$(wildcard irq/*.c)) \ 5 $(patsubst benchmark/%.c,benchmark/%.o,$(wildcard benchmark/*.c)) \ 1 ADD_OBJS = \ 2 $(patsubst self_code_modifying/%.c,self_code_modifying/%.o,$(wildcard self_code_modifying/*.c)) \ 6 3 $(patsubst matrix_multiplication/%.c,matrix_multiplication/%.o,$(wildcard matrix_multiplication/*.c)) \ 7 4 $(patsubst sort/%.c,sort/%.o,$(wildcard sort/*.c)) \ 8 $(patsubst dhrystone/%.c,dhrystone/%.o,$(wildcard dhrystone/*.c)) 5 $(patsubst dhrystone/%.c,dhrystone/%.o,$(wildcard dhrystone/*.c)) \ 6 $(patsubst benchmark/%.c,benchmark/%.o,$(wildcard benchmark/*.c)) \ 7 $(patsubst irq/%.c,irq/%.o,$(wildcard irq/*.c)) \ 8 $(patsubst common/%.c,common/%.o,$(wildcard common/*.c)) \ 9 $(patsubst %.c,%.o,$(wildcard *.c)) \ 10 stdio.o stdlib.o exception.o system.o 11 9 12 10 13 ADD_CFLAGS = 14 ADD_LDFLAGS = 11 15 SOCLIB ?= $(shell soclib-cc --getpath) 12 16 -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/benchmark/benchmark.c
r134 r140 6 6 void benchmark (void) 7 7 { 8 /* if(procnum() != 0) */ 9 /* EXIT(0); */ 10 11 int result = 0; 8 int result = 0; 9 int num_cpu = procnum(); 12 10 int cycle_begin = cycle_begin = cpu_cycles(); 13 14 switch (procnum()) 15 { 16 default : 17 { 11 12 if (num_cpu < BENCHMARK_NB_THREAD) 13 switch (num_cpu) 14 { 15 default : 16 { 18 17 #if BENCHMARK_MATRIX_MULTIPLICATION_MT 19 int result_mm_mt = benchmark_matrix_multiplication_mt();20 result += result_mm_mt;18 int result_mm_mt = benchmark_matrix_multiplication_mt(); 19 result += result_mm_mt; 21 20 #endif 22 21 #if BENCHMARK_DHRYSTONE 23 int result_dhrystone = benchmark_dhrystone();24 result += result_dhrystone;22 int result_dhrystone = benchmark_dhrystone(); 23 result += result_dhrystone; 25 24 #endif 26 #if BENCHMARK_SORT 27 int result_sort = benchmark_sort(); 28 result += result_sort; 25 #if BENCHMARK_SORT_ALL 26 int result_sort_all = benchmark_sort_all(); 27 result += result_sort_all; 28 #endif 29 #if BENCHMARK_SORT_BUBBLE 30 int result_sort_bubble = benchmark_sort_bubble(); 31 result += result_sort_bubble; 32 #endif 33 #if BENCHMARK_SORT_INSERTION 34 int result_sort_insertion = benchmark_sort_insertion(); 35 result += result_sort_insertion; 36 #endif 37 #if BENCHMARK_SORT_SELECTION 38 int result_sort_selection = benchmark_sort_selection(); 39 result += result_sort_selection; 40 #endif 41 #if BENCHMARK_SORT_SHELL 42 int result_sort_shell = benchmark_sort_shell(); 43 result += result_sort_shell; 29 44 #endif 30 45 #if BENCHMARK_MATRIX_MULTIPLICATION_ST 31 int result_mm_st = benchmark_matrix_multiplication_st();32 result += result_mm_st;46 int result_mm_st = benchmark_matrix_multiplication_st(); 47 result += result_mm_st; 33 48 #endif 34 35 printf("\n"); 36 printf("--------------------------------\n"); 37 printf( "Partial results :\n"); 49 #if BENCHMARK_SELF_CODE_MODIFYING 50 int result_self_code_modifying = benchmark_self_code_modifying(); 51 result += result_self_code_modifying; 52 #endif 53 54 printf("\n"); 55 printf("--------------------------------\n"); 56 printf( "Partial results :\n"); 38 57 #if BENCHMARK_MATRIX_MULTIPLICATION_MT 39 printf(" * MM MT: %d\n",result_mm_mt);58 printf(" * MM MT : %d\n",result_mm_mt); 40 59 #endif 41 60 #if BENCHMARK_DHRYSTONE 42 printf(" * DHRYSTONE: %d\n",result_dhrystone);61 printf(" * DHRYSTONE : %d\n",result_dhrystone); 43 62 #endif 44 #if BENCHMARK_SORT 45 printf(" * SORT : %d\n",result_sort); 63 #if BENCHMARK_SORT_ALL 64 printf(" * SORT_ALL : %d\n",result_sort_all); 65 #endif 66 #if BENCHMARK_SORT_BUBBLE 67 printf(" * SORT_BUBBLE : %d\n",result_sort_bubble); 68 #endif 69 #if BENCHMARK_SORT_INSERTION 70 printf(" * SORT_INSERTION : %d\n",result_sort_insertion); 71 #endif 72 #if BENCHMARK_SORT_SELECTION 73 printf(" * SORT_SELECTION : %d\n",result_sort_selection); 74 #endif 75 #if BENCHMARK_SORT_SHELL 76 printf(" * SORT_SHELL : %d\n",result_sort_shell); 46 77 #endif 47 78 #if BENCHMARK_MATRIX_MULTIPLICATION_ST 48 printf(" * MM ST: %d\n",result_mm_st);79 printf(" * MM ST : %d\n",result_mm_st); 49 80 #endif 50 printf("--------------------------------\n"); 51 break; 81 #if BENCHMARK_SELF_CODE_MODIFYING 82 printf(" * SELF_CODE_MODIFYING : %d\n",result_self_code_modifying); 83 #endif 84 printf("--------------------------------\n"); 85 break; 86 } 52 87 } 53 }54 88 55 89 printf("\n"); -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/benchmark/benchmark.h
r134 r140 5 5 6 6 void benchmark (void); 7 int benchmark_sort (void); 7 int benchmark_sort_all (void); 8 int benchmark_sort_bubble (void); 9 int benchmark_sort_insert (void); 10 int benchmark_sort_selection (void); 11 int benchmark_sort_shell (void); 8 12 int benchmark_dhrystone (void); 9 13 int benchmark_matrix_multiplication_st(void); -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/benchmark/benchmark_matrix_multiplication.c
r134 r140 127 127 /* matrix_multiplication_print(matrix_local_d, size); */ 128 128 129 #if VERIFICATION_MATRIX_MULTIPLICATION 129 130 printf(" * Verification... "); 130 131 131 132 benchmark_matrix_validation (matrix_local_d, size); 133 #endif 132 134 133 135 printf(" * Free...\n"); … … 230 232 if (matrix_nb_thread_stop == matrix_nb_thread_start) 231 233 { 234 #if VERIFICATION_MATRIX_MULTIPLICATION 232 235 printf(" * Verification... "); 233 236 234 237 benchmark_matrix_validation (matrix_global_d, size); 238 #endif 235 239 236 240 printf(" * Free...\n"); -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/benchmark/benchmark_sort.c
r134 r140 9 9 static uint32_t sort_lock; 10 10 11 int _benchmark_sort (unsigned int size) 11 int _benchmark_sort (sort_t sort_type, 12 unsigned int size) 13 { 14 printf(" * Size : %d\n",size); 15 16 unsigned int* SortArray; 17 18 int cycle_begin; 19 20 int num_cpu=procnum(); 21 22 printf(" * Algo : %s\n",sort_str(sort_type)); 23 24 printf(" * Init...\n"); 25 26 lock_lock(&sort_lock); 27 SortArray = (unsigned int*) malloc(size*sizeof(unsigned int)); 28 lock_unlock(&sort_lock); 29 30 unsigned int seed = num_cpu; 31 int i; 32 for (i=0; i<size; ++i) 33 { 34 seed = seed * 1103515245 + 12345; 35 SortArray[i] = seed&0xff; 36 } 37 printf(" * Sort... \n"); 38 39 cycle_begin = cpu_cycles(); 40 sort((unsigned int *) (SortArray), (unsigned int) size, sort_type); 41 int cycle_exec = cpu_cycles()-cycle_begin; 42 43 printf(" * Executed in %d cycles\n",cycle_exec); 44 45 int result = cycle_exec; 46 47 #if VERIFICATION_SORT 48 printf(" * Verification... "); 49 50 for (i = 1; i < size; i++) 51 { 52 /* printf("%d ",SortArray[i-1]); */ 53 54 if (SortArray[i] < SortArray[i-1]) 55 { 56 printf("KO !!!\n"); 57 EXIT(1); 58 } 59 } 60 printf("OK\n"); 61 #endif 62 63 free (SortArray); 64 65 return result; 66 } 67 68 int _benchmark_sort_all (unsigned int size) 69 { 70 printf("\n"); 71 printf("================================\n"); 72 printf("Benchmark Sort (ALL)\n"); 73 printf("================================\n"); 74 printf("\n"); 75 76 int result = 0; 77 int num_cpu=procnum(); 78 sort_t _sort_type; 79 const sort_t nb_sort_type = 4; 80 81 for (_sort_type=0; _sort_type < nb_sort_type; _sort_type++) 82 result += _benchmark_sort((_sort_type+num_cpu)%nb_sort_type,size); 83 84 return result; 85 } 86 87 int _benchmark_sort_one (sort_t sort_type, 88 unsigned int size) 12 89 { 13 90 printf("\n"); … … 17 94 printf("\n"); 18 95 19 printf(" * Size : %d\n",size); 20 21 unsigned int* SortArray; 22 23 int cycle_begin, result; 24 25 result = 0; 26 27 int p=procnum(); 28 29 sort_t _sort_type; 30 const sort_t nb_sort_type = 4; 31 32 for (_sort_type=0; _sort_type < nb_sort_type; _sort_type++) 33 { 34 sort_t sort_type = (_sort_type+p)%nb_sort_type; 35 36 printf(" * Algo : %s\n",sort_str(sort_type)); 37 38 printf(" * Init...\n"); 39 40 lock_lock(&sort_lock); 41 SortArray = (unsigned int*) malloc(size*sizeof(unsigned int)); 42 lock_unlock(&sort_lock); 43 44 unsigned int seed = p; 45 int i; 46 for (i=0; i<size; ++i) 47 { 48 seed = seed * 1103515245 + 12345; 49 SortArray[i] = seed&0xff; 50 } 51 printf(" * Sort... \n"); 52 53 cycle_begin = cpu_cycles(); 54 sort((unsigned int *) (SortArray), (unsigned int) size, sort_type); 55 int cycle_exec = cpu_cycles()-cycle_begin; 56 57 printf(" * Executed in %d cycles\n",cycle_exec); 58 59 result += cycle_exec; 60 61 printf(" * Verification... "); 62 63 for (i = 1; i < size; i++) 64 { 65 /* printf("%d ",SortArray[i-1]); */ 66 67 if (SortArray[i] < SortArray[i-1]) 68 { 69 printf("KO !!!\n"); 70 EXIT(1); 71 } 72 } 73 printf("OK\n"); 74 75 free (SortArray); 76 77 } 78 79 return result; 96 return _benchmark_sort(sort_type,size); 80 97 } 81 98 82 int benchmark_sort (void) { return _benchmark_sort(SORT_SIZE); } 83 84 99 int benchmark_sort_all (void) { return _benchmark_sort_all(SORT_ALL_SIZE); } 100 int benchmark_sort_bubble (void) { return _benchmark_sort_one(SORT_BUBBLE ,SORT_BUBBLE_SIZE ); } 101 int benchmark_sort_insertion (void) { return _benchmark_sort_one(SORT_INSERTION,SORT_INSERTION_SIZE); } 102 int benchmark_sort_selection (void) { return _benchmark_sort_one(SORT_SELECTION,SORT_SELECTION_SIZE); } 103 int benchmark_sort_shell (void) { return _benchmark_sort_one(SORT_SHELL ,SORT_SHELL_SIZE ); } -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/common/common.c
r134 r140 41 41 } 42 42 43 pause(); 44 43 45 while(1); 44 46 } -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/define.h
r134 r140 3 3 4 4 // List of benchmark 5 #define BENCHMARK_NB_THREAD 4 6 5 7 #define BENCHMARK_DHRYSTONE 0 6 #define BENCHMARK_SORT 0 8 #define BENCHMARK_SORT_ALL 0 9 #define BENCHMARK_SORT_BUBBLE 0 10 #define BENCHMARK_SORT_INSERTION 0 11 #define BENCHMARK_SORT_SELECTION 0 12 #define BENCHMARK_SORT_SHELL 1 7 13 #define BENCHMARK_MATRIX_MULTIPLICATION_ST 0 8 #define BENCHMARK_MATRIX_MULTIPLICATION_MT 1 14 #define BENCHMARK_MATRIX_MULTIPLICATION_MT 0 15 #define BENCHMARK_SELF_CODE_MODIFYING 0 9 16 10 17 #define VERBOSE_SORT 0 11 18 19 #define VERIFICATION_SORT 0 20 #define VERIFICATION_MATRIX_MULTIPLICATION 0 21 12 22 // Benchmark size 13 23 #define DHRYSTONE_NB_RUNS 5000 14 #define SORT_SIZE 850 24 #define SORT_ALL_SIZE 1000 25 #define SORT_BUBBLE_SIZE 1500 26 #define SORT_INSERTION_SIZE 2300 27 #define SORT_SELECTION_SIZE 1600 28 #define SORT_SHELL_SIZE 4000 15 29 #define MATRIX_MULTIPLICATION_ST_SIZE 50 16 #define MATRIX_MULTIPLICATION_MT_SIZE 7530 #define MATRIX_MULTIPLICATION_MT_SIZE 96 17 31 #define MATRIX_MULTIPLICATION_MT_LOCK_BY_LINE 1 32 #define SELF_CODE_MODIFYING_NB_RUNS 10 18 33 19 34 // Timer configuration -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/dhrystone/dhry21a.c
r134 r140 76 76 DOUBLE dtime(); 77 77 78 One_Fifty Int_1_Loc ;79 REG One_Fifty Int_2_Loc ;78 One_Fifty Int_1_Loc = 0; 79 REG One_Fifty Int_2_Loc = 0; 80 80 One_Fifty Int_3_Loc; 81 81 REG char Ch_Index; -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/soft/matrix_multiplication/matrix_multiplication.c
r134 r140 2 2 #include "stdio.h" 3 3 #include "system.h" 4 #include "stdint.h" 4 5 5 6 void matrix_multiplication_st (int ** a, … … 8 9 unsigned int n) 9 10 { 10 int x, y;11 uint32_t x, y; 11 12 12 13 for (x=0; x<n; ++x) … … 16 17 for (y=0; y<n; ++y) 17 18 { 18 int i;19 uint32_t i; 19 20 20 21 int tmp = 0; … … 28 29 } 29 30 30 static int lock;31 static int next;31 static uint32_t lock; 32 static uint32_t next; 32 33 33 34 void matrix_multiplication_mt (int ** a, … … 37 38 int lock_by_line) 38 39 { 39 int x, y;40 uint32_t x, y; 40 41 41 42 while (1) -
trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/top.cpp
r137 r140 31 31 # define PARAM_VCI 4,8,32,1,1,1,8,4,4,1 32 32 33 # define USE_OLD_XCACHE 0 34 # define USE_VGMN 1 33 35 # define NB_PROC_MIN 1 34 36 # define NB_PROC_MAX 15 35 // min_latency,fifo_depth37 // fifo_depth 36 38 # define PARAM_RING_P 2 37 39 # define PARAM_RING_C 2 38 40 # define PARAM_RING_X 2 39 41 // pti , hwi , wti, irq 40 # define PARAM_XICU nb_proc, nb_proc, 0 , nb_proc 42 # define PARAM_XICU nb_proc*nb_cpu_by_cache, nb_proc*nb_cpu_by_cache, 0 , nb_proc*nb_cpu_by_cache 43 //#define PARAM_XICU nb_proc, nb_proc, 0 , nb_proc 41 44 42 45 // * Debug … … 46 49 47 50 // * Simulation 48 # define FILE_DEFAULT "configuration/default.cfg"51 # define CONFIG_DEFAULT "configuration/default.cfg" 49 52 # define NCYCLES_DEFAULT 0 50 53 # define SOFT_DEFAULT "soft/bin.soft" … … 53 56 void usage (char * funcname) 54 57 { 55 std::cout << funcname << " [nb_cycle [file [soft]]] " << std::endl; 56 std::cout << " * nb_cycle : number of simulated cycle, if 0 then no stop condition. (default : " << NCYCLES_DEFAULT << " cycle(s))" << std::endl; 57 std::cout << " * file : Configuration file : nb_proc, iways, isets, iwords, dways, dsets, dwords, wnwords, wnlines, wtimeout, memc_nways, memc_nsets, memc_words, memc_heap_size. (default : " << FILE_DEFAULT << " cycle(s))" << std::endl; 58 std::cout << " * soft : software executed by this platforms. (default : \"" << SOFT_DEFAULT << "\")" << std::endl; 58 std::cout << funcname << " [option] " << std::endl; 59 std::cout << " * -NCYCLES int : number of simulated cycle, if 0 then no stop condition." << std::endl; 60 std::cout << " default : " << NCYCLES_DEFAULT << " cycle(s)" << std::endl; 61 std::cout << " * -CFG string : configuration file" << std::endl; 62 std::cout << " - nb_proc," << std::endl; 63 std::cout << " - nb_cpu_by_cache, nb_dcache," << std::endl; 64 std::cout << " - iways, isets, iwords," << std::endl; 65 std::cout << " - dways, dsets, dwords," << std::endl; 66 std::cout << " - wnwords, wnlines, wtimeout," << std::endl; 67 std::cout << " - memc_nways, memc_nsets, memc_words, memc_heap_size." << std::endl; 68 std::cout << " default : \"" << CONFIG_DEFAULT << "\"" << std::endl; 69 std::cout << " * -SOFT string : software executed by this platform." << std::endl; 70 std::cout << " default : \"" << SOFT_DEFAULT << "\"" << std::endl; 59 71 60 72 exit(1); … … 63 75 int _main(int argc, char *argv[]) 64 76 { 65 if ((argc < 1) or (argc > 4)) 66 { 67 std::cout << "Invalid parameters number." << std::endl; 68 usage(argv[0]); 69 } 70 71 #if not SOCVIEW 72 int ncycles = 0; 73 74 if (argc >= 2) 75 ncycles = std::atoi(argv[1]); 76 else 77 ncycles = NCYCLES_DEFAULT; 77 int ncycles = NCYCLES_DEFAULT; 78 char * config = CONFIG_DEFAULT; 79 char * soft = SOFT_DEFAULT; 80 81 if (argc > 1) 82 { 83 for( int n=1 ; n<argc ; n=n+2 ) 84 { 85 if( (strcmp(argv[n],"-NCYCLES") == 0) && (n+1<argc) ) 86 { 87 ncycles = atoi(argv[n+1]); 88 } 89 else if( (strcmp(argv[n],"-CFG") == 0) && (n+1<argc) ) 90 { 91 // strcpy(config, argv[n+1]); 92 config = argv[n+1]; 93 } 94 else if( (strcmp(argv[n],"-SOFT") == 0) && (n+1<argc) ) 95 { 96 // strcpy(soft, argv[n+1]); 97 soft = argv[n+1]; 98 } 99 else 100 { 101 usage(argv[0]); 102 } 103 } 104 } 78 105 79 106 if (ncycles == 0) 80 107 ncycles = -1; 81 #endif82 108 83 109 uint32_t nb_proc; 110 uint32_t nb_cpu_by_cache; 111 uint32_t nb_dcache; 84 112 uint32_t iways, isets, iwords; 85 113 uint32_t dways, dsets, dwords; … … 88 116 89 117 std::ifstream inFile; 90 const char * filename = (argc>=3)?argv[2]:FILE_DEFAULT;118 const char * filename = config; 91 119 92 120 inFile.open(filename); … … 102 130 nb_proc =std::atoi(str.c_str()); 103 131 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 132 nb_cpu_by_cache =std::atoi(str.c_str()); 133 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 134 nb_dcache =std::atoi(str.c_str()); 135 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} 104 136 iways =std::atoi(str.c_str()); 105 137 if (not (inFile >> str)){std::cout << "Invalid parameters number in configuration file." << std::endl; usage(argv[0]);} … … 128 160 memc_heap_size =std::atoi(str.c_str()); 129 161 130 if (( nb_proc<NB_PROC_MIN) or131 ( nb_proc>NB_PROC_MAX))162 if (((nb_proc*nb_cpu_by_cache)<NB_PROC_MIN) or 163 ((nb_proc*nb_cpu_by_cache)>NB_PROC_MAX)) 132 164 { 133 165 std::cout << "Parameters nb_proc is out of bound." << std::endl; … … 135 167 } 136 168 137 char * soft;138 139 if (argc >= 4)140 soft = argv[3];141 else142 soft = SOFT_DEFAULT;143 144 169 std::cout << " * Parameters : " << std::endl; 145 170 std::cout << " * nb_proc : " << nb_proc << std::endl; 171 std::cout << " * nb_cpu_by_cache : " << nb_cpu_by_cache << std::endl; 172 std::cout << " * nb_dcache : " << nb_dcache << std::endl; 146 173 std::cout << " * iways : " << iways << std::endl; 147 174 std::cout << " * isets : " << isets << std::endl; … … 180 207 maptabp.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(2), false, true, IntTab(0))); 181 208 maptabp.add(Segment("mc_m" , MC_M_BASE , MC_M_SIZE , IntTab(2), true)); 182 // maptabp.add(Segment("ptba" , PTD_ADDR , TAB_SIZE , IntTab(2), true)); 209 // maptabp.add(Segment("mc_u" , MC_U_BASE , MC_U_SIZE , IntTab(2), false)); 210 //maptabp.add(Segment("ptba" , PTD_ADDR , TAB_SIZE , IntTab(2), true)); 183 211 maptabp.add(Segment("xicu" , XICU_BASE , XICU_SIZE , IntTab(3), false)); 184 212 maptabp.add(Segment("simhelper", SIMHELPER_BASE, SIMHELPER_SIZE, IntTab(4), false)); … … 187 215 188 216 soclib::common::MappingTable maptabc(32, IntTab(8), IntTab(8), 0x00300000); 217 // for (uint32_t i=0; i<nb_proc; ++i) 218 // for (uint32_t j=0; j<nb_cpu_by_cache; ++j) 219 // { 220 // std::ostringstream str; 221 // str << "c_proc_" << i << "_" << j; 222 // maptabc.add(Segment(str.str().c_str(), C_PROC_BASE+(i*nb_cpu_by_cache+j)*C_PROC_SPAN, C_PROC_SIZE , IntTab(i), false, true, IntTab(i))); 223 // } 189 224 for (uint32_t i=0; i<nb_proc; ++i) 190 225 { … … 195 230 maptabc.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(nb_proc), false, false)); 196 231 maptabc.add(Segment("mc_m" , MC_M_BASE , MC_M_SIZE , IntTab(nb_proc), false, false)); 232 // maptabc.add(Segment("mc_u" , MC_U_BASE , MC_U_SIZE , IntTab(nb_proc), false, false)); 197 233 maptabc.add(Segment("reset" , RESET_BASE , RESET_SIZE , IntTab(nb_proc), false, false)); 198 234 maptabc.add(Segment("excep" , EXCEP_BASE , EXCEP_SIZE , IntTab(nb_proc), false, false)); 199 235 maptabc.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(nb_proc), false, false)); 200 //maptabc.add(Segment("ptba" , PTD_ADDR , TAB_SIZE , IntTab(nb_proc), false, false));236 //maptabc.add(Segment("ptba" , PTD_ADDR , TAB_SIZE , IntTab(nb_proc), false, false)); 201 237 202 238 std::cout << maptabc << std::endl; … … 204 240 soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x00300000); 205 241 maptabx.add(Segment("xram" , MC_M_BASE , MC_M_SIZE , IntTab(0), false)); 242 // maptabx.add(Segment("uram" , MC_U_BASE , MC_U_SIZE , IntTab(0), false)); 206 243 maptabx.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(0), false)); 207 244 maptabx.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(0), false)); … … 215 252 sc_signal<bool> signal_resetn("resetn"); 216 253 217 sc_signal<bool> ** signal_proc_it = soclib::common::alloc_elems<sc_signal<bool> >("proc_it", nb_proc, 6);254 sc_signal<bool> *** signal_proc_it = soclib::common::alloc_elems<sc_signal<bool> >("proc_it", nb_proc, nb_cpu_by_cache, 6); 218 255 219 256 soclib::caba::VciSignals<vci_param> * signal_vci_ini_rw_proc = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("vci_ini_rw_proc", nb_proc); … … 236 273 soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc("vci_tgt_cleanup_memc"); 237 274 238 sc_signal<bool> * signal_tty_irq = soclib::common::alloc_elems<sc_signal<bool> >("signal_tty_irq", nb_proc);275 sc_signal<bool> ** signal_tty_irq = soclib::common::alloc_elems<sc_signal<bool> >("signal_tty_irq", nb_proc, nb_cpu_by_cache); 239 276 240 277 soclib::common::Loader loader(soft); … … 245 282 for (uint32_t i=0; i<nb_proc; ++i) 246 283 { 284 uint32_t num_cpu = i*nb_cpu_by_cache; 285 247 286 std::ostringstream str; 248 str << "proc_" << i; 249 250 proc[i] = new soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > (str.str().c_str(), i, maptabp, maptabc, IntTab(i),IntTab(i),IntTab(i) 287 str << "proc_" << num_cpu; 288 289 proc[i] = new soclib::caba::VciCcXCacheWrapperV4<vci_param, proc_iss > (str.str().c_str(), num_cpu, maptabp, maptabc, IntTab(i),IntTab(i),IntTab(i) 290 #if USE_OLD_XCACHE 251 291 ,iways, isets, iwords 252 292 ,dways, dsets, dwords 253 ,wnwords, wnlines, wtimeout 293 #else 294 ,nb_cpu_by_cache 295 ,nb_dcache 296 ,iways*nb_cpu_by_cache, isets, iwords 297 ,dways*nb_cpu_by_cache, dsets, dwords 298 ,wnwords, wnlines*nb_cpu_by_cache, wtimeout 299 #endif 254 300 ); 255 301 … … 267 313 // x_init c_init p_tgt c_tgt 268 314 soclib::caba::VciMemCacheV4<vci_param> 269 315 memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(nb_proc),IntTab(2),IntTab(nb_proc), memc_nways, memc_nsets, memc_words, memc_heap_size); 270 316 271 317 std::vector<std::string> tty_name; 272 for (uint32_t i=0; i<nb_proc ; ++i)318 for (uint32_t i=0; i<nb_proc*nb_cpu_by_cache; ++i) 273 319 { 274 320 std::ostringstream str; … … 308 354 { 309 355 proc[i]->p_clk(signal_clk); 310 proc[i]->p_resetn(signal_resetn); 311 proc[i]->p_irq[0](signal_proc_it[i][0]); 312 proc[i]->p_irq[1](signal_proc_it[i][1]); 313 proc[i]->p_irq[2](signal_proc_it[i][2]); 314 proc[i]->p_irq[3](signal_proc_it[i][3]); 315 proc[i]->p_irq[4](signal_proc_it[i][4]); 316 proc[i]->p_irq[5](signal_proc_it[i][5]); 356 proc[i]->p_resetn(signal_resetn); 357 for (uint32_t j=0; j<nb_cpu_by_cache; ++j) 358 { 359 proc[i]->p_irq[j][0](signal_proc_it[i][j][0]); 360 proc[i]->p_irq[j][1](signal_proc_it[i][j][1]); 361 proc[i]->p_irq[j][2](signal_proc_it[i][j][2]); 362 proc[i]->p_irq[j][3](signal_proc_it[i][j][3]); 363 proc[i]->p_irq[j][4](signal_proc_it[i][j][4]); 364 proc[i]->p_irq[j][5](signal_proc_it[i][j][5]); 365 } 317 366 proc[i]->p_vci_ini_rw(signal_vci_ini_rw_proc[i]); 318 367 proc[i]->p_vci_ini_c(signal_vci_ini_c_proc[i]); … … 328 377 tty.p_vci(signal_vci_tgt_tty); 329 378 for (uint32_t i=0; i<nb_proc; ++i) 330 tty.p_irq[i](signal_tty_irq[i]); 379 for (uint32_t j=0; j<nb_cpu_by_cache; ++j) 380 tty.p_irq[i*nb_cpu_by_cache+j](signal_tty_irq[i][j]); 331 381 332 382 xicu.p_clk(signal_clk); … … 334 384 xicu.p_vci(signal_vci_tgt_xicu); 335 385 for (uint32_t i=0; i<nb_proc; ++i) 336 { 337 xicu.p_hwi[i](signal_tty_irq[i]); 338 xicu.p_irq[i](signal_proc_it[i][0]); 339 } 386 for (uint32_t j=0; j<nb_cpu_by_cache; ++j) 387 { 388 xicu.p_hwi[i*nb_cpu_by_cache+j](signal_tty_irq[i][j]); 389 xicu.p_irq[i*nb_cpu_by_cache+j](signal_proc_it[i][j][0]); 390 } 340 391 341 392 simhelper.p_clk(signal_clk); … … 392 443 debug(); 393 444 #elif DEBUG_TOP 394 for (int32_t i=0; i<ncycles; ++i) 445 446 uint32_t num_cycle=0; 447 while(1) 395 448 { 396 449 std::cout << std::endl 397 << std::dec << "===== [ cycle " << i<< " ]======" << std::endl450 << std::dec << "===== [ cycle " << num_cycle << " ]======" << std::endl 398 451 << std::endl; 399 452 … … 402 455 // for (uint32_t i=0; i<nb_proc; ++i) 403 456 // proc[i]->print_trace(1); 457 num_cycle ++; 404 458 } 405 459 #else … … 418 472 proc[i]->print_stats(); 419 473 420 soclib::common::dealloc_elems<sc_signal<bool> >(signal_tty_irq , nb_proc );474 soclib::common::dealloc_elems<sc_signal<bool> >(signal_tty_irq , nb_proc, nb_cpu_by_cache); 421 475 soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_tgt_proc , nb_proc); 422 476 soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_ini_c_proc , nb_proc); 423 477 soclib::common::dealloc_elems<soclib::caba::VciSignals<vci_param> >(signal_vci_ini_rw_proc , nb_proc); 424 soclib::common::dealloc_elems<sc_signal<bool> >(signal_proc_it , nb_proc, 6);478 soclib::common::dealloc_elems<sc_signal<bool> >(signal_proc_it , nb_proc, nb_cpu_by_cache, 6); 425 479 426 480 for (uint32_t i=0; i<nb_proc; ++i)
Note: See TracChangeset
for help on using the changeset viewer.