I've just learned about Matlab Parallel Computing Toolbox. I'm studying about it. In the beginning and for taking motivation i tried some simple codes to get speed up. But all of my parallel results were worse than serial ones. I know about overhead of data communication between cores. So i wrote a code that have least data communication but likewise before the parallel execution time was longer than serial. I execute parallel code on two workers. My CPU is Intel Core 2 Duo 2.26 Ghz. CPU usage is 100% while running parallel code and 50% while running serial code.
I also tried a code that i found in net. The writer had claimed speed of for the code is 1.92 using 2 workers. But i got 0.96 !
I'm so disturbed!
This is my serial code :
clear A = zeros(2,4000000); tic for j = 1:2 for k = 1:4000000 A(j,k) = sin(j + k); end end toc
And the parallel one :
clear A = zeros(2,4000000); tic parfor j = 1:2 for k = 1:4000000 A(j,k) = sin(j + k); end end toc
Very simple! The parfor has just two iterations and i expect that each of the iterations is executed by one core and get speed up about 2. But run time of the first is 4 seconds and the second is 14!
Thanks! I tried this code
A(j, :) = sin(j + (1:4000000));
and got speed up about 1 ! This wasn't disappointing like before samples. Then i tried weighting each iteration
A(j, :) = sin(j + (1:4000000)) .* sin(j - (1:4000000)) ... .* cos(j - (1:4000000)) .* cos(j + (1:4000000));
and speed up was about 1.3!
Can you please explain what effect the code that you mentioned has? (A(j , :) = ...) why was my first code bad?