15-05-2022 22:50
- από τον χρήστη Χατζηδούκας Παναγιώτης

Η επιλογή της γεννήτριας (ψευδό-)τυχαιών αριθμών εξαρτάται κυρίως από τις ανάγκες της εφαρμογής, δηλαδή πόσους τυχαίους αριθμούς χρειάζεται συνολικά αλλά και πόσες ανεξάρτητες ακολουθίες είναι απαραίτητες (π.χ. όταν έχουν παράλληλους υπολογισμούς).
 
Μερικές από τις καλύτερες γεννήτριες είναι οι ακόλουθες: 
α) Mersenne-Twister, με μια αποδοτική υλοποίησή εδώ: http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/SFMT/#SFMT. Μάλιστα η γεννήτρια είναι διαθέσιμη στη C++: https://stackoverflow.com/question
 ... [περισσότερα] Σχόλια (0)
06-05-2022 18:16
- από τον χρήστη Χατζηδούκας Παναγιώτης

Η υλοποίηση της εντολή atomic του OpenMP μπορεί να βασίζεται στις ακόλουθες ατομικές εντολές του GCC compiler: 
https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html

π.χ. οι παρακάτω κώδικες δίνουν το ίδιο αποτέλεσμα όμως δεν έχουν την ίδια απόδοση:

pthread_mutex_lock(&mutex);
sum++;
pthread_mutex_unlock(&mutex);
__atomic_fetch_add(&sum, 1, __ATOMIC_SEQ_CST);

Ο ισόδυναμος κώδικας της δεύτερης περίπτωσης με OpenMP: 

#pragma omp atomic
sum++;
Σχόλια (0)
21-03-2022 17:19
- από τον χρήστη Χατζηδούκας Παναγιώτης

Μία καλή σύνοψη είναι στην απάντηση εδώ: 
https://stackoverflow.com/questions/12392278/measure-time-in-linux-time-vs-clock-vs-getrusage-vs-clock-gettime-vs-gettimeof

Στο αρχείο timer.c των παραδειγμάτων, η συνάρτηση get_wtime() χρησιμοποιεί την gettimeofday και επιστρέφει το wall-clock time ως double. 
Μια άλλη δυνατή υλοποίηση είναι με χρήση της συνάρτησης clock_gettime().  

 

 

 

Σχόλια (0)
18-03-2022 14:14
- από τον χρήστη Χατζηδούκας Παναγιώτης

Με μια μικρή διόρθωση σε έναν συντελεστή (0.2 αντί 0.5) σε σχέση με αυτό που είδαμε στο μάθημα ώστε να δίνει ίδιο αποτέλεσμα. 

 
Οπότε από αυτό εδώ (με 5 εντολές με -O3 και 4 εντολές με -O3 -mfma): 

double d = 5.0*a + 10.0*b;
double e = 0.2*(d + c);

Σε αυτό εδώ, με 2 εντολές FMA:  
double d = a + 2.0*b;
double e = d + 0.2*c;
Αναλυτικά εδώ:  https://godbolt.org/z/r11eMc91x

 

Σχόλια (0)
05-03-2021 17:01
- από τον χρήστη Χατζηδούκας Παναγιώτης

First, you must download the Cygwin installer (setup-x86_64.exe) from here: http://cygwin.com/install.html

Run the Cygwin installer and select/install the necessary software packages.

In general, you need development tools such as the GNU compilers (C/C++), make, openmpi, etc.

For example, to have MPI support you must install everything related to openmpi (you can use the search option of the installer).
In the end, you must be able to execute mpicc and mpirun from the command prompt of Cygwin.

Y

 ... [περισσότερα] Σχόλια (0)