ICC 13.0.1 crashes while spawning a lambda

ICC 13.0.1 crashes while spawning a lambda

Bild des Benutzers Wei Pan

 

Hi

Notice that ICC 13.0.1 failed to compile a cilk spawn with a lambda capturing an array by value. Here is the small test case.

void foo(const float*);

void bar() {

  float A[2] = {0, 1};

  _Cilk_spawn [=](){ foo(A); }();

}

4 Beiträge / 0 neu
Letzter Beitrag
Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.
Bild des Benutzers Georg Zitzlsberger (Intel)

Hello,

that's indeed a compiler bug. It seems cilk_spawn surprisingly does not work with lambdas. I've filed a defect ticket (edit: DPD200239458) and let you know if I learn more.

Best regards,

Georg Zitzlsberger

Bild des Benutzers Georg Zitzlsberger (Intel)

Hello,

after some analysis it turns out that passing an array by value caused this internal error. Passing by reference works.
Let me provide you a workaround that should have less impact for you (pass pointer to array by value instead):


void foo(const float*);

void bar() {

  float AA[2] = {0, 1};

  float *A = AA;

  _Cilk_spawn [=](){ foo(A); }();

}

Edit: Another one would be using named lambdas:


void foo(const float*);

void bar() {

  float A[2] = {0, 1};
  auto templ = [=](){ foo(A); };

  _Cilk_spawn templ();

}

We're still working on fixing this issue. I'll keep you in the loop.

Best regards,

Georg Zitzlsberger

Bild des Benutzers Georg Zitzlsberger (Intel)

Hello,

the problem will be fixed with Intel(R) Composer XE 2013 Update 3.

Best regards,

Georg Zitzlsberger

Melden Sie sich an, um einen Kommentar zu hinterlassen.