000
25.04.2006, 18:30 Uhr
flappinski
|
Hallo Leute, ich muss noch mal mit den verschiedenen Cores nerven. Nachdem ich mir Plers Tip zur Gemüte geführt habe, sehe ich, dass die Threads genau das sind, was ich brauche. Allerdings ist mein Programmierstil nicht ganz so sauber, als dss ich mich drauf verlassen könnte, die Mutexe etc. richtig anzuwenden. Nun komme ich zu OpenMP: So, wie ich das verstanden habe, arbeitet OpenMP ja genauso, nur dass man es deutlich komfortabler anwenden kann. Ist das richtig. Nun habe ich die GCC Version 4.2.0 mal installiert, aber ich kann zwar die Beispielprogramme zwar compilieren, aber dann wird immer nur ein Thread aufgemacht (omp_get_num_threads() ergibt 1, obwohl ich die Umgebungsvariable $OMP_NUM_THREADS auf 30 gesetzt habe und damit auch omp_get_max_threads() nun 30 ergibt. Kompiliert habe ich folgendermassen:
C++: |
gcc -openmp -o hello omp_hello.c -lgomp
|
das habe ich in Anlehnung an icc - Anleitungen gemacht. Es dreht sich übrigens um folgendes Programm
C++: |
/****************************************************************************** * FILE: omp_hello.c * DESCRIPTION: * OpenMP Example - Hello World - C/C++ Version * In this simple example, the master thread forks a parallel region. * All threads in the team obtain their unique thread number and print it. * The master thread only prints the total number of threads. Two OpenMP * library routines are used to obtain the number of threads and each * thread's number. * AUTHOR: Blaise Barney 5/99 * LAST REVISED: 04/06/05 ******************************************************************************/ #include <omp.h> #include <stdio.h> #include <stdlib.h>
int main (int argc, char *argv[]) {
int nthreads, tid;
/* Fork a team of threads giving them their own copies of variables */ #pragma omp parallel private(nthreads, tid) {
/* Obtain thread number */ tid = omp_get_thread_num(); printf("Hello World from thread = %d\n", tid);
/* Only master thread does this */ if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); }
} /* All threads join master thread and disband */
}
|
Vielleicht hat ja jemand schon mal ein openmp programm mit gcc kompiliert, obwohl das ja sehr frisch sein muss. Wäre toll, währenddessen versuche ich es mal mit dem Intel Compiler, der scheint damit ja schon länger zu arbeiten. Damit hat doch bestimmt schon einer Erfahrung, oder? Grüsse, Stephan |