Internal error with CilkPlus directive

Internal error with CilkPlus directive

In build 13.1.2.183 and command

icpc -std=c++11 -g -O3 -xHost -align -ansi-alias -mcmodel=medium -DBLAS -fopenmp Cholesky.cpp -mkl -lm

the attached program gets:

": internal error: backend signals

compilation aborted for Cholesky.cpp (code 4)

AdjuntoTamaño
Descargar cholesky.cpp9.54 KB
publicaciones de 11 / 0 nuevos
Último envío
Para obtener más información sobre las optimizaciones del compilador, consulte el aviso sobre la optimización.

Hello,

I cannot reproduce the fail. Would it be possible to provide a preprocessed file (icpc -P) to get rid of system header dependencies?
Also, what system do you have? The effect of option "-xHost" depends on that.

Thank you & best regards,

Georg Zitzlsberger

No problem, but it may not be for a little bit.  There was a bug in my code, incidentally, but such crashes aren't nice.

Hello,

even if the example is not correct internal errors like that should not occur. I'm chasing such errors once I see just a glimpse of them because they are hard to find again later. If you could provide some version of preprocessed output showing that error would be great.

Best regards,

Georg Zitzlsberger

The internal error occurs as well with both the more recent compiler releases, at -O2 and above.  It is provoked by the erroneous use of pragma simd reduction, which ought to throw an error or warning message.

Adjuntos: 

AdjuntoTamaño
Descargar cholesky.i.gz76.65 KB

Thanks very much.  Yes, that was the error - a cut-and-paste error :-)

Thank you Tim for the reproducer. I've filed this as internal defect ticket DPD200389919 and update the thread once fixed.

One note nonetheless. The problem is caused by the following use of #pragma simd, which is illegal:

void cholesky_cilkplus (double a[size][size]) {
for (int j = 0; j < size; ++j) {
a[j][0:j] = 0.0;
double x = a[j][j] = sqrt(a[j][j]-__sec_reduce_add(a[0:j][j]*a[0:j][j]));
#pragma simd reduction(+:x)
for (int i = j+1; i < size; ++i)
a[j][i] = (a[j][i] - __sec_reduce_add(a[0:j][i]*a[0:j][j])) / x;
}
}

The use of clause "reduction" is not allowed for "x". The reason is that variable "x" is not a reduction (left hand side). You should remove it to work (in this case).

Best regards,

Georg Zitzlsberger

Hello,

I've just verified the fix of the reported problem with the latest update (Intel(R) Composer XE 2013 SP1 Update 2).

Best regards,

Georg Zitzlsberger

I've had great difficulty in upgrading to 2012 SP1 update 2 on windows 8.1, possibly because I installed update 1 from the parallel studio installer.  I've noticed additional bug fixes in update 2.  I made progress at last by trying a full remove with the parallel studio installer, then running the cluster studio installer.  

Resulting ICL version string:

Intel(R) C++ Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Ve
rsion 14.0.1.139 Build 20140130

This compiler, although quoting update 1, appears to have the update 2 stability fixes.

Although I had removed Parallel Studio, it came back after shutdown, with the Microsoft paths broken.  The cluster studio installation, however, seems to survive shutdown.

Hello Tim,

If the version string is as you quoted, then it's still the old Update 1. The new one (Update 2) should be visible as:

Intel(R) C++ Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.2.176 Build 20140130

Best regards,

Georg Zitzlsberger

Georg
Build date matches update 2 and it works stably for the first time since I began attempting this upgrade 10 days ago so inclined to leave as is.
Thanks.

Deje un comentario

Por favor inicie sesión para agregar un comentario. ¿No es socio? Únase ya