- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I'm experimenting with openmp task parallelism and the depend clause. The following code
#include <iostream> //void solve(int N, double* a, double* b) { // this works template<typename S> void solve(int N, S* a, S* b) { // this does not int T = 4; #pragma omp taskgroup { for (int i=0; i<N; i+=T) { #pragma omp task depend(inout:b) { for (int k=0; k<T; k++) for (int l=0; l<k; l++) b[i+k] -= a[i+k+(i+l)*N]*b[i+l]; } for (int j=i+T; j<N; j+=T) #pragma omp task depend(in:b) depend(inout:b) { for (int k=0; k<T; k++) for (int l=0; l<T; l++) b[j+k] -= a[j+k+(i+k)*N]*b[i+l]; } } } } int main(int argc, char* argv[]) { int N = 64; double* a = new double[N*N]; double* b = new double ; for (int k=0; k<N; k++) for (int l=0; l<N; l++) a[k+l*N] = 1./((k-l)*(k-l)+1); for (int i=0; i<N; i++) b = i; solve(N, a, b); for (int i=0; i<N; i++) std::cout << b << std::endl; }
fails with
testDepend.cpp(9): error: invalid entity for this variable list in omp clause
#pragma omp task depend(inout:b)
Is this not allowed? It works when I remove the template parameter, ie, just make it double and both versions work with g++ 4.9.1.
I'm using icpc (ICC) 15.0.0 20140530. It's a beta version. Sorry if this is already fixed in a later version of the compiler.
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It appears to work OK with 64-bit 15.0.0.108 20140726.

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page