Yep, the idea behind openMP is related to what you normally call directives or pragmas[1]. OpenMP offers a set of such directives so you can choose ways to parallelize *chunks* of your code accordingly to the best option you want. List of pragmas here [2].
The very basic example is a parallel for:
int main(int argc, char *argv[]) { const int N = 100000; int i, a[N];
#pragma omp parallel for
for (i = 0; i < N; i++)
a[i] = 2 * i;
return 0;}
And yes, you only type "#pragma omp parallel for" before the "for" statement. Nothing more. You can test within your systems for the results.
Now just a final, very important notice: I am no openMP expert, just looking for interesting ways of speeding things up, there are other as mentioned in this list, several other times.
[1] http://books.google.pt/books?id=MeFLQSKmaJYC&printsec=frontcover&dq=...
[2] http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/co...
On Mon, Dec 6, 2010 at 3:09 PM, Mathieu Bouchard matju@artengine.ca wrote:
On Mon, 6 Dec 2010, Claude Heiland-Allen wrote:
NB: while it does use more than one core, I just compared with the single
core version of gridflow without openmp and it uses only 25% of my cpu (on one core) while the openmp version uses 145% of my cpu (spread over two cores). So, it's no magic bullet...
I don't know how OpenMP works, but is there a way to apply it selectively to only part of a project ? I'm just guessing that it could make a big difference, e.g. if you don't apply it to numop*.cxx but you do apply it to much of the rest (perhaps also exclude gridflow.cxx itself because it contains the BitPacking class).
I just had this idea because of what you told me on the #dataflow chat.
| Mathieu Bouchard ---- tél: +1.514.383.3801 ---- Villeray, Montréal, QC