Exemplo n.º 1
0
int main()
{
    int n;
    printf("n = ");
    scanf("%d", &n);
    int **a;
    int **b;
    int **c;
    
    allocate(&a,n);
    allocate(&b,n);
    allocate(&c,n); 
    getdata(a,n);
    getdata(b,n);
    mult(a,b,c,n);
    for(int i=0;i<n;i++)
    {
            for(int j=0;j<n;j++)
             {
                    printf("%d\t",c[i][j]);
             }
             printf("\n");
    }
    fre(a,n);
    fre(b,n);
    fre(c,n);
    getch();
}
Exemplo n.º 2
0
int main()
{
	double t = clock();
	int a;
	for (int e = 10 ; e < 200000 ; e++){
		a = fre(e);
		if (a ==4){
			e++;
			a = fre(e);
			if (a == 4){
				e++;
				a = fre(e);
				if (a == 4){
					e++;
					a = fre(e);
					if (a == 4){
						std::cout << e-3 << "  " << e-2 << "  " << e-1 << "  " << e << std::endl;
						goto po;
					}
				}
			}
		}
	}
	po:
	std::cout << (clock() - t)/(double)(CLOCKS_PER_SEC) << "sec" << std::endl;
	return 0;
}
Exemplo n.º 3
0
int main(int argc, char* argv[])
{
  int i,j;
  int req[M];
  if(argc > 1)
    srand(atoi(argv[1]));

  if(secure() == 0)
    return -1;

      pp();

  while(1){
    for(i = 0; i < N; i++){
      if(finish(i))
        continue;
      printf("*******proc %d running******\n",i);
      for(j = 0; j < M; j++){
        if(need[i*M+j] == 0 || ava[j] == 0)
          req[j] = 0;
        else{
          int k=MIN(ava[j],need[i*M+j]);
          req[j] = (rand() % k) + 1;
        }
        alloc[i*M+j] += req[j];
        need[i*M+j] -= req[j];
        ava[j] -= req[j];
      }
      
      if(secure() == 0){
        for(j = 0; j < M; j++){
          alloc[i*M+j] -= req[j];
          need[i*M+j] += req[j];
          ava[j] += req[j];
        }
        printf("proc %d sleeping\n\n",i);
        //pp();  
      }else{
        if(finish(i))
          fre(i);
        printf("%d %d %d to proc %d\n\n",req[0],req[1],req[2],i);
        pp();
      }
      
      printf("\n");
      //getchar();
    }//for N

    if(ava[0] == 10 && ava[1] == 5 && ava[2] == 7)
      break;
  }

  return 0;
}
Exemplo n.º 4
0
int main()
{
    list *a = malloc(sizeof(list));
    list *b;

    a->i = 1;
    b = create(b,2);
    b->prev = a;
    b->next = NULL;
    a->prev = NULL;
    a->next = b;
    printf("%d",a->i);
    fre(a);
    return 0;
}
Exemplo n.º 5
0
struct foo *foo_alloc(void)
{
    struct foo  *fp;
    int         idx;
    
    if ((fp = malloc(sizeof(struct foo))) != NULL)
    {
        fp->f_count = 1;
        if (pthread_mutex_init(&fp->f_lock, NULL) != 0)
        {
            fre(fp);
            return(NULL);
        }
        idx = HASH(fp);
        pthread_mutex_lock(&hashlock);
        fp->f_next = fh[idx];
        fh[idx] = fp;
        pthread_mutex_lock(&fp->f_lock);
        pthread_mutex_unlock(&hashlock);
        /* ... countinue initialization ... */
        pthread_mutex_unlock(&fp->f_lock);
    }
    return(fp);
}
Exemplo n.º 6
0
int main(int argc, char*argv[]){
	
	if(strcmp(argv[1],"[-h]")==0) {/*help called*/
			help();
			return 0;
		
		}
if(argc<15){	
		fprintf(stderr,"ERROR: INCORRECT NUMBER OF INPUTS.\n");
			return 0;}
size1 =0; size2 =0; size3 = 0; associates =0; as2=0; as3=0; numset1=0; numset2=0; numset3=0; 

int i =0; replace = 0;

while(i<argc){ /*scanning values*/
	if(strcmp(argv[i],"-l1size")==0){
		size1 = atoi(argv[i+1]);
		}
	else if(strcmp(argv[i],"-l1assoc")==0){
		
		if(strcmp(argv[i+1],"direct")==0){
			associates = 1;
			}
		else if(strcmp(argv[i+1],"assoc")==0){
			numset1=1;
			}
		else{
			associates = atoi(argv[i+1]+6);
			}
				
		}/*l1 if statements ends*/
	if(strcmp(argv[i],"-l2size")==0){
		size2 = atoi (argv[i+1]);		
		}
	else if(strcmp(argv[i],"-l2assoc")==0){
		if(strcmp(argv[i+1],"direct")==0){
			numset2=1;
			as2 = 1;
			}
		else if(strcmp(argv[i+1],"assoc")==0){
			numset2=1;
			}
		else{
			as2 = atoi(argv[i+1]+6);
			}
		}
	else if(strcmp(argv[i],"-l3size")==0){
		size3 = atoi(argv[i+1]);
		}	
	else if(strcmp(argv[i],"-l3assoc")==0){
		if(strcmp(argv[i+1],"direct")==0){
			as3 = 1;
			}
		else if(strcmp(argv[i+1],"assoc")==0){
			numset3=1;
			}
		else{
			as3 = atoi(argv[i+1]+6);
			}
		block = atoi(argv[i+2]);
	}	
	
	else if(strcmp(argv[i],"FIFO")==0){
		replace =1;
		}
i++;
}

//printf("%d %d ",numset2,as2);

if(block==0){ /*error check*/
			fprintf(stderr,"ERROR: INCORRECT INPUT\n");
			return 0;
	}

if(numset1 == 1){/*number of set for l1 == 1, fully assoc*/
	associates = size1/block;
	} 
else if(associates==1){/*number of set l1 is direct*/
	numset1 = size1/block;
	if(numset1>1)
	fullasso=size1/block;
	}	
else if (associates>1){ /*else its set assoc*/
	numset1 = size1/(block*associates);
	if(numset1>1)	fullasso = size1/block;
	}	
if(numset2==1){/*l2 assoc*/
	as2 = size2/block;
	}
else if(as2==1){/*l2 direct*/
	numset2 = size2/block;
	}
else if (as2>1){/*l2 set assoc*/
		numset2= size2/(block*as2);
	}	
if(numset3==1){/*l3 assoc*/
		as3 = size3/block;
	}
else if(as3==1){/*l3 direct*/
	numset3 = size3/block;
	}
else if (as3>1){/*l3 set assoc*/
	numset3 = size3/(as3*block);
	}	

offset = check(block); /*setting offset*/
totalcapacity = numset1*associates;

		if(numset1==0||numset2==0||numset3==0||associates==0||as2==0||as3==0||check(numset1)==-1||check(numset2)==-1||check(numset3)==-1||offset==-1){
		
		fprintf(stderr,"ERROR: INCORRECT INPUT\n");
			return 0;
		}/*error checking*/
	
	/*CHECK FOR TRACE FILE*/
		FILE *pfi; /*text file open*/
		pfi = fopen(argv[argc-1],"r");

	if(pfi==NULL){/*if the file does not exist*/
			fprintf(stderr,"ERROR: File does not exist!\n");
			return 0;		
		}

		memcount =0;/*keep track of memory accesses*/
		unsigned long long temp; /*this would store and read hexadecimeals from text*/

		if(size1<block || size2<block || size3<block||size1>size2||size2>size3||size1>size3){
			fprintf(stderr,"ERROR: size is smaller \n");
			return 0;
			} /*to see if there is a cache size hierarchy */
			

		
			/*make all the caches also define total capacity management, all the misses, hits, cold misses, l1 miss, l2 miss, hits for all, capacity miss, capacity updates*/
			struct node**  l1 = (struct node **) malloc(sizeof(struct node*)*numset1);
			
				int associat = 0; int num = 0; 
				while(num<numset1){/*l1 memory allocation*/
					associat=1;
					l1[num]=(struct node *) malloc(sizeof(struct node)*associates);
					l1[num][0].frequency = 0;
					l1[num][0].tag = 0;
					while(associat<associates){
						l1[num][associat].frequency=0;					
						l1[num][associat].tag=0;
						associat++;
						}
					num++;
					
					}
		
//printf("%d %d %d %d %d\n",numset2,numset3,as2,as3,fullasso);

			struct node ** l2 = (struct node **) malloc(sizeof(struct node *)*numset2);
					num = 0;
				while(num<numset2){ /*l2 memory allocation*/
					l2[num]=(struct node *)malloc(sizeof(struct node)*as2);
					l2[num][0].frequency = 0;
					l2[num][0].tag=0;
					associat=1;
					while(associat<as2){
						l2[num][associat].frequency = 0;
						l2[num][associat].tag=0;
						associat++;
						//printf("%d\n",associat);
						}
					num++;
					
					}
		
			
		struct node ** l3 = (struct node **) malloc(sizeof(struct node *)*numset3); 
			num=0;
			while(num<numset3){/*for l3 memory location*/
					l3[num]=malloc(sizeof(struct node)*as3);
					l3[num][0].frequency = 0;
					l3[num][0].tag=0;
					associat=1;
					while(associat<as3){
						l3[num][associat].frequency = 0;
						l3[num][associat].tag=0;
						associat++;
						}
					num++;
					
					}
		

			struct node ** fullas = (struct node **) malloc(sizeof(struct node *));
		if(numset1>1){/*memory for fully l1 associate*/
					fullas[0]=malloc(sizeof(struct node)*fullasso);
					fullas[0][0].frequency = 0;
					fullas[0][0].tag=0;
					associat=1;
					while(associat<fullasso){
					fullas[0][associat].frequency = 0;
					fullas[0][associat].tag=0;
				//	printf("%d \n",associat);
					associat++;
						}
							
					}
	
			missesl1 = 0; missesl2 =0; missesl3 = 0; hitsl1 =0 ; hitsl2 =0; hitsl3 = 0 ; coldmiss = 0; coldmiss2 = 0; coldmiss3 = 0;	
			int check = 0; int count= 0; 

while(fscanf(pfi,"%llx",&temp)!=EOF){
			memcount++;
			check = findl1(numset1,temp,associates,l1);
			if(check==1){/*l1 hit and over*/
				hitsl1++;
				continue;				
				}

			else {/*l1 misses*/
					missesl1++;
					check = addl1(temp,l1);
					if(check==1){
						coldmiss++;
						}else{
							
							//if(numset1>1){
								//check = checkspace(l1);

								//if(check==1){
								//	conflict++;}
								//else{
								//	capacity++;}

				//	}
						replacementl1(temp,l1);
							}
						}	
	//	if(totalcapacity==0) count++;


		//if(numset1>1){
		//	check = findfull(temp,fullas);
			//	if(check==0){/*you want to add to fully associate*/	
			//		check = fulladd(temp,fullas);
			//			if(check==0){
			//				capacity++;
				//			replacementfullas(temp,fullas);
					//		}
			//		}
					
	//}
		check = findl1(numset2,temp,as2,l2);

			if(check ==1){/*finiding stuff in l2*/
					hitsl2++;
					continue;
				}
			
			else {
				missesl2++;
				
				check = addl2(temp,l2);

				if(check == 1){
					coldmiss2++;
					}
				else{

					replacementl2(temp,l2);
					}	
			/*	check = findl1(numset3,temp,l3);*/
				}

			check = findl1(numset3,temp,as3,l3);
			
			if(check==1){
				hitsl3++;
				continue;
				}
			
			else{
				missesl3++;

				check = addl3(temp,l3);

				if(check==1){
					coldmiss3++;					
					}
				else{
					replacementl3(temp,l3);
					}
					}
				}

		conflict =0;
			
//		printf("%d",count);
	//	if(numset1>1){				
		//		conflict = missesl1 - capacity - coldmiss;
					//	}
		//else{
			if(numset1==1){
			capacity = missesl1 - coldmiss;
				}

			fclose(pfi);



if(atoi(argv[1])==1){
	printf("Memory accesses: %d\nL1 Cache hits: %d\nL1 Cache miss: %d\nL1 Cold misses: %d\nL1 Conflict misses: %d\nL1 Capacity misses: %d",memcount,hitsl1,missesl1,coldmiss,conflict,capacity);
}


else if(atoi(argv[1])==2){
printf("Memory accesses: %d\nL2 Cache hits: %d\nL2 Cache miss: %d\nL2 Cold misses: %d",memcount,hitsl2,missesl2,coldmiss2);
}

else if(atoi(argv[1])==3){
printf("Memory accesses: %d\nL3 Cache hits: %d\nL3 Cache miss: %d\nL3 Cold misses: %d",memcount,hitsl3,missesl3,coldmiss3);
}

else {printf("Memory accesses: %d\nL1 Cache hits: %d\nL1 Cache miss: %d\nL2 Cache hits: %d\nL2 Cache miss: %d\nL3 Cache hits: %d\nL3 Cache miss: %d\nL1 Cold misses: %d\nL2 Cold misses: %d\nL3 Cold misses: %d\nL1 Conflict misses: %d\nL1 Capacity misses: %d",memcount,hitsl1,missesl1,hitsl2,missesl2,hitsl3,missesl3,coldmiss,coldmiss2,coldmiss3,conflict,capacity);
		}
		fre(l1,l2,l3,fullas); /*freeing memory*/
		return 0;	
		
		}