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

Whats causing this NullPointerException in AWT-EventQueue-0?
Gradle + Dropwizard + Shadow -> Could not find or load main class
Android - Try to send fake sms to myself without mobile network usage
Selenium, open new window
Using Android TCP Client app to interface with sensor
Normal distribution function:determine probability of a given point in Java
Set object reference to null or call the finalize() method?
Are there alternatives to String.format that use cached formatting? [closed]
Can't register portlets on Liferay
Could not find or load main class SDK -jar
Change Eclipse's tooltip/hint/sugestions/overlay window color
Get GZIPped file attributes (like 'gzip -l', basically compression ratio)
Possible Interview Java .equals [duplicate]
No selenium tests run during mvn integration test
Errors related to 'for' loop in Android Studio
Java VM Options: Set a -Djava.library.path relative to project folder

Categories

HOME
maven
deployment
mediawiki
reserved
google-docs
infragistics
sqlite3
fingerprint
azure-media-services
vault
node-pdfkit
here-api
midi
row
phaser
size
finite-automata
database-replication
interop
code-review
custom-wordpress-pages
immutable.js
rst2pdf
replaceall
instant-messaging
tinymce-4
binary-data
winrt-xaml-toolkit
asset-pipeline
amazon-kinesis-kpl
fusionpbx
space-complexity
swift3.0.2
dynamics-crm-2013
cookiecutter-django
gzipstream
eigenvalue
flashair
eclipse-gef
apple-news
menuitem
flickr-api
react-scripts
git-diff
nodebb
google-perftools
boost-preprocessor
hittest
gridpane
ado.net-entity-data-model
home-directory
trash
connect-by
asp.net5
natvis
srand
xna-4.0
sankey-diagram
processmodel
c++03
npapi
phalanger
html-helper
ceil
android-radiobutton
doskey
dealloc
balanced-payments
ember-charts
stxxl
blending
xamlparseexception
plasma
ocunit
mhtml
coderush
onsubmit
ocx
amazon-appstore
table-footer
inotifycollectionchanged
suppress
nintendo-ds
microsoft-virtualization
temporal-database
ugc
ajax-forms

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