Quantcast
Channel: Intel® C++ Compiler
Viewing all articles
Browse latest Browse all 1616

icc16: openmp declare reduction : internal error: 20000_0

$
0
0

Hey all,

I tried to use the OpenMP declare reduction pragma for an implementation of an array reduction. The code compiles fine using g++ 4.9 and produces correct results. However, using icpc-16.0.038 gives an internal error 20000_0. I attached a small code example.

#include <iostream>
#include <vector>
#include <complex>


template <const int n>
struct complex_array {

    complex_array() : element( n, std::complex<float>(0.0f,0.0f) ) {

    }

    std::vector< std::complex<float> > element;
};

template <const int n>
static inline void add_complex_struct( complex_array<n> &x, complex_array<n> const &y ) {

    for ( int i = 0; i < n; ++i ) {

        x.element[i] += y.element[i];
    }
}


#pragma omp declare reduction( complex_array_reduction : complex_array<10> : add_complex_struct<10>(omp_out, omp_in) )


int main() {

    complex_array<10> a_array, b_array;


    for ( int i = 0; i < 10; ++i ) {

        std::complex<float> cf( 1.0f+i, 1.5f+i );

        a_array.element[i] =  cf;
    }


    #pragma omp parallel for schedule(static) reduction( complex_array_reduction:b_array )
    for ( int i = 0; i < 100; ++i ) {

        add_complex_struct<10>( b_array, a_array );
    }


    for ( int i = 0; i < 10; ++i ) {

        std::cout << b_array.element[i] << std::endl;
    }
}

I used g++ -fopenmp and icpc -qopenmp to compile the code.

Thanks,

Patrick


Viewing all articles
Browse latest Browse all 1616

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>