Intel® Cilk™ Plus

(very) Bad parallel efficiency, cilkview interpretation


I tried to parallelise a function with cilk plus (the function is basicaly a periodical convolution with transposition).

The function has 3 nested "for" loops. Basicaly, in a first implementation I only have changed the "for" to "cilk_for". I tried to change only the first one, or the two first, but without change in performances. The function is "convSerial_cilk", printed at the end of this post. The iteration space can be large (the first for loop iterates from 0 to 20000)

Because I had poor performance, I tried to usethe "cilkview" tools (from the SDK).

cilkprof failing to compile

 Within the Makefile I only changed the var CXX = icpc to CXX = g++. All else is equal.

/usr/bin/ld: ../../3rdparty/pintool/intel64/lib/libpin.a(util_host_ia32e.os): relocation R_X86_64_PC32 against symbol `DoXsave' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status make: *** [linux64/] Error 1

What could be going on?


work-stealing applications in real life

There are many papers about work-stealing in the academic.  Cilk ,Cilk plus,TPL and so on also use work stealing. I want to know which applications are suitable to be solved by work-stealing in real life.

 I'm studying the fine-grained task parallelism now.   I also want to know which applications are suitable written in fine-grained task parallelism in real life. Thank you very much.

Array Notation compiles with 12.1 but not 13.0

\Dear all,I have following example program which compiled nicely with Intel 12.1 C++ compiler


#include <iostream>

typedef double (*A3)[][];

double sum(int Nx, int Ny, int Nz, double A[Nx][Ny][Nz])


double res = 0;
  for(int x=0;x<Nx;x++) { for(int y=0;y<Ny;y++) { for(int z=0;z<Nz;z++) {  
    res += A[x][y][z];
   } } }
  return res;

int main()
   double *a = new double[8*8*8]; 

Bug when using elemental functions and chars


 i have a small program using an elemental function to compute the edit distance of two strings:

int compare(char x, char y) {
    if (x == y) {
    } else {
int main()
    char a[3] = {'A','A','A'};
    char b[3] = {'A','A','A'};
    int c[3];
    for (int i = 0; i < 3; i++) {
        c[i] = compare(a[i], b[i]);
        cout << c[i];
    return 0;

When compiling, i receive the following error message:

Subscribe to Intel® Cilk™ Plus