static void mx_cpu_stop(void *p) { unsigned cpu = (unsigned)p; unsigned long run_stall_mask = get_er(MPSCORE); set_er(run_stall_mask | (1u << cpu), MPSCORE); pr_debug("%s: cpu: %d, run_stall_mask: %lx ---> %lx\n", __func__, cpu, run_stall_mask, get_er(MPSCORE)); }
int main(void){ int i,j,k,step; char filename[20]="matrix1.txt", filenamep[20]="matrixp.txt",filenameq[20]="matrixq.txt"; struct matrix *p,*q,*r; double err; FILE *gp; srand((unsigned)time(NULL)); r=mat_read(filename); M=r->row;N=r->col; p=mat_read(filenamep); q=mat_read(filenameq); printf("R\n");mat_print(r); printf("P\n");mat_print(p); printf("Q\n");mat_print(q); for(step=0;step<STEP;step++){ for(i=0;i<M;i++){ for(j=0;j<N;j++){ if(*(r->element+j+i*r->col)==0)continue; err=rating_er(*(r->element+j+i*r->col),p,q,i,j); for(k=0;k<K;k++){ *(p->element+k+i*p->col) +=ALPHA*(2*err* *(q->element+j+k*q->col)-BETA* *(p->element+k+i*p->col)); *(q->element+j+k*q->col) +=ALPHA*(2*err* *(p->element+k+i*p->col)-BETA* *(q->element+j+k*q->col)); } } } if((step%100)==0){ //printf("%f \n",get_er(r,p,q)); if(get_er(r,p,q)<THT){printf("step %d\n",step);break;} } } printf("========================\n"); printf("error=%f\n",get_er(r,p,q)); printf("P\n"); mat_print(p); printf("Q\n");mat_print(q); printf("P*Q\n");mat_print(mat_mul(p,q)); return(0); }
static inline int get_core_id(void) { /* Bits 0...18 of SYSCFGID contain the core id */ unsigned int core_id = get_er(SYSCFGID); return core_id & 0x3fff; }
static inline unsigned int get_core_count(void) { /* Bits 18..21 of SYSCFGID contain the core count minus 1. */ unsigned int syscfgid = get_er(SYSCFGID); return ((syscfgid >> 18) & 0xf) + 1; }