www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to use #pragma omp parallel for collapse(n) in dlang?

reply ijet <my-ijet mail.ru> writes:
How to use #pragma omp parallel for collapse(n) in dlang?
Aug 13 2019
next sibling parent Bastiaan Veelo <Bastiaan Veelo.net> writes:
On Tuesday, 13 August 2019 at 08:41:07 UTC, ijet wrote:
 How to use #pragma omp parallel for collapse(n) in dlang?
I don’t understand the question. Bastiaan.
Aug 15 2019
prev sibling next sibling parent Daniel Kozak <kozzi11 gmail.com> writes:
On Tue, Aug 13, 2019 at 10:47 AM ijet via Digitalmars-d-learn
<digitalmars-d-learn puremagic.com> wrote:
 How to use #pragma omp parallel for collapse(n) in dlang?
There is no OMP for de as I know, but you can just use https://dlang.org/phobos/std_parallelism.html#.parallel for each 'foreach'
Aug 15 2019
prev sibling parent reply Daniel Kozak <kozzi11 gmail.com> writes:
On Thu, Aug 15, 2019 at 9:44 AM Daniel Kozak <kozzi11 gmail.com> wrote:
 On Tue, Aug 13, 2019 at 10:47 AM ijet via Digitalmars-d-learn
 <digitalmars-d-learn puremagic.com> wrote:
 How to use #pragma omp parallel for collapse(n) in dlang?
There is no OMP for de as I know, but you can just use https://dlang.org/phobos/std_parallelism.html#.parallel for each 'foreach'
something like this: C version: #include <stdio.h> #define CNT 400000 int isprime(int num) { if (num <= 1) return 0; if (num % 2 == 0 && num > 2) return 0; for(int i = 3; i < num / 2; i+= 2) { if (num % i == 0) return 0; } return 1; } int fun(int a, int b) { return isprime(a) + isprime(b); } int main() { int buff[CNT]; int i, j; #pragma omp parallel for private(j) collapse(2) for (i = 0; i < 4; i++) for (j = 0; j < 100000; j++) buff[i*100000 + j] = fun(i, j); for (int x = 0; x < CNT; x++) { printf("%d\n", buff[x]); } return 0; } D version: import core.stdc.stdio; import std.parallelism; import std.range : iota; enum CNT = 400000; int isprime(int num) { if (num <= 1) return 0; if (num % 2 == 0 && num > 2) return 0; for(int i = 3; i < num / 2; i+= 2) { if (num % i == 0) return 0; } return 1; } int fun(int a, int b) { return isprime(a) + isprime(b); } int main(string[] args) { int[CNT] buff = void; foreach (i; iota(0,4).parallel) foreach (j; iota(0, 100000).parallel) buff[i*100000 + j] = fun(i, j); for (int x = 0; x < CNT; x++) { printf("%d\n", buff[x]); } return 0; }
Aug 15 2019
parent ijet <my-ijet mail.ru> writes:
On Thursday, 15 August 2019 at 08:08:29 UTC, Daniel Kozak wrote:
 On Thu, Aug 15, 2019 at 9:44 AM Daniel Kozak 
 <kozzi11 gmail.com> wrote:
 [...]
something like this: C version: [...]
Thank you!
Aug 22 2019