By default the Intel Cilk Plus runtime will query the OS for the number of cores and use all of them. You can override this using the Cilk Plus API, or by setting the CILK_NWORKERS environment variable.

On Windows* you can see the cores being used by bringing up Task Manager (right click in the task bar and select "Start Task Manager") and click the "Performance" tab. You'll see a graph for each of your CPUs in the block "CPU Usage History". You should see a spike on each of the cores when your program runs.

The question is whether your application is actually doing enough work to engage all of the cores. Intel Cilk Plus distributes work using a technique called "work stealing". Each of the idle cores will randomly pick another core and try to steal work from it. If it fails to steal work, then it pauses briefly and then tries again. If the work gets done faster than it can be stolen, then the other cores won't have an opportunity to contribute. As Arch pointed out earlier, your application will be memory bandwidth limited.

The code as you've written it should use all of the available cores. Here are a few things to consider:

1. I your machine relatively "quiet" when you run this test? If there is significant use of the CPU, then you will not get linear speedup.

2. What kind of numbers are you seeing? My concern is that the loop is doing so little work (even at 10 million iterations) that you are running into precision problems with the timers.

3. Another possibility (related to 2) is that the work per iteration is too small and that parallel overhead is overpowering the benefits. I recommend that you run cilkview on the program and look at the "burdened span" and expected speedup numbers.

4. Also related to the lack of work: you have only one parallel section in the program. The timing you are getting includes the start-up cost for spinning up the Cilk worker threads. On Windows, this cost can be substantial. To exclude the startup from your timing, you can try calling __cilkrts_init() explicitly before starting the timer (you need to #include <cilk/cilk_api.h> to use __cilkrts_init() ).