[openMP] programowanie równoległe

0

Witam i od razu dziękuje za odpowiedzi
:)
Mam proste pytanie odnośnie równoległości - jak wiemy różni sie ona od współbieżności tym że wykonanie następuje w tym samym punkcie czasu (np. mając dwa rdzenie mozemy wykonac równoczesnie dwa wątki, dwie operacje)
zatem:

#include <stdio.h>
#include <omp.h>
#include <time.h>

void main() {
	int threadID, totalThreads;
	printf("before, is parallel: %d\n",omp_in_parallel());

	#pragma omp parallel private(threadID)
 	{
	threadID = omp_get_thread_num();
	printf("\nHello World is from thread %d at %d\n",(int)threadID,clock());
	if(threadID == 0) {
		printf("\nMaster thread being called\n");
		totalThreads = omp_get_num_threads();
    		printf("Total number of threads are %d\n",totalThreads);
   	}
	printf("is parallel: %d\n",omp_in_parallel());
 	}
	printf("after: %d\n",clock());
  
}

dlaczego ten kod zwraca różne czasy procesora dla:
printf("\nHello World is from thread %d at %d\n",(int)threadID,clock());
tej funkcji ?
wykonywane jest to w zrównoleglonym bloku a jednak czasy występują inne...
pozdrawiam i dziękuje

0

o ile nie mam zacmienia kompletnego, to CLOCK() to nie sa czasy, tylko ticki procesora.. jesli nie masz procka jednordzeniowego i plyty jednoprocesorowej z przed 5 lat, to pewnie masz jakies code2duo czy inny multicore i jego rdzenie maja prawo miec ODRĘBNE liczniki tickow.. nie muszę chyba mowic ze Twoje watki mogly chodzic na roznych rdzeniach/procesorach i to jest nawet milutkie..

a czy na Twoim sprzęcie mają? nie wiem. jesli masz 2+ procesorow, na pewno tak. jesli zas masz tylko 2+ rdzeni - pojecia nie mam. strzelam ze tak.

1 użytkowników online, w tym zalogowanych: 0, gości: 1