- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
According to the OpenMP website, Intel C++ 2017 supports OpenMP 4.5: http://www.openmp.org/resources/openmp-compilers/
I created an OpenMP 4.5 compliant code, which compiles fine under GCC 6.3.1:
vector<double> res(n);
double* results = res.data();
#pragma omp parallel for reduction(+: results[:n])
for(int s = 0; s < n; ++s) {
// do something
}
return res;
This triggers a compilation error:
/home/marmstrz/pw-brandes/brandes.cpp(15): error: no matching declaration for this reduction
#pragma omp parallel for reduction(+: results[:n])
Why doesn't this work with the Intel compiler?
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It works fine for me with our latest supported 17.0 compiler. I only see the error with the 16.0 compiler.
sptel42-171> cat openmp.cpp
#include <vector>
using namespace std;
vector<double> foo(int n) {
vector<double> res(n);
double* results = res.data();
#pragma omp parallel for reduction(+: results[:n])
for(int s = 0; s < n; ++s) {
// do something
}
return res;
}
sptel42-172> icpc -qopenmp -c openmp.cpp
sptel42-173> which icpc
/site/spt/usr13/jward4/workspaces/17_0cfe/dev/build_objs/efi2linux_debug/bin/icpc
sptel42-174>
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
What is the version of your compiler? Mine:
$ icpc --version icpc (ICC) 17.0.1 20161005 $ which icpc /opt/intel/compilers_and_libraries_2017.1.132/linux/bin/intel64/icpc
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Was there ever any resolution to this? I am experiencing the same thing.
I get the error:
error: no matching declaration for this reduction
#pragma omp parallel for reduction(+:a[0:N]) private(j)
when trying to compile (with Intel 17.0.0 or 17.0.4) the OpenMP 4.5 example from http://www.openmp.org/wp-content/uploads/openmp-examples-4.5.0.pdf at the bottom of page 238. I can compile with gcc. I copy the code here:
#include <stdio.h> #define N 100 void init(int n, float (*b)); int main(){ int i,j; float a , b ; init(N,b); for(i=0; i<N; i++) a=0.0e0; #pragma omp parallel for reduction(+:a[0:N]) private(j) for(i=0; i<N; i++){ for(j=0; j<N; j++){ a += b ; } } printf(" a[0] a[N-1]: %f %f\n", a[0], a[N-1]); return 0; }
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am experiencing the same problems. I have gcc version 7.2.0 and have tried compiling the following with icc versions 17.0.1 (20161005) and 18.0.0 (20170811). Currently it only compiles using the version 18.0.0 of icc. Using gcc works fine.
(icc version 18.0.0)user:temp$ icc -qopenmp -std=c99 demo.c -o demo
(gcc version 7.2.0)mimic:temp% gcc -fopenmp -std=c99 demo.c -o demo
(icc version 17.0.1)mimic:temp% icc -qopenmp -std=c99 demo.c -o demo demo.c(9): error: no matching declaration for this reduction #pragma omp parallel for reduction(+:results[:n]) ^ compilation aborted for demo.c (code 2)
The C code is for demo.c is
#include <stdio.h> #include <stdlib.h> #include <omp.h> int main() { unsigned int n = 5; double *results = (double *) calloc(n, sizeof(double)); #pragma omp parallel for reduction(+: results[:n]) for (int s = 0; s < n; ++s) { results+= 1 << s; } double res = 0; for (int i = 0; i < n; i++) { res += results; } printf("The sum is %f\n", res); return 0; }
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page