Ejemplo n.º 1
0
int main(void)
{
  unsigned int n;
  printf("Enter a positive integer: ");
  scanf("%u", &n);
  printf("%d\n", countSetBits(n));
}
Ejemplo n.º 2
0
/* Program to test function countSetBits */
int main()
{
   int n,i,j=1,res,k=0;
   scanf("%d",&n);
   for(i=1;i<n;i++){
    j=2*j;
    if(n<j)
    {k=i+1;
     break;
}
else if(n==j)
{k=i+2;
break;
}
}

   int arr[n][2];
   for(i=0;i<n;i++)
  {
     res=countSetBits(i+1);
     arr[i][1]=i+1;
     arr[i][0]=res; 
}
  bucketsort(arr,k);
    return 0;
}
Ejemplo n.º 3
0
int main()
{
    int n, k;
    printf("\nEnter n\n");
    scanf("%d", &n);

    int count = countSetBits(n);
    if (count == 1)
        printf("\nThe number %d is power of 2\n", n);
    else
        printf("\nThe number %d is not power of 2\n", n);
    printf("\n");
    return 0;
}
Ejemplo n.º 4
0
int main(int argc, char** argv)
{
	printf("\n[HW2] IPC and Synchronization\nName: Shubham Jain\nEmail: [email protected]\nNetID: sjain39\n-------------------------------\n");
	if(argc < 5 || argc > 7)
	{
		printf("Usage:\nmaster nBuffers nWorkers sleepMin sleepMax [ randSeed ] [ -lock | -nolock ]\n");
		exit(-1);
	}
	int nBuffers=0, nWorkers=0, randseed=0, i=0, j=0, childStatus=0, workerStatus=0, semID=-1;
	nBuffers = atoi(argv[1]);
	nWorkers = atoi(argv[2]);
	float sleepMin, sleepMax;
	sleepMin = atof(argv[3]);
	sleepMax = atof(argv[4]);
	
	checkInput(nBuffers, nWorkers, sleepMin, sleepMax);
	if(argc==6)
	{
		if(!strcmp(argv[5],"-lock") || !strcmp(argv[5],"lock"))
		{
			printf("Implementing semaphores...\n");
			if((semID = semget(IPC_PRIVATE, nBuffers, IPC_CREAT | 0600)) < 0)
			{
				perror("semget() failed in master");
				exit(-1);
			}
		}
		else
			randseed = atoi(argv[5]);
	}
	if(argc==7)
	{
		randseed = atoi(argv[5]);
		if(!strcmp(argv[6],"-lock") || !strcmp(argv[6],"lock"))
		{
			 printf("Implementing semaphores...\n");
			 if((semID = semget(IPC_PRIVATE, nBuffers, IPC_CREAT | 0600)) < 0)
			 {
				 perror("semget() failed in master");
				 exit(-1);
			 }
		}
	}
		

	int shmid=0, msgQue=0, *shm=NULL;

	if ((shmid = shmget(IPC_PRIVATE, nBuffers*sizeof(int), IPC_CREAT | 0600)) < 0)
	{
		perror("shmget() error");
		exit(-1);
	}

	if((msgQue = msgget(IPC_PRIVATE, IPC_CREAT | 0600)) < 0)
	{
		perror("msgget failed");
		exit(-1);
	}

	char *sort_args[] = {"sort", "-nr", NULL};

	int pipe1[2]; //toChild
	int pipe2[2]; //toParent

	if(pipe(pipe1) || pipe(pipe2))
	{
		perror("pipe() failed");
		exit(-1);
	}

	pid_t pid1 = fork();

	if(pid1 < 0)
	{
		perror("fork() failed for sort");
		exit(-1);
	}
	if(pid1 == 0)
	{ 
		close(pipe1[1]);
		close(pipe2[0]);

		dup2(pipe1[0], STDIN);
		dup2(pipe2[1], STDOUT);

		close(pipe1[0]);
		close(pipe2[1]);

		execvp("sort", sort_args);
   
		perror("execvp() failed for sort");
		exit(-1);
	}
	else
	{
		close(pipe1[0]);
		close(pipe2[1]);

		if(randseed == 0)
			srand(time(NULL));
		else
			srand(randseed);

		char writeBuffer[256] = {'\0'};

		printf("Random sleepTimes sent to child:\n================================\n");
		for(i=0; i<nWorkers; i++)
		{
			float random = (rand()/(float) RAND_MAX) * (sleepMax-sleepMin) + sleepMin;
			sprintf(writeBuffer+j,"%f\n", random);
			printf("%s", writeBuffer+j);
			j=strlen(writeBuffer);
		}

		write(pipe1[1], writeBuffer, strlen(writeBuffer));

		close(pipe1[1]);

		if(wait(&childStatus) < 0 )
		{
			perror("wait() failed for sort");
			exit(-1);
		}
		
		float sleepTimes[nWorkers];
		char *readBuffer;
		readBuffer = (char*)malloc((strlen(writeBuffer)+1)*sizeof(char));
		j=0;
		printf("\nSorted sleepTimes recieved from child:\n======================================\n");
		while(j<nWorkers)
		{
			i=0;
			char c;
			while(read(pipe2[0],&c,1)==1 && c!='\n'){
			readBuffer[i++]=c;
			}
			readBuffer[i]='\0';
			printf("%s\n", readBuffer);
			sleepTimes[j] = atof(readBuffer);
			j++;
		}
		close(pipe2[0]);
		printf("\n");

		if(semID != -1)
		{
			for (i=0; i<nBuffers; i++)
			{
				union semun sem_union;
				sem_union.val = 1;
				if(semctl(semID, i, SETVAL, sem_union) < 0)
				{
					perror("semctl() failed");
					exit(-1);
				}
			}
		}

		for(i=0; i<nWorkers; i++)
		{ //fork workers
			int pid2 = fork();
			if(pid2 < 0)
			{
				perror("fork() failed");
				exit(-1);
			}
			if(pid2 == 0)
			{
				char workerID[10];
				sprintf(workerID, "%d", i+1);

				char numBuffers[10];
				sprintf(numBuffers, "%d", nBuffers);

				char sleepTime[10];
				sprintf(sleepTime, "%f", sleepTimes[i]);

				char msgQueID[10];
				sprintf(msgQueID, "%d", msgQue);

				char shmID[10];
				sprintf(shmID, "%i", shmid);

				if(semID!=-1)
				{
					char semId[10];
					sprintf(semId, "%d", semID);
					char *worker_args[] = {"worker",  workerID, numBuffers, sleepTime, msgQueID, shmID, semId, NULL};
					execv("worker", worker_args);
				}
				else
				{
					 char *worker_args[] = {"worker",  workerID, numBuffers, sleepTime, msgQueID, shmID, NULL};
					 execv("worker", worker_args);
				}
				perror("execv() failed for worker");
				exit(-1);
			}
			else
				continue;
		}
		int nleft = nWorkers;
		int readErrors=0, writeErrors=0;
		while(nleft)
		{ //rcv worker messages
			struct msgbuffer rcvd;
			if(msgrcv(msgQue, &rcvd, sizeof(rcvd), 0, 0) < 0)
			{
				perror("msgrcv() failed");
				exit(-1);
			}
			printf("%s\n",rcvd.mtext);
			switch(rcvd.mtype)
			{
				case 2: readErrors++;
					break;
				case 3: if(wait(&workerStatus) <0)
					{
						perror("wait() failed for worker");
						exit(-1);
					}
					nleft--;
					break;
				default: break;
			}
		}
		printf("\nAll workers have finished execution.\n");

		int expectedVal = (1<<nWorkers)-1;
		printf("\nExpected value in all buffers = %d\n", expectedVal);
		printf("Actual value in all buffers is as follows:\n");
		if ((shm = (int*)shmat(shmid, NULL, 0)) == (int*) -1)
		{
			perror("shmat() error");
			exit(-1);
		}
		for(i=0; i<nBuffers; i++)
			printf("Buffer[%d] = %d\n", i, shm[i]);
		
		//check for bad bits
		for(i=0; i<nBuffers; i++)
		{
			int diffbits = shm[i] ^ expectedVal;
			int setBits = countSetBits(diffbits);
			if(setBits)
			{
				writeErrors++;
				printf("=========================================\nError in Buffer[%d]. No. of Bad Bits = %d\n", i, setBits);
			}
			int iter;
			for (j=1, iter=1; j<256; j<<=1, iter++)
				if (diffbits & j)
					printf("Bad Bit set at bit_index[%d] in Buffer[%d]\n", iter, i);
		}

		printf("\n<=====================>\nTotal Read Errors = %d\nTotal Write Errors = %d\n<=====================>\n", readErrors, writeErrors);
		if(msgctl(msgQue, IPC_RMID, NULL)){

			perror("msgctl() failed");
			exit(-1);
		}

		if(shmdt(shm) < 0)
		{
			perror("shmdt() failed");
			exit(-1);
		}
		
		if(shmctl(shmid, IPC_RMID, NULL) < 0)
		{
			perror("shmctl() failed");
			exit(-1);
		}
		if(semID!=-1)
		{
			if(semctl(semID, 0, IPC_RMID) == -1)
			{
				perror("semctl() failed");
				exit(-1);
			}
		}
	}
	return 0;
}
    CoreCount getCpuCoreCount()
    {
        LPFN_GLPI glpi;
        BOOL done = FALSE;
        CoreCount coreCount;
        PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer = NULL;
        PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ptr = NULL;
        DWORD returnLength = 0;
        DWORD logicalProcessorCount = 0;
        DWORD processorCoreCount = 0;
        DWORD byteOffset = 0;

        glpi = (LPFN_GLPI)GetProcAddress(GetModuleHandle(TEXT("kernel32")),
                                         "GetLogicalProcessorInformation");

        if (NULL == glpi)
        {
            return coreCount;
        }

        while (!done)
        {
            DWORD rc = glpi(buffer, &returnLength);

            if (FALSE == rc)
            {
                if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
                {
                    if (buffer)
                    {
                        free(buffer);
                    }

                    buffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(returnLength);

                    if (NULL == buffer)
                    {
                        return coreCount;
                    }
                }
                else
                {
                    return coreCount;
                }
            }
            else
            {
                done = TRUE;
            }
        }

        ptr = buffer;

        while (byteOffset + sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) <= returnLength)
        {
            if (RelationProcessorCore == ptr->Relationship)
            {
                processorCoreCount++;

                // A hyperthreaded core supplies more than one logical processor.
                logicalProcessorCount += countSetBits(ptr->ProcessorMask);
            }

            byteOffset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
            ptr++;
        }

        free(buffer);
        coreCount.m_cpuCoreCount = processorCoreCount;
        coreCount.m_cpuLogicalCoreCount = logicalProcessorCount;

        return coreCount;
    }
Ejemplo n.º 6
0
/* Program to test function countSetBits */
int main()
{
    for(int i =0;i<32;i++)
        printf("%d %d\n",i,countSetBits(i));
    return 0;
}
Ejemplo n.º 7
0
int main() {
    int n = 8;
    printf("%d\n", countSetBits(n));
	return 0;
}