ICC 13.0.1 crashes while spawning a lambda

ICC 13.0.1 crashes while spawning a lambda

 

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 posts / 0 nouveau(x)
Dernière contribution
Reportez-vous à notre Notice d'optimisation pour plus d'informations sur les choix et l'optimisation des performances dans les produits logiciels 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

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

Hello,

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

Best regards,

Georg Zitzlsberger

Laisser un commentaire

Veuillez ouvrir une session pour ajouter un commentaire. Pas encore membre ? Rejoignez-nous dès aujourd’hui