Software Archive
Read-only legacy content
17061 Discussions

cilkplus limitations?

giannhssdra
Beginner
1,035 Views
Hello
Im using this piece of code in my program just to check time differences bettween the serial program and parallel by changing the CILK_NWORKERS


  1. void doSomething() { int k = 10000000; while( --k ); }
  2. cilk_for( int i = 0 ; i < 1000 ; i++ )
  3. doSomething();

No matter what is the value of CILK_NWORKERS( 4, 8, 16 ) half of the times the program runs correctly and half of the times gives this error.
/cilkplus/libcilkrts/runtime/local_state.c:42: cilk assertion failed: fcn
Aborted (core dumped)

or seg fault

Shouldnt the program run nomatter the value of workers?

I was wondering what is a valid value for CILK_NWORKERS.should i leave the default value?

Also about cilk_for is there any kind of limitation i should know?Is there a limitations about the number of iterations?I mean , since every worker works with a queue(fifo) of strands and cilk_for keeps spawning until the number of iterations < grainsize maybe it crashes from to many spawns i dont know.

And its not the only time where i get seg faults where i shouldnt.All my programs half of the times run correctly and half give a seg fault.even the examples from the include files.

Any ideas?
Thanks
0 Kudos
15 Replies
Barry_T_Intel
Employee
1,035 Views
You should never see a Cilk assertion message. These are internal sanity checks.

Can you give me your test application?

- Barry
0 Kudos
giannhssdra
Beginner
1,035 Views
Here is the code

Also whenever i use cilk_spawn it gives me this wanring
cc1plus: warning: unused variable sf_02 [-Wunused-variable]

#include
#include
#include
#include
#include

double timeDif( timeval& s , timeval& e ) {
double time_in_ms = (e.tv_sec - s.tv_sec) * 1000.0 + (e.tv_usec - s.tv_usec)/1000.0;
return time_in_ms;
}

void doSomething(){
int k = 1000000;
while( --k );
}


int main() {

std::cout<<"start of main...\n";

srand(time(NULL));
struct timeval start, end;
gettimeofday(&start, 0);

cilk_for( int i = 0 ; i < 1000 ; i++ )
doSomething();

gettimeofday(&end , 0);
std::cout<<"time : "<
std::cout<<"end of main...\n";

return 0;
}

with the default number of workers the program crashes.
with workers > 8 the program runs but with workers < 8 it gives the errror i told you before
0 Kudos
Barry_T_Intel
Employee
1,035 Views
Which compiler and OS are you using?

- Barry
0 Kudos
giannhssdra
Beginner
1,035 Views
ubuntu12.04 with default compiler gcc-4.6.3
and with cilk /cilkplus/bin/gcc-4.8.0
But also installed gcc 4.7.1 under /home/user not the default installation(i dont know if matters)

You think this has something to do with the os?because i told you even the simpler program somethimes gives runtime errors.
0 Kudos
Barry_T_Intel
Employee
1,035 Views
It *shouldn't* have anything to do with the OS, but it's easier to ask up front. But I definitely needed to know that you're working with the GCC compiler, and on a Linux.

If it's a GCC-specific bug it may have to wait for Balaji.

- Barry
0 Kudos
giannhssdra
Beginner
1,035 Views
Thanks for your time.
Another question
I installed this branch http://gcc.gnu.org/svn/gcc/branches/cilkplus/
but there is also this one. http://gcc.gnu.org/svn/gcc/branches/cilkplus-4_7-branch/

Are they the same ?Should i install the second one?

Are these variables set correct for cilk?for 32bit os

export C_INCLUDE_PATH=/usr/include/i686-linux-gnu:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=$C_INCLUDE_PATH
export OBJC_INCLUDE_PATH=$C_INCLUDE_PATH
export LIBRARY_PATH=/usr/lib/i686-linux-gnu:$LIBRARY_PATH

export GCCDIR=/home/subuntu/cilkplus
export PATH=$GCCDIR/bin:$PATH
export LD_LIBRARY_PATH=$GCCDIR/gmp/lib:$GCCDIR/mpfr/lib:$GCCDIR/mpc/lib:/home/subuntu/cilkplus/lib:$LD_LIBRARY_PATH
export INCLUDE_PATH=$INCLUDE_PATH:/home/subuntu/cilkplus/include
0 Kudos
Barry_T_Intel
Employee
1,035 Views
I'm sorry, but I don't know those answers. Balaji will have to answer them on Monday.

- Barry
0 Kudos
Balaji_I_Intel
Employee
1,035 Views
The most up-to-date one is the cilkplus branch NOT the 4.7 branch.

I dont think the environment variables that need to be set are dfferent on 32-bit and 64-bit machines.

From what I can tell, I think you are setting the library paths correctly.


Thanks,

Balaji V. Iyer.
0 Kudos
giannhssdra
Beginner
1,035 Views
Hello

The compiler gives this warning for every function i use spawn.(sf_02 , sf_03...) even in main
cc1plus: warning: unused variable sf_01 [-Wunused-variable]

And i have this strange behaviour from spawn.
I cant use twice the spawn-sync compination in the same function.
I cant spawn from inside a child.And several other strange things.

And cilk_for always returns this error during runtime and core dumb.
/cilkplus/libcilkrts/runtime/local_state.c:42: cilk assertion failed: fcn

This warning is normal or not?
Does anyone else has the same behaviour with the gcc branch?

Thanks
0 Kudos
Balaji_I_Intel
Employee
1,035 Views
Can you please give us a code example?

-Balaji V. Iyer.
0 Kudos
giannhssdra
Beginner
1,035 Views
These 3 files produce the warnings and errors i told you.
Any chance i did something wrong with the installation?Or since it finished the installation it should work?

Thanks for your time
0 Kudos
giannhssdra
Beginner
1,035 Views
Hello

I changed from ubuntu 32bit to 64 bit and now everything seeems to work fine with cilk.No more seg faults
Is this a known problem?
0 Kudos
TimP
Honored Contributor III
1,035 Views
Wouldn't the default worker stack be larger in 64-bit mode?
0 Kudos
Barry_T_Intel
Employee
1,035 Views
None of his sample applications should be stressing the stack size, or even the number of stacks, even in 32-bit mode.

- Barry
0 Kudos
Balaji_I_Intel
Employee
1,035 Views
Hello giannhssdra,
I tried your code-sample onmy 2core32 bit Ubuntu machine and the Cilk_for seem to work for me. I did not get any warnings. It gave me this output which looked correct. Please let me know if I have mistaken.

$ ../../install-test/bin/g++ cilk_for.c -O3 -ldl -lcilkrts

$ ./a.out

start

iteration : 0 worker : 0

iteration : 4 worker : 1

iteration : 1 worker : 0

iteration : 5 worker : 1

iteration : 6 worker : 1

iteration : 2 worker : 0

iteration : 7 worker : 1

iteration : 3 worker : 0

end



I am currently looking into the spawn examples and will get back to you when I get an answer.

Thanks,

Balaji V. Iyer.
0 Kudos
Reply