java


Why my parallel program is slower than sequential program? [duplicate]


I've been learning a little about parallelism in the last few days, and I came across this example.
I put it side to side with a sequential for loop like this:
private static void NoParallelTest()
{
int[] nums = Enumerable.Range(0, 1000000).ToArray();
long total = 0;
var watch = Stopwatch.StartNew();
for (int i = 0; i < nums.Length; i++)
{
total += nums[i];
}
Console.WriteLine("NoParallel");
Console.WriteLine(watch.ElapsedMilliseconds);
Console.WriteLine("The total is {0}", total);
}
I was surprised to see that the NoParallel method finished way way faster than the parallel example given at the site.
I have an i5 PC.
I really thought that the Parallel method would finish faster.
Is there a reasonable explanation for this? Maybe I misunderstood something?
The sequential version was faster because the time spent doing operations on each iteration in your example is very small and there is a fairly significant overhead involved with creating and managing multiple threads.
Parallel programming only increases efficiency when each iteration is sufficiently expensive in terms of processor time.
You are not comparing apples to oranges.
The example you link to isn't about parallelism or concurrency as much as it is about disconnecting state from being shared amoung the different threads. The work it is doing is a straw man to just show that something is being done.
So what you are comparing is like comparing an F1 car to a Top Fuel Dragster. Each excel at going fast, but fast is relative to the context which in this and most cases is highly specialized. Neither can compete in the others highly specialized bailiwick.
Lessons to learn
concurrent != faster
poorly conceived benchmarks mislead
I think that's because the loop performs a very simple, very fast operation.
In the case of the non-parallel version that's all it does. But the parallel version has to invoke a delegate. Invoking a delegate is quite fast and usually you don't have to worry how often you do that. But in this extreme case, it's what makes the difference. I can easily imagine that invoking a delegate will be, say, ten times slower (or more, I have no idea what the exact ratio is) than adding a number from an array.

Related Links

How to Mock local variable using mockito
menu images does not show in Hard Player but does in soft Players and PS3
JavaFx Change Window, Without New Controller Constructor
Spring hibernate not persisting object nodes
Why is my Acceptor disconnecting even after it receives a Heartbeat back like it should?
run mp3 and .aac vlc audio in java
Android JDBC: Second SQL Thread not working
Using Json when there are multiple similar data sets
Issue with LinkedStack pushing a cloned object in java
Jxls or Jett: How to render a tree with formulas on parent nodes?
insert information to external DB in android studio
Why I am not read xml file using FileSystemResource class
How to use hibernate query on two tables (join table)?
JavaFX Node partial border
Error while installing Dynamic Code Evolution VM (DCE) with Java 8
Set Object Variables Within Service Method

Categories

HOME
maven
date
openmp
react-router
android-4.4-kitkat
spring-cloud-stream
google-oauth
microservices
google-translate
fancybox-3
dax
imacros
resize
commonmark
orchardcms
worldwind
jsdoc
apache-metamodel
undefined
visual-composer
introduction
sox
brunch
jaxb2
vision
c++-amp
nat
react-chartjs
protovis
avcapturesession
repo
cloud-code
mapdb
bitbucket-pipelines
x11-forwarding
document.write
awt
dism
ws-security
reportingservices-2005
user-accounts
azure-application-gateway
termination
prolog-setof
dandelion
mplayer
nstextview
android-cursor
akka-cluster
pearson
pdfclown
smart-table
or-tools
topbeat
gridpane
log4c
slicknav
ado.net-entity-data-model
url-masking
trash
autorest
clang-static-analyzer
moveit
hsv
xna-4.0
arcanist
proj4js
device-orientation
gwidgets
responsive-slides
sgen
meteor-velocity
intentservice
floating-point-precision
gridfs
qt-faststart
eventual-consistency
android-hardware
sublist
isnullorempty
rdoc
chrono
qtkit
postgresql-performance
removeclass
pendrive
asyncfileupload
external-accessory
netbeans-7.1
site.master
dmx512
sproutcore-2
ext3
web-architecture
substrings
photoshop-cs4
javap
ctp4
swing-app-framework
anti-piracy
document-conversion

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App