Evolution of Parallel Programming in Computing

 
Module 7 - Part 2
 
Parallel Programming
 
M
o
o
r
e
s
 
L
a
w
 
Moore’s Law predicted the doubling of transistor capacity per
square inch of integrated circuit every two years.
Gordon Moore made this proclamation in the mid-1960s and
predicted that the trend would continue at least 10 years, but
Moore’s Law has actually held true for nearly 50 years.
 Moore’s prediction is often interpreted to mean that processor
speed would double every couple of years.
Software developers benefitted from the continual performance
gains of new hardware in single-core computers. If your application
was slow, just wait—it would soon run faster because of advances
in hardware performance. Your application simply rode the wave of
better performance.
However, you can no longer depend on consistent hardware
advancements to assure better-performing applications!  Problems
have arisen:  can’t get the circuits much closer together, packing
circuits as close as they are has increased heat generation and
thus increased cooling requirements.
 
Parallel Computing
 
Parallel computing is a form of computation in which
many operations are carried out simultaneously.
Many personal computers and workstations have two
or four cores which enable them to execute multiple
threads simultaneously. Computers in the near future
are expected to have significantly more cores.
To take advantage of the hardware of today and
tomorrow, software developers can parallelize their
code to distribute work across multiple processors.
 In the past, parallelization required low-level
manipulation of threads and locks.
 
M
u
l
t
i
c
o
r
e
 
P
r
o
c
e
s
s
i
n
g
 
Multicore architecture is an alternative, where multiple
processor cores share a chip die. The additional cores
provide more computing power without the heat problem.
In a parallel application, you can leverage the multicore
architecture for potential performance gains without a
corresponding heat penalty.
Recent studies assert that only about 30% of the code
written today can be effectively parallelized.
The speed increase with parallel is not a 1 to 1 based on
the number of cores.  Setting code up to run in parallel with
the high level libraries has some “overhead” particularly in
the background tasks that handle the threading.
A quad core machine may see a 30%-40% decrease in
time when run on large data sets.
 
Task Parallel Library  C#
 
The Task Parallel Library (TPL) is a set of public
types and APIs in the System.Threading
namespace in the .NET Framework. This relies on a
task scheduler that is integrated with the .NET
ThreadPool.
The purpose of the TPL is to make developers
more productive by simplifying the process of
adding parallelism and concurrency to applications.
 
 
T
a
s
k
 
P
a
r
a
l
l
e
l
 
L
i
b
r
a
r
y
 
The TPL scales the degree of concurrency
dynamically to most efficiently use all the
processors that are available. Parallel code that is
based on the TPL not only works on dual-core and
quad-core computers. It will also automatically
scale, without recompilation, to many-core
computers.
When you use the TPL, writing a multithreaded for
loop closely resembles writing a sequential for loop.
The following code automatically partitions the work
into tasks, based on the number of processors on
the computer.
 
The Parallel for and foreach loops
 
Parallel.For(startIndex, endIndex, (currentIndex) =>
DoSomeWork(currentIndex));
 
// Sequential version
 
 foreach (var item in sourceCollection)
 
{ Process(item); }
 
// Parallel equivalent
 
Parallel.ForEach(sourceCollection, item =>
 
Process(item));
 
P
a
r
a
l
l
e
l
 
I
n
v
o
k
e
 
You can schedule a task in several ways, the simplest of which is by
using the Parallel.Invoke method. The following example executes two
parallel tasks—one for MethodA and another for MethodB.
This version of Parallel.Invoke accepts an array of Action delegates as
the sole parameter. Action delegates have no arguments and return
void.
Parallel.Invoke(new Action[] { MethodA, MethodB });
 
The Parallel.Invoke method is convenient for executing multiple tasks in
parallel. However, this method has limitations:
Parallel.Invoke creates but does not return task objects.
The Action delegate is limited—it has no parameters and no return
value.
Parallel.Invoke does not guarantee the ordering of task execution
 
Code segments
 
Use .Net Parallel Extensions (Task Parallel Library) and
then see the sample/tutorial on how to get this working in
the VS IDE.
                   Parallel.ForEach( data, c =>
                      {
                      if (c.value == 10)
                          results.Add(c);
                       }
                    );
The code sample uses lambda expressions, but you can
assume this is "magic syntax" for now.  You could also
use delegates syntax if you'd like.
 
R
e
s
u
l
t
s
 
You should see increased performance (reduced
time to complete) relative to the number of
processors/cores you have on the machine as
long as your resources and data are
independent.
If the processes share data or resources there is
likely to be significant blocking and reduced
performance.
How might we solve this blocking/concurrency
problem?
Slide Note
Embed
Share

Moores Law predicted the doubling of transistor capacity every two years, benefitting software developers initially. However, hardware advancements can no longer ensure consistent performance gains. Parallel computing, leveraging multicore architecture, has emerged as a solution to optimize performance without the heat penalty. The Task Parallel Library in C# simplifies adding parallelism to applications by dynamically scaling concurrency for efficient processor utilization.

  • Parallel Programming
  • Moores Law
  • Multicore Architecture
  • Task Parallel Library
  • Computing

Uploaded on Apr 06, 2024 | 7 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Module 7 - Part 2 Parallel Programming

  2. Moores Law Moore s Law predicted the doubling of transistor capacity per square inch of integrated circuit every two years. Gordon Moore made this proclamation in the mid-1960s and predicted that the trend would continue at least 10 years, but Moore s Law has actually held true for nearly 50 years. Moore s prediction is often interpreted to mean that processor speed would double every couple of years. Software developers benefitted from the continual performance gains of new hardware in single-core computers. If your application was slow, just wait it would soon run faster because of advances in hardware performance. Your application simply rode the wave of better performance. However, you can no longer depend on consistent hardware advancements to assure better-performing applications! Problems have arisen: can t get the circuits much closer together, packing circuits as close as they are has increased heat generation and thus increased cooling requirements.

  3. Parallel Computing Parallel computing is a form of computation in which many operations are carried out simultaneously. Many personal computers and workstations have two or four cores which enable them to execute multiple threads simultaneously. Computers in the near future are expected to have significantly more cores. To take advantage of the hardware of today and tomorrow, software developers can parallelize their code to distribute work across multiple processors. In the past, parallelization required low-level manipulation of threads and locks.

  4. Multicore Processing Multicore architecture is an alternative, where multiple processor cores share a chip die. The additional cores provide more computing power without the heat problem. In a parallel application, you can leverage the multicore architecture for potential performance gains without a corresponding heat penalty. Recent studies assert that only about 30% of the code written today can be effectively parallelized. The speed increase with parallel is not a 1 to 1 based on the number of cores. Setting code up to run in parallel with the high level libraries has some overhead particularly in the background tasks that handle the threading. A quad core machine may see a 30%-40% decrease in time when run on large data sets.

  5. Task Parallel Library C# The Task Parallel Library (TPL) is a set of public types and APIs in the System.Threading namespace in the .NET Framework. This relies on a task scheduler that is integrated with the .NET ThreadPool. The purpose of the TPL is to make developers more productive by simplifying the process of adding parallelism and concurrency to applications.

  6. Task Parallel Library The TPL scales the degree of concurrency dynamically to most efficiently use all the processors that are available. Parallel code that is based on the TPL not only works on dual-core and quad-core computers. It will also automatically scale, without recompilation, to many-core computers. When you use the TPL, writing a multithreaded for loop closely resembles writing a sequential for loop. The following code automatically partitions the work into tasks, based on the number of processors on the computer.

  7. The Parallel for and foreach loops Parallel.For(startIndex, endIndex, (currentIndex) => DoSomeWork(currentIndex)); // Sequential version foreach (var item in sourceCollection) { Process(item); } // Parallel equivalent Parallel.ForEach(sourceCollection, item => Process(item));

  8. Parallel Invoke You can schedule a task in several ways, the simplest of which is by using the Parallel.Invoke method. The following example executes two parallel tasks one for MethodA and another for MethodB. This version of Parallel.Invoke accepts an array of Action delegates as the sole parameter. Action delegates have no arguments and return void. Parallel.Invoke(new Action[] { MethodA, MethodB }); The Parallel.Invoke method is convenient for executing multiple tasks in parallel. However, this method has limitations: Parallel.Invoke creates but does not return task objects. The Action delegate is limited it has no parameters and no return value. Parallel.Invoke does not guarantee the ordering of task execution

  9. Code segments Use .Net Parallel Extensions (Task Parallel Library) and then see the sample/tutorial on how to get this working in the VS IDE. Parallel.ForEach( data, c => { if (c.value == 10) results.Add(c); } ); The code sample uses lambda expressions, but you can assume this is "magic syntax" for now. You could also use delegates syntax if you'd like.

  10. Results You should see increased performance (reduced time to complete) relative to the number of processors/cores you have on the machine as long as your resources and data are independent. If the processes share data or resources there is likely to be significant blocking and reduced performance. How might we solve this blocking/concurrency problem?

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#