<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sbhanna</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sbhanna"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Sbhanna"/>
	<updated>2026-08-14T17:43:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4793</id>
		<title>CSC/ECE 506 Fall 2007/wiki2 6 sbh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4793"/>
		<updated>2007-09-29T02:14:00Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* MSIMD applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MSIMD applications ==&lt;br /&gt;
 &lt;br /&gt;
Multiple-SIMD (MSIMD) architectures expand on SIMD architecture abilities, and alleviate some of their weaknesses. Since a single array control unit controls all processing elements in a SIMD architecture, processing elements (PE) are often under-utilized when a process comes in, but does not require the use of all the PEs. MSIMD architectures are formed with clusters of virtual SIMD machines, so there are multiple array control units to control the PEs. This allows other programs and users to utilize idle PEs.  &lt;br /&gt;
&lt;br /&gt;
Below are some examples, based on published papers, of research involving MSIMD architectures and the types of applications for which they have been found useful. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The GPA Machine ===&lt;br /&gt;
&lt;br /&gt;
The GPA machine has shown to be beneficial to algorithms based on dynamic data structures and fragmented partitions. These algorithms will show substantial speedup on this architecture. Multi-user operating system development will also benefit from this architecture. A main benefit of the GPA machine architecture is the ability to allocate resources based on availability and need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Warwick Pyramid Machine ===&lt;br /&gt;
&lt;br /&gt;
The Warwick Pyramid Machine (WPM) allows for the faster tracking of features within images. Each SIMD cluster within the WPM works on a region of the image. Iconic data is processed in the MSIMD array.&lt;br /&gt;
&lt;br /&gt;
The WPM has been used for image analysis techniques such as: motion estimation, segmentation, object detection, edge extraction and enhancement, feature extraction and graphics, and Hough transforms. The Hough transform is used to detect specific shapes in images. Most commonly, it is used to detect straight lines and circles, which might signify a man made object in an image. These transforms cost a significant amount of time and resources, though straight line and circle detection takes fewer parameters than most other shapes. Programming a Hierarchical Hough Transform (which is more thorough and improves upon the original Hough Transform) is more complex on a M-SIMD architecture, but the relatively small amount of extra complexity pays off in enhanced performance and increased programming capability. Advantages include having adjacent clusters work on seperate instruction streams, local associativity, and improved vertical communication bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Artificial Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
In this architecture, Processing Elements are set up locally as SIMD vector processors with local ring communication. This setup is particularly good for recognition and optimization programs.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[http://carbon.cudenver.edu/csprojects/CSC5809S01/Simd/archi.html]Alaghband, Gita. &amp;quot;SIMD Architectures.&amp;quot; University of Colorado at Denver.&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/294/2914/00089460.pdf?tp=&amp;amp;arnumber=89460&amp;amp;isnumber=2914]The GPA Machine: A Generally Partitionable MSIMD Architectures&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel3/1599/4340/00168054.pdf?tp=&amp;amp;arnumber=168054&amp;amp;isnumber=4340]A MSIMD Architecture for Feature Tracking&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/301/3418/00119413.pdf?tp=&amp;amp;arnumber=119413&amp;amp;isnumber=3418]Performance Evaluation of the Hierarchical Hough Transform on an Associative M-SIMD Architecture&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/665/6720/00271809.pdf?tp=&amp;amp;arnumber=271809&amp;amp;isnumber=6720] A Massively Parallel, Multiple-SIMD Architecture for Implementing Artificial Neural Networks&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4373</id>
		<title>CSC/ECE 506 Fall 2007/wiki2 6 sbh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4373"/>
		<updated>2007-09-24T18:54:52Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MSIMD applications ==&lt;br /&gt;
 &lt;br /&gt;
Multiple-SIMD (MSIMD) architectures expand on SIMD architecture abilities, and alleviate some of their weaknesses. Since a single array control unit controls all processing elements in a SIMD architecture, processing elements (PE) are often under-utilized when a process comes in, but does not require the use of all the PEs. MSIMD architectures are formed with clusters of virtual SIMD machines, so there are multiple array control units to control the PEs. This allows other programs and users to utilize idle PEs.  &lt;br /&gt;
&lt;br /&gt;
Below are some examples, based on published papers, of research involving MSIMD architectures and the types of applications for which they have been found useful. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The GPA Machine ===&lt;br /&gt;
&lt;br /&gt;
The GPA machine has shown to be beneficial to algorithms based on dynamic data structures and fragmented partitions. These algorithms will show substantial speedup on this architecture. Multi-user operating system development will also benefit from this architecture. A main benefit of the GPA machine architecture is the ability to allocate resources based on availability and need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Warwick Pyramid Machine ===&lt;br /&gt;
&lt;br /&gt;
The Warwick Pyramid Machine (WPM) allows for the faster tracking of features within images. Each SIMD cluster within the WPM works on a region of the image. Iconic data is processed in the MSIMD array.&lt;br /&gt;
&lt;br /&gt;
The WPM has been used for image analysis techniques such as: motion estimation, segmentation, object detection, edge extraction and enhancement, feature extraction and graphics, and Hough transforms. The Hough transform is used to detect specific shapes in images. Most commonly, it is used to detect straight lines and circles, which might signify a man made object in an image. These transforms cost a significant amount of time and resources, though straight line and circle detection takes fewer parameters than most other shapes. Programming a Hierarchical Hough Transform (which is more thorough and improves upon the original Hough Transform) is more complex on a M-SIMD architecture, but the relatively small amount of extra complexity pays off in enhanced performance and increased programming capability. Advantages include having adjacent clusters work on seperate instruction streams, local associativity, and improved vertical communication bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Artificial Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
In this architecture, Processing Elements are set up locally as SIMD vector processors with local ring communication. This setup is particularly good for recognition and optimization programs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[http://carbon.cudenver.edu/csprojects/CSC5809S01/Simd/archi.html]Alaghband, Gita. &amp;quot;SIMD Architectures.&amp;quot; University of Colorado at Denver.&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/294/2914/00089460.pdf?tp=&amp;amp;arnumber=89460&amp;amp;isnumber=2914]The GPA Machine: A Generally Partitionable MSIMD Architectures&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel3/1599/4340/00168054.pdf?tp=&amp;amp;arnumber=168054&amp;amp;isnumber=4340]A MSIMD Architecture for Feature Tracking&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/301/3418/00119413.pdf?tp=&amp;amp;arnumber=119413&amp;amp;isnumber=3418]Performance Evaluation of the Hierarchical Hough Transform on an Associative M-SIMD Architecture&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/665/6720/00271809.pdf?tp=&amp;amp;arnumber=271809&amp;amp;isnumber=6720] A Massively Parallel, Multiple-SIMD Architecture for Implementing Artificial Neural Networks&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4325</id>
		<title>CSC/ECE 506 Fall 2007/wiki2 6 sbh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4325"/>
		<updated>2007-09-24T02:42:48Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki: MSIMD applications MSIMD architectures have garnered quite a bit of contention recently. Read a few papers on these architectures and write a survey of applications for which they would be suitable. If possible, talk about the steps in parallelizing these applications (decomposition, assignment, orchestration, and mapping).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/294/2914/00089460.pdf?tp=&amp;amp;arnumber=89460&amp;amp;isnumber=2914]The GPA Machine: A Generally Partitionable MSIMD Architectures&lt;br /&gt;
&lt;br /&gt;
The GPA machine has shown to be beneficial to algorithms based on dynamic data structures and fragmented partitions. These algorithms will show substatial speedup on this architecture. Multi-user operating system development will also benefit from this architecture. A main benefit of the GPA machine architecture is the ability to allocate resources based on availability and need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel3/1599/4340/00168054.pdf?tp=&amp;amp;arnumber=168054&amp;amp;isnumber=4340]A MSIMD Architecture for Feature Tracking&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/301/3418/00119413.pdf?tp=&amp;amp;arnumber=119413&amp;amp;isnumber=3418]Performance Evaluation of the Hierarchical Hough Transform on an associative M-SIMD architecture&lt;br /&gt;
&lt;br /&gt;
The Warwick Pyramid Machine (WPM) allows for the faster tracking of features within images. Each SIMD cluster within the WPM works on a region of the image. Iconic data is processed in the MSIMD array.&lt;br /&gt;
&lt;br /&gt;
The WPM has been used for image analysis techniques such as: motion estimation, segmentation, object detection, edge extraction and enhancement, feature extraction and graphics, and Hough transforms. The Hough transform is used to detect specific shapes in images. Most commonly, it is used to detect straight lines and circles, which might signify a man made object in an image. These transforms cost a significant amount of time and resources, though straight line and circle detection takes fewer parameters than most other shapes. Programming a Hierarchical Hough Transform (which is more thorough and improves upon the original Hough Transform) is more complex on a M-SIMD architecture, but the relatively small amount of extra complexity pays off in enhanced performance and increased programming capability. Advantages include having adjacent clusters work on seperate instruction streams, local associativity, and improved vertical communication bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/665/6720/00271809.pdf?tp=&amp;amp;arnumber=271809&amp;amp;isnumber=6720] A Massively Parallel, Multiple-SIMD Architecture for Implementing Artificial Neural Networks&lt;br /&gt;
&lt;br /&gt;
In this architecture, Processing Elements are set up locally as SIMD vector processors with local ring communication. This setup is particularly good for recognition and optimization programs.&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4323</id>
		<title>CSC/ECE 506 Fall 2007/wiki2 6 sbh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4323"/>
		<updated>2007-09-24T02:18:12Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki: MSIMD applications MSIMD architectures have garnered quite a bit of contention recently. Read a few papers on these architectures and write a survey of applications for which they would be suitable. If possible, talk about the steps in parallelizing these applications (decomposition, assignment, orchestration, and mapping).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/294/2914/00089460.pdf?tp=&amp;amp;arnumber=89460&amp;amp;isnumber=2914]The GPA Machine: A Generally Partitionable MSIMD Architectures&lt;br /&gt;
&lt;br /&gt;
The GPA machine has shown to be beneficial to algorithms based on dynamic data structures and fragmented partitions. These algorithms will show substatial speedup on this architecture. Multi-user operating system development will also benefit from this architecture. A main benefit of the GPA machine architecture is the ability to allocate resources based on availability and need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel3/1599/4340/00168054.pdf?tp=&amp;amp;arnumber=168054&amp;amp;isnumber=4340]A MSIMD Architecture for Feature Tracking&lt;br /&gt;
&lt;br /&gt;
The Warwick Pyramid Machine (WPM) allows for the faster tracking of features within images. Each SIMD cluster within the WPM works on a region of the image. Iconic data is processed in the MSIMD array.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/665/6720/00271809.pdf?tp=&amp;amp;arnumber=271809&amp;amp;isnumber=6720] A Massively Parallel, Multiple-SIMD Architecture for Implementing Artificial Neural Networks&lt;br /&gt;
&lt;br /&gt;
In this architecture, Processing Elements are set up locally as SIMD vector processors with local ring communication. This setup is particularly good for recognition and optimization programs.&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4322</id>
		<title>CSC/ECE 506 Fall 2007/wiki2 6 sbh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4322"/>
		<updated>2007-09-24T02:17:54Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki: MSIMD applications MSIMD architectures have garnered quite a bit of contention recently. Read a few papers on these architectures and write a survey of applications for which they would be suitable. If possible, talk about the steps in parallelizing these applications (decomposition, assignment, orchestration, and mapping).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/294/2914/00089460.pdf?tp=&amp;amp;arnumber=89460&amp;amp;isnumber=2914]The GPA Machine: A Generally Partitionable MSIMD Architectures&lt;br /&gt;
&lt;br /&gt;
The GPA machine has shown to be beneficial to algorithms based on dynamic data structures and fragmented partitions. These algorithms will show substatial speedup on this architecture. Multi-user operating system development will also benefit from this architecture. A main benefit of the GPA machine architecture is the ability to allocate resources based on availability and need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel3/1599/4340/00168054.pdf?tp=&amp;amp;arnumber=168054&amp;amp;isnumber=4340]A MSIMD Architecture for Feature Tracking&lt;br /&gt;
&lt;br /&gt;
The Warwick Pyramid Machine (WPM) allows for the faster tracking of features within images. Each SIMD cluster within the WPM works on a region of the image. Iconic data is processed in the MSIMD array.&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/665/6720/00271809.pdf?tp=&amp;amp;arnumber=271809&amp;amp;isnumber=6720] A Massively Parallel, Multiple-SIMD Architecture for Implementing Artificial Neural Networks&lt;br /&gt;
&lt;br /&gt;
In this architecture, Processing Elements are set up locally as SIMD vector processors with local ring communication. This setup is particularly good for recognition and optimization programs.&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4300</id>
		<title>CSC/ECE 506 Fall 2007/wiki2 6 sbh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4300"/>
		<updated>2007-09-23T19:03:16Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki: MSIMD applications MSIMD architectures have garnered quite a bit of contention recently. Read a few papers on these architectures and write a survey of applications for which they would be suitable. If possible, talk about the steps in parallelizing these applications (decomposition, assignment, orchestration, and mapping).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel2/294/2914/00089460.pdf?tp=&amp;amp;arnumber=89460&amp;amp;isnumber=2914]The GPA Machine: A Generally Partitionable MSIMD Architectures&lt;br /&gt;
&lt;br /&gt;
The GPA machine has shown to be beneficial to algorithms based on dynamic data structures and fragmented partitions. These algorithms will show substatial speedup on this architecture. Multi-user operating system development will also benefit from this architecture. A main benefit of the GPA machine architecture is the ability to allocate resources based on availability and need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.lib.ncsu.edu:2178/iel3/1599/4340/00168054.pdf?tp=&amp;amp;arnumber=168054&amp;amp;isnumber=4340]A MSIMD Architecture for Feature Tracking&lt;br /&gt;
&lt;br /&gt;
The Warwick Pyramid Machine (WPM) allows for the faster tracking of features within images. Each SIMD cluster within the WPM works on a region of the image. Iconic data is processed in the MSIMD array.&lt;br /&gt;
&lt;br /&gt;
[http://citeseer.ist.psu.edu/cache/papers/cs/2442/http:zSzzSzwww.ce.chalmers.sezSzstaffzSzmickezSztencon96.pdf/a-multiple-simd-approach.pdf]A Multiple SIMD Approach to Radar Signal Processing&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4291</id>
		<title>CSC/ECE 506 Fall 2007/wiki2 6 sbh</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki2_6_sbh&amp;diff=4291"/>
		<updated>2007-09-23T02:47:21Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki: MSIMD applications MSIMD architectures have garnered quite a bit of contention recently. Read a few papers on these architectures and write a survey of applications for which they would be suitable. If possible, talk about the steps in parallelizing these applications (decomposition, assignment, orchestration, and mapping).&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3436</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3436"/>
		<updated>2007-09-11T02:03:00Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* Ordering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Sections 1.3.1 and 1.3.2: Communication and programming model''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
 &lt;br /&gt;
In parallel programming models, ordering is key to coordinating the activity of all threads. Ordering will ensure that dependencies are maintained and that specified threads remain synchronized via explicit synchronization operations. &lt;br /&gt;
&lt;br /&gt;
Parallel Programming models have developed to take advantage of shared memory multiprocessors and distributed memory systems. Nanothreads Programming Model (NPM) is one such programming model, and exploits multiple levels of loop and functional parallelism. This model results in a runtime environment that has dynamic program adaptability, allowing the program to adjust the granularity of the generated parallelism to the available resources. The main ordering and scheduling objective of this model is that application scheduling, at the user level, and virtual process scheduling, at the kernel level, be tightly coordinated. The result is high performance. &lt;br /&gt;
&lt;br /&gt;
Other programming models combine loop directives and message passing to maintain order and facilitate reordering. An example of a program using this method is the GeoFEM on the Earth Simulator Supercomputer in Japan. This is part of a parallel finite-element platform for solid earth simulation being studied. A special reordering technique was used to create parallel iterative solvers with localized preconditioning. This allows GeoFEM to attain concurrent local operations, no global dependency, continuous memory access, and sufficiently long innermost loops to take advantage of the vector processors on Earth Simulator.&lt;br /&gt;
&lt;br /&gt;
The programming model examples above employ different reordering techniques for processes and data. These techniques are listed and explained below. &lt;br /&gt;
&lt;br /&gt;
* Implicit ordering – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon. &lt;br /&gt;
&lt;br /&gt;
* Explicit Reordering – Programs avoid overhead by explicitly assigning and ordering processes to take advantage of data locality. This approach works well when there is complicated data dependency. &lt;br /&gt;
&lt;br /&gt;
* Reverse Cuthill-McKee (RCM) Reordering - RCM is a typical level set reordering method. Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node. &lt;br /&gt;
&lt;br /&gt;
* DJDS reordering- Reorders data to produce arrays of coefficients with continuous memory access. Vector programming is made more efficient by providing sufficient length for innermost loops. Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS). [3] provides a good explanation and comparison of RCM/PDJDS re-ordering techniques.&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
Synchronization types have expanded to further facilitate reordering over the past several years. These methods now include:&lt;br /&gt;
&lt;br /&gt;
* Mutual Exclusion – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events. &lt;br /&gt;
&lt;br /&gt;
* Automatic Mutual Exclusion - In a simplified model, Automatic Mutual Exclusion consists of asynchronous method calls and guarantees that the program execution is essentially executing each of the calls in some serialized order. It achieves concurrency because the async construct is similar to forking a thread in thread-like systems. The system attempts to execute the method calls concurrently and is subject to strategies that prevent excessive transaction aborts. In more complicated models, the asynchronous methods may be fragmented, using a Yield function to synchronize the fragments prior to blocks. &lt;br /&gt;
&lt;br /&gt;
* Events – Specific events allow other processes to start. An event may trigger a single process or a group of processes. &lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. These include: &lt;br /&gt;
&lt;br /&gt;
* Locks - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
* Semaphores - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code. &lt;br /&gt;
&lt;br /&gt;
* Critical regions - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
* Barriers - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available. &lt;br /&gt;
&lt;br /&gt;
* Atomic operations - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
New mechanisms, like that of a monotonic counter (see references), only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. The goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures.&lt;br /&gt;
&lt;br /&gt;
== References: ==&lt;br /&gt;
 &lt;br /&gt;
1. Hadjidoukas, P. et all, Integrating MPI and the Nanothreads Programming Model, http://citeseer.ist.psu.edu/cache/papers/cs/27581/http:zSzzSzwww.hpclab.ceid.upatras.grzSzpgroupzSzmemberszSzpehzSzpubszSzpdp02.pdf/hadjidoukas02integrating.pdf, 2002. &lt;br /&gt;
&lt;br /&gt;
2. Isard, M. et al, Automatic Mutual Exclusion, http://research.microsoft.com/users/misard/papers/hotos2007.pdf, 2007. &lt;br /&gt;
&lt;br /&gt;
3. Nakajima, K. et al, Parallel Iterative Solvers for Finite-Element Methods using a Hybrid Programming Model on SMP Cluster Architectures, http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf, March 2003. &lt;br /&gt;
&lt;br /&gt;
4. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573, 14th International Parallel and Distributed Processing Symposium (IPDPS'00), 2000 &lt;br /&gt;
&lt;br /&gt;
5. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s &lt;br /&gt;
&lt;br /&gt;
6. Apple Threading Libraries, http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== External Links: ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/hpc/95223.htm?page=12 Trends in Distributed Computing]&lt;br /&gt;
* [http://www.ddj.com/hpc-high-performance-computing/199100439;jsessionid=4WBRUFR1BVGECQSNDLPCKH0CJUNN2JVN DDJ: What's different about multiprocessor programming]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Synchronization_%28computer_science%29 Wikipedia: Synchronization]&lt;br /&gt;
* [http://users.actcom.co.il/~choo/lupg/tutorials/parallel-programming-theory/parallel-programming-theory.html Parallel Programming - Basic Theory for the unwary]&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3435</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3435"/>
		<updated>2007-09-11T02:02:26Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* Ordering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Sections 1.3.1 and 1.3.2: Communication and programming model''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
 &lt;br /&gt;
In parallel programming models, ordering is key to coordinating the activity of all threads. Ordering will ensure that dependencies are maintained and that specified threads remain synchronized via explicit synchronization operations. &lt;br /&gt;
&lt;br /&gt;
Parallel Programming models have developed to take advantage of shared memory multiprocessors and distributed memory systems. Nanothreads Programming Model (NPM) is one such programming model, and exploits multiple levels of loop and functional parallelism. This model results in a runtime environment that has dynamic program adaptability, allowing the program to adjust the granularity of the generated parallelism to the available resources. The main ordering and scheduling objective of this model is that application scheduling, at the user level, and virtual process scheduling, at the kernel level, be tightly coordinated. The result is high performance. &lt;br /&gt;
&lt;br /&gt;
Other programming models combine loop directives and message passing to maintain order and facilitate reordering. An example of a program using this method is the GeoFEM on the Earth Simulator Supercomputer in Japan. This is part of a parallel finite-element platform for solid earth simulation being studied. A special reordering technique was used to create parallel iterative solvers with localized preconditioning. This allows GeoFEM to attain concurrent local operations, no global dependency, continuous memory access, and sufficiently long innermost loops to take advantage of the vector processors on Earth Simulator.&lt;br /&gt;
&lt;br /&gt;
The programming model examples above employ different reordering techniques for processes and data. These techniques are listed and explained below. &lt;br /&gt;
&lt;br /&gt;
* Implicit ordering – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon. &lt;br /&gt;
&lt;br /&gt;
* Explicit Reordering – Programs avoid overhead by explicitly assigning and ordering processes to take advantage of data locality. This approach works well when there is complicated data dependency. &lt;br /&gt;
&lt;br /&gt;
* Reverse Cuthill-McKee (RCM) Reordering - RCM is a typical level set reordering method. Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node. &lt;br /&gt;
&lt;br /&gt;
* DJDS reordering- Reorders data to produce arrays of coefficients with continuous memory access. Vector programming is made more efficient by providing sufficient length for innermost loops. Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS) [3] provides a good explanation and comparison of RCM/PDJDS re-ordering techniques.&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
Synchronization types have expanded to further facilitate reordering over the past several years. These methods now include:&lt;br /&gt;
&lt;br /&gt;
* Mutual Exclusion – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events. &lt;br /&gt;
&lt;br /&gt;
* Automatic Mutual Exclusion - In a simplified model, Automatic Mutual Exclusion consists of asynchronous method calls and guarantees that the program execution is essentially executing each of the calls in some serialized order. It achieves concurrency because the async construct is similar to forking a thread in thread-like systems. The system attempts to execute the method calls concurrently and is subject to strategies that prevent excessive transaction aborts. In more complicated models, the asynchronous methods may be fragmented, using a Yield function to synchronize the fragments prior to blocks. &lt;br /&gt;
&lt;br /&gt;
* Events – Specific events allow other processes to start. An event may trigger a single process or a group of processes. &lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. These include: &lt;br /&gt;
&lt;br /&gt;
* Locks - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
* Semaphores - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code. &lt;br /&gt;
&lt;br /&gt;
* Critical regions - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
* Barriers - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available. &lt;br /&gt;
&lt;br /&gt;
* Atomic operations - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
New mechanisms, like that of a monotonic counter (see references), only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. The goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures.&lt;br /&gt;
&lt;br /&gt;
== References: ==&lt;br /&gt;
 &lt;br /&gt;
1. Hadjidoukas, P. et all, Integrating MPI and the Nanothreads Programming Model, http://citeseer.ist.psu.edu/cache/papers/cs/27581/http:zSzzSzwww.hpclab.ceid.upatras.grzSzpgroupzSzmemberszSzpehzSzpubszSzpdp02.pdf/hadjidoukas02integrating.pdf, 2002. &lt;br /&gt;
&lt;br /&gt;
2. Isard, M. et al, Automatic Mutual Exclusion, http://research.microsoft.com/users/misard/papers/hotos2007.pdf, 2007. &lt;br /&gt;
&lt;br /&gt;
3. Nakajima, K. et al, Parallel Iterative Solvers for Finite-Element Methods using a Hybrid Programming Model on SMP Cluster Architectures, http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf, March 2003. &lt;br /&gt;
&lt;br /&gt;
4. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573, 14th International Parallel and Distributed Processing Symposium (IPDPS'00), 2000 &lt;br /&gt;
&lt;br /&gt;
5. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s &lt;br /&gt;
&lt;br /&gt;
6. Apple Threading Libraries, http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== External Links: ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/hpc/95223.htm?page=12 Trends in Distributed Computing]&lt;br /&gt;
* [http://www.ddj.com/hpc-high-performance-computing/199100439;jsessionid=4WBRUFR1BVGECQSNDLPCKH0CJUNN2JVN DDJ: What's different about multiprocessor programming]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Synchronization_%28computer_science%29 Wikipedia: Synchronization]&lt;br /&gt;
* [http://users.actcom.co.il/~choo/lupg/tutorials/parallel-programming-theory/parallel-programming-theory.html Parallel Programming - Basic Theory for the unwary]&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3414</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3414"/>
		<updated>2007-09-11T01:47:17Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* Synchronization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Sections 1.3.1 and 1.3.2: Communication and programming model''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
 &lt;br /&gt;
In parallel programming models, ordering is key to coordinating the activity of all threads. Ordering will ensure that dependencies are maintained and that specified threads remain synchronized via explicit synchronization operations. &lt;br /&gt;
&lt;br /&gt;
Parallel Programming models have developed to take advantage of shared memory multiprocessors and distributed memory systems. Nanothreads Programming Model (NPM) is one such programming model, and exploits multiple levels of loop and functional parallelism. This model results in a runtime environment that has dynamic program adaptability, allowing the program to adjust the granularity of the generated parallelism to the available resources. The main ordering and scheduling objective of this model is that application scheduling, at the user level, and virtual process scheduling, at the kernel level, be tightly coordinated. The result is high performance. &lt;br /&gt;
&lt;br /&gt;
Other programming models combine loop directives and message passing to maintain order and facilitate reordering. An example of a program using this method is the GeoFEM on the Earth Simulator Supercomputer in Japan. This is part of a parallel finite-element platform for solid earth simulation being studied. A special reordering technique was used to create parallel iterative solvers with localized preconditioning. This allows GeoFEM to attain concurrent local operations, no global dependency, continuous memory access, and sufficiently long innermost loops to take advantage of the vector processors on Earth Simulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
Synchronization types have expanded to further facilitate reordering over the past several years. These methods now include:&lt;br /&gt;
&lt;br /&gt;
* Mutual Exclusion – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events. &lt;br /&gt;
&lt;br /&gt;
* Automatic Mutual Exclusion - In a simplified model, Automatic Mutual Exclusion consists of asynchronous method calls and guarantees that the program execution is essentially executing each of the calls in some serialized order. It achieves concurrency because the async construct is similar to forking a thread in thread-like systems. The system attempts to execute the method calls concurrently and is subject to strategies that prevent excessive transaction aborts. In more complicated models, the asynchronous methods may be fragmented, using a Yield function to synchronize the fragments prior to blocks. &lt;br /&gt;
&lt;br /&gt;
* Events – Specific events allow other processes to start. An event may trigger a single process or a group of processes. &lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. These include: &lt;br /&gt;
&lt;br /&gt;
* Locks - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
* Semaphores - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code. &lt;br /&gt;
&lt;br /&gt;
* Critical regions - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
* Barriers - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available. &lt;br /&gt;
&lt;br /&gt;
* Atomic operations - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
New mechanisms, like that of a monotonic counter (see references), only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. The goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures.&lt;br /&gt;
&lt;br /&gt;
== References: ==&lt;br /&gt;
 &lt;br /&gt;
1. Hadjidoukas, P. et all, Integrating MPI and the Nanothreads Programming Model, http://citeseer.ist.psu.edu/cache/papers/cs/27581/http:zSzzSzwww.hpclab.ceid.upatras.grzSzpgroupzSzmemberszSzpehzSzpubszSzpdp02.pdf/hadjidoukas02integrating.pdf, 2002. &lt;br /&gt;
&lt;br /&gt;
2. Isard, M. et al, Automatic Mutual Exclusion, http://research.microsoft.com/users/misard/papers/hotos2007.pdf, 2007. &lt;br /&gt;
&lt;br /&gt;
3. Nakajima, K. et al, Parallel Iterative Solvers for Finite-Element Methods using a Hybrid Programming Model on SMP Cluster Architectures, http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf, March 2003. &lt;br /&gt;
&lt;br /&gt;
4. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573, 14th International Parallel and Distributed Processing Symposium (IPDPS'00), 2000 &lt;br /&gt;
&lt;br /&gt;
5. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s &lt;br /&gt;
&lt;br /&gt;
6. Apple Threading Libraries, http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== External Links: ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.intel.com/cd/ids/developer/asmo-na/eng/segments/hpc/95223.htm?page=12 Trends in Distributed Computing]&lt;br /&gt;
* [http://www.ddj.com/hpc-high-performance-computing/199100439;jsessionid=4WBRUFR1BVGECQSNDLPCKH0CJUNN2JVN DDJ: What's different about multiprocessor programming]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Synchronization_%28computer_science%29 Wikipedia: Synchronization]&lt;br /&gt;
* [http://users.actcom.co.il/~choo/lupg/tutorials/parallel-programming-theory/parallel-programming-theory.html Parallel Programming - Basic Theory for the unwary]&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3213</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3213"/>
		<updated>2007-09-10T16:54:03Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model''' ==&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
 &lt;br /&gt;
In parallel programming models, ordering is key to coordinating the activity of all threads. Ordering will ensure that dependencies are maintained and that specified threads remain synchronized via explicit synchronization operations. &lt;br /&gt;
&lt;br /&gt;
Parallel Programming models have developed to take advantage of shared memory multiprocessors and distributed memory systems. Nanothreads Programming Model (NPM) is one such programming model, and exploits multiple levels of loop and functional parallelism. This model results in a runtime environment that has dynamic program adaptability, allowing the program to adjust the granularity of the generated parallelism to the available resources. The main ordering and scheduling objective of this model is that application scheduling, at the user level, and virtual process scheduling, at the kernel level, be tightly coordinated. The result is high performance. &lt;br /&gt;
&lt;br /&gt;
Other programming models combine loop directives and message passing to maintain order and facilitate reordering. An example of a program using this method is the GeoFEM on the Earth Simulator Supercomputer in Japan. This is part of a parallel finite-element platform for solid earth simulation being studied. A special reordering technique was used to create parallel iterative solvers with localized preconditioning. This allows GeoFEM to attain concurrent local operations, no global dependency, continuous memory access, and sufficiently long innermost loops to take advantage of the vector processors on Earth Simulator.&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
Synchronization types have expanded to further facilitate reordering over the past several years. These methods now include:&lt;br /&gt;
&lt;br /&gt;
* Implicit ordering – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon. &lt;br /&gt;
&lt;br /&gt;
* Mutual Exclusion – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events. &lt;br /&gt;
&lt;br /&gt;
* Automatic Mutual Exclusion - In a simplified model, Automatic Mutual Exclusion consists of asynchronous method calls and guarantees that the program execution is essentially executing each of the calls in some serialized order. It achieves concurrency because the async construct is similar to forking a thread in thread-like systems. The system attempts to execute the method calls concurrently and is subject to strategies that prevent excessive transaction aborts. In more complicated models, the asynchronous methods may be fragmented, using a Yield function to synchronize the fragments prior to blocks. &lt;br /&gt;
&lt;br /&gt;
* Events – Specific events allow other processes to start. An event may trigger a single process or a group of processes. &lt;br /&gt;
&lt;br /&gt;
* Explicit Reordering – Programs avoid overhead by explicitly assigning and ordering processes to take advantage of data locality. This approach works well when there is complicated data dependency. &lt;br /&gt;
&lt;br /&gt;
* Reverse Cuthill-McKee (RCM) Reordering - RCM is a typical level set reordering method. Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node. &lt;br /&gt;
&lt;br /&gt;
* DJDS reordering- Reorders data to produce arrays of coefficients with continuous memory access. Vector programming is made more efficient by providing sufficient length for innermost loops. Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS) [3] provides a good explanation and comparison of RCM/PDJDS re-ordering techniques.&lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. These include: &lt;br /&gt;
&lt;br /&gt;
* Locks - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
* Semaphores - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code. &lt;br /&gt;
&lt;br /&gt;
* Critical regions - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
* Barriers - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available. &lt;br /&gt;
&lt;br /&gt;
* Atomic operations - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
New mechanisms, like that of a monotonic counter (see references), only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. The goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References: ==&lt;br /&gt;
 &lt;br /&gt;
1. Hadjidoukas, P. et all, Integrating MPI and the Nanothreads Programming Model, http://citeseer.ist.psu.edu/cache/papers/cs/27581/http:zSzzSzwww.hpclab.ceid.upatras.grzSzpgroupzSzmemberszSzpehzSzpubszSzpdp02.pdf/hadjidoukas02integrating.pdf, 2002. &lt;br /&gt;
&lt;br /&gt;
2. Isard, M. et al, Automatic Mutual Exclusion, http://research.microsoft.com/users/misard/papers/hotos2007.pdf, 2007. &lt;br /&gt;
&lt;br /&gt;
3. Nakajima, K. et al, Parallel Iterative Solvers for Finite-Element Methods using a Hybrid Programming Model on SMP Cluster Architectures, http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf, March 2003. &lt;br /&gt;
&lt;br /&gt;
4. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573, 14th International Parallel and Distributed Processing Symposium (IPDPS'00), 2000 &lt;br /&gt;
&lt;br /&gt;
5. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s &lt;br /&gt;
&lt;br /&gt;
6. Apple Threading Libraries, http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3212</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3212"/>
		<updated>2007-09-10T16:53:46Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* Ordering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
== Ordering ==&lt;br /&gt;
 &lt;br /&gt;
In parallel programming models, ordering is key to coordinating the activity of all threads. Ordering will ensure that dependencies are maintained and that specified threads remain synchronized via explicit synchronization operations. &lt;br /&gt;
&lt;br /&gt;
Parallel Programming models have developed to take advantage of shared memory multiprocessors and distributed memory systems. Nanothreads Programming Model (NPM) is one such programming model, and exploits multiple levels of loop and functional parallelism. This model results in a runtime environment that has dynamic program adaptability, allowing the program to adjust the granularity of the generated parallelism to the available resources. The main ordering and scheduling objective of this model is that application scheduling, at the user level, and virtual process scheduling, at the kernel level, be tightly coordinated. The result is high performance. &lt;br /&gt;
&lt;br /&gt;
Other programming models combine loop directives and message passing to maintain order and facilitate reordering. An example of a program using this method is the GeoFEM on the Earth Simulator Supercomputer in Japan. This is part of a parallel finite-element platform for solid earth simulation being studied. A special reordering technique was used to create parallel iterative solvers with localized preconditioning. This allows GeoFEM to attain concurrent local operations, no global dependency, continuous memory access, and sufficiently long innermost loops to take advantage of the vector processors on Earth Simulator.&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
Synchronization types have expanded to further facilitate reordering over the past several years. These methods now include:&lt;br /&gt;
&lt;br /&gt;
* Implicit ordering – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon. &lt;br /&gt;
&lt;br /&gt;
* Mutual Exclusion – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events. &lt;br /&gt;
&lt;br /&gt;
* Automatic Mutual Exclusion - In a simplified model, Automatic Mutual Exclusion consists of asynchronous method calls and guarantees that the program execution is essentially executing each of the calls in some serialized order. It achieves concurrency because the async construct is similar to forking a thread in thread-like systems. The system attempts to execute the method calls concurrently and is subject to strategies that prevent excessive transaction aborts. In more complicated models, the asynchronous methods may be fragmented, using a Yield function to synchronize the fragments prior to blocks. &lt;br /&gt;
&lt;br /&gt;
* Events – Specific events allow other processes to start. An event may trigger a single process or a group of processes. &lt;br /&gt;
&lt;br /&gt;
* Explicit Reordering – Programs avoid overhead by explicitly assigning and ordering processes to take advantage of data locality. This approach works well when there is complicated data dependency. &lt;br /&gt;
&lt;br /&gt;
* Reverse Cuthill-McKee (RCM) Reordering - RCM is a typical level set reordering method. Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node. &lt;br /&gt;
&lt;br /&gt;
* DJDS reordering- Reorders data to produce arrays of coefficients with continuous memory access. Vector programming is made more efficient by providing sufficient length for innermost loops. Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS) [3] provides a good explanation and comparison of RCM/PDJDS re-ordering techniques.&lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. These include: &lt;br /&gt;
&lt;br /&gt;
* Locks - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
* Semaphores - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code. &lt;br /&gt;
&lt;br /&gt;
* Critical regions - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
* Barriers - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available. &lt;br /&gt;
&lt;br /&gt;
* Atomic operations - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
New mechanisms, like that of a monotonic counter (see references), only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. The goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References: ==&lt;br /&gt;
 &lt;br /&gt;
1. Hadjidoukas, P. et all, Integrating MPI and the Nanothreads Programming Model, http://citeseer.ist.psu.edu/cache/papers/cs/27581/http:zSzzSzwww.hpclab.ceid.upatras.grzSzpgroupzSzmemberszSzpehzSzpubszSzpdp02.pdf/hadjidoukas02integrating.pdf, 2002. &lt;br /&gt;
&lt;br /&gt;
2. Isard, M. et al, Automatic Mutual Exclusion, http://research.microsoft.com/users/misard/papers/hotos2007.pdf, 2007. &lt;br /&gt;
&lt;br /&gt;
3. Nakajima, K. et al, Parallel Iterative Solvers for Finite-Element Methods using a Hybrid Programming Model on SMP Cluster Architectures, http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf, March 2003. &lt;br /&gt;
&lt;br /&gt;
4. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573, 14th International Parallel and Distributed Processing Symposium (IPDPS'00), 2000 &lt;br /&gt;
&lt;br /&gt;
5. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s &lt;br /&gt;
&lt;br /&gt;
6. Apple Threading Libraries, http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3210</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3210"/>
		<updated>2007-09-10T16:53:30Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* Synchronization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
== Ordering ==&lt;br /&gt;
 &lt;br /&gt;
In parallel programming models, ordering is key to coordinating the activity of all threads. Ordering will ensure that dependencies are maintained and that specified threads remain synchronized via explicit synchronization operations. &lt;br /&gt;
Parallel Programming models have developed to take advantage of shared memory multiprocessors and distributed memory systems. Nanothreads Programming Model (NPM) is one such programming model, and exploits multiple levels of loop and functional parallelism. This model results in a runtime environment that has dynamic program adaptability, allowing the program to adjust the granularity of the generated parallelism to the available resources. The main ordering and scheduling objective of this model is that application scheduling, at the user level, and virtual process scheduling, at the kernel level, be tightly coordinated. The result is high performance. &lt;br /&gt;
Other programming models combine loop directives and message passing to maintain order and facilitate reordering. An example of a program using this method is the GeoFEM on the Earth Simulator Supercomputer in Japan. This is part of a parallel finite-element platform for solid earth simulation being studied. A special reordering technique was used to create parallel iterative solvers with localized preconditioning. This allows GeoFEM to attain concurrent local operations, no global dependency, continuous memory access, and sufficiently long innermost loops to take advantage of the vector processors on Earth Simulator.&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
Synchronization types have expanded to further facilitate reordering over the past several years. These methods now include:&lt;br /&gt;
&lt;br /&gt;
* Implicit ordering – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon. &lt;br /&gt;
&lt;br /&gt;
* Mutual Exclusion – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events. &lt;br /&gt;
&lt;br /&gt;
* Automatic Mutual Exclusion - In a simplified model, Automatic Mutual Exclusion consists of asynchronous method calls and guarantees that the program execution is essentially executing each of the calls in some serialized order. It achieves concurrency because the async construct is similar to forking a thread in thread-like systems. The system attempts to execute the method calls concurrently and is subject to strategies that prevent excessive transaction aborts. In more complicated models, the asynchronous methods may be fragmented, using a Yield function to synchronize the fragments prior to blocks. &lt;br /&gt;
&lt;br /&gt;
* Events – Specific events allow other processes to start. An event may trigger a single process or a group of processes. &lt;br /&gt;
&lt;br /&gt;
* Explicit Reordering – Programs avoid overhead by explicitly assigning and ordering processes to take advantage of data locality. This approach works well when there is complicated data dependency. &lt;br /&gt;
&lt;br /&gt;
* Reverse Cuthill-McKee (RCM) Reordering - RCM is a typical level set reordering method. Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node. &lt;br /&gt;
&lt;br /&gt;
* DJDS reordering- Reorders data to produce arrays of coefficients with continuous memory access. Vector programming is made more efficient by providing sufficient length for innermost loops. Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS) [3] provides a good explanation and comparison of RCM/PDJDS re-ordering techniques.&lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. These include: &lt;br /&gt;
&lt;br /&gt;
* Locks - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
* Semaphores - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code. &lt;br /&gt;
&lt;br /&gt;
* Critical regions - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
* Barriers - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available. &lt;br /&gt;
&lt;br /&gt;
* Atomic operations - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
New mechanisms, like that of a monotonic counter (see references), only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. The goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References: ==&lt;br /&gt;
 &lt;br /&gt;
1. Hadjidoukas, P. et all, Integrating MPI and the Nanothreads Programming Model, http://citeseer.ist.psu.edu/cache/papers/cs/27581/http:zSzzSzwww.hpclab.ceid.upatras.grzSzpgroupzSzmemberszSzpehzSzpubszSzpdp02.pdf/hadjidoukas02integrating.pdf, 2002. &lt;br /&gt;
&lt;br /&gt;
2. Isard, M. et al, Automatic Mutual Exclusion, http://research.microsoft.com/users/misard/papers/hotos2007.pdf, 2007. &lt;br /&gt;
&lt;br /&gt;
3. Nakajima, K. et al, Parallel Iterative Solvers for Finite-Element Methods using a Hybrid Programming Model on SMP Cluster Architectures, http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf, March 2003. &lt;br /&gt;
&lt;br /&gt;
4. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573, 14th International Parallel and Distributed Processing Symposium (IPDPS'00), 2000 &lt;br /&gt;
&lt;br /&gt;
5. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s &lt;br /&gt;
&lt;br /&gt;
6. Apple Threading Libraries, http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3206</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3206"/>
		<updated>2007-09-10T16:52:12Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* Ordering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
== Ordering ==&lt;br /&gt;
 &lt;br /&gt;
In parallel programming models, ordering is key to coordinating the activity of all threads. Ordering will ensure that dependencies are maintained and that specified threads remain synchronized via explicit synchronization operations. &lt;br /&gt;
Parallel Programming models have developed to take advantage of shared memory multiprocessors and distributed memory systems. Nanothreads Programming Model (NPM) is one such programming model, and exploits multiple levels of loop and functional parallelism. This model results in a runtime environment that has dynamic program adaptability, allowing the program to adjust the granularity of the generated parallelism to the available resources. The main ordering and scheduling objective of this model is that application scheduling, at the user level, and virtual process scheduling, at the kernel level, be tightly coordinated. The result is high performance. &lt;br /&gt;
Other programming models combine loop directives and message passing to maintain order and facilitate reordering. An example of a program using this method is the GeoFEM on the Earth Simulator Supercomputer in Japan. This is part of a parallel finite-element platform for solid earth simulation being studied. A special reordering technique was used to create parallel iterative solvers with localized preconditioning. This allows GeoFEM to attain concurrent local operations, no global dependency, continuous memory access, and sufficiently long innermost loops to take advantage of the vector processors on Earth Simulator.&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. &lt;br /&gt;
These include:&lt;br /&gt;
&lt;br /&gt;
''Locks'' - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
''Semaphores'' - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code.&lt;br /&gt;
&lt;br /&gt;
''Critical regions&amp;quot; - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
''Barriers'' - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available.  &lt;br /&gt;
&lt;br /&gt;
''Atomic operations'' - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
&lt;br /&gt;
This list is short, has not changed much in the recent past and is unlikely to change any time soon. Any new mechanisms like that of a monotonic counter(see references) only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. These goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures. &lt;br /&gt;
&lt;br /&gt;
''References''&lt;br /&gt;
&lt;br /&gt;
1. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573,  14th International Parallel and Distributed Processing Symposium (IPDPS'00),  2000&lt;br /&gt;
&lt;br /&gt;
2. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s&lt;br /&gt;
&lt;br /&gt;
3. Apple Threading Libraries, &lt;br /&gt;
http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3201</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3201"/>
		<updated>2007-09-10T16:42:02Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* Reordering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
== Ordering ==&lt;br /&gt;
 &lt;br /&gt;
In parallel programming models, ordering is key to coordinating the activity of all threads. Ordering will ensure that dependencies are maintained and that specified threads remain synchronized via explicit synchronization operations.  &lt;br /&gt;
&lt;br /&gt;
Parallel Programming models have developed to take advantage of shared memory multiprocessors and distributed memory systems. Nanothreads Programming Model (NPM) is one such programming model that exploits multiple levels of loop and functional parallelism. This model results in a runtime environment that has dynamic program adaptability, allowing the program to adjust the granularity of the generated parallelism to the available resources.  The main ordering and scheduling objective of this model is that application scheduling, at the user level, and virtual process scheduling, at the kernel level, be tightly coordinated. The result is high performance.&lt;br /&gt;
&lt;br /&gt;
Other programming models combine loop directives and message passing to maintain order and facilitate reordering. An example of a program using this method is the GeoFEM on the Earth Simulator Supercomputer in Japan. This is part of a parallel finite-element platform for solid earth simulation being studied. A special reordering technique was used to create parallel iterative solvers with localized preconditioning. This allows GeoFEM to attain concurrent local operations, no global dependancy, continuous memory access, and sufficiently long innermost loops to take advantage of the vector processors on Earth Simulator.&lt;br /&gt;
&lt;br /&gt;
Implicit ordering – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon. &lt;br /&gt;
&lt;br /&gt;
Mutual Exclusion – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events. &lt;br /&gt;
&lt;br /&gt;
Automatic Mutual Exclusion - In a simplified model, Automatic Mutual Exclusion consists of asynchronous method calls and guarantees that the program execution is essentially executing each of the calls in some serialized order. It achieves concurrency because the async construct is similar to forking a thread in thread-like systems. The system attempts to execute the method calls concurrently and is subject to strategies that prevent excessive transaction aborts. In more complicated models, the asynchronous methods may be fragmented, using a Yield function to synchronize the fragments prior to blocks. &lt;br /&gt;
&lt;br /&gt;
Events – Specific events allow other processes to start. An event may trigger a single process or a group of processes.&lt;br /&gt;
 &lt;br /&gt;
Explicit Reordering – Programs avoid overhead by explicitly assigning and ordering processes to take advantage of data locality. This approach works well when there is complicated data dependency. &lt;br /&gt;
&lt;br /&gt;
Reverse Cuthill-McKee (RCM) Reordering - RCM is a typical level set reordering method. Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node. &lt;br /&gt;
&lt;br /&gt;
DJDS reordering- Reorders data to produce arrays of coefficients with continuous memory access. Vector programming is made more efficient by providing sufficient length for innermost loops. Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS) &lt;br /&gt;
[3] provides a good explanation and comparison of RCM/PDJDS re-ordering techniques. &lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
&lt;br /&gt;
1. Hadjidoukas, P. et all, Integrating MPI and the Nanothreads Programming Model, http://citeseer.ist.psu.edu/cache/papers/cs/27581/http:zSzzSzwww.hpclab.ceid.upatras.grzSzpgroupzSzmemberszSzpehzSzpubszSzpdp02.pdf/hadjidoukas02integrating.pdf, &lt;br /&gt;
2002.&lt;br /&gt;
&lt;br /&gt;
2. Isard, M. et al, Automatic Mutual Exclusion,  http://research.microsoft.com/users/misard/papers/hotos2007.pdf, 2007.&lt;br /&gt;
&lt;br /&gt;
3. Nakajima, K. et al, Parallel Iterative Solvers for Finite-Element Methods using a Hybrid Programming Model on SMP Cluster Architectures, http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf, March 2003.&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. &lt;br /&gt;
These include:&lt;br /&gt;
&lt;br /&gt;
''Locks'' - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
''Semaphores'' - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code.&lt;br /&gt;
&lt;br /&gt;
''Critical regions&amp;quot; - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
''Barriers'' - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available.  &lt;br /&gt;
&lt;br /&gt;
''Atomic operations'' - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
&lt;br /&gt;
This list is short, has not changed much in the recent past and is unlikely to change any time soon. Any new mechanisms like that of a monotonic counter(see references) only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. These goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures. &lt;br /&gt;
&lt;br /&gt;
''References''&lt;br /&gt;
&lt;br /&gt;
1. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573,  14th International Parallel and Distributed Processing Symposium (IPDPS'00),  2000&lt;br /&gt;
&lt;br /&gt;
2. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s&lt;br /&gt;
&lt;br /&gt;
3. Apple Threading Libraries, &lt;br /&gt;
http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3181</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3181"/>
		<updated>2007-09-10T03:21:58Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* Reordering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
== Reordering ==&lt;br /&gt;
 &lt;br /&gt;
Reordering strategies include: &lt;br /&gt;
&lt;br /&gt;
Implicit ordering – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon. &lt;br /&gt;
&lt;br /&gt;
Mutual Exclusion – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events. &lt;br /&gt;
&lt;br /&gt;
Automatic Mutual Exclusion - In a simplified model, Automatic Mutual Exclusion consists of asynchronous method calls and guarantees that the program execution is essentially executing each of the calls in some serialized order. It achieves concurrency because the async construct is similar to forking a thread in thread-like systems. The system attempts to execute the method calls concurrently and is subject to strategies that prevent excessive transaction aborts. In more complicated models, the asynchronous methods may be fragmented, using a Yield function to synchronize the fragments prior to blocks. &lt;br /&gt;
&lt;br /&gt;
Events – Specific events allow other processes to start. An event may trigger a single process or a group of processes.&lt;br /&gt;
 &lt;br /&gt;
Explicit Reordering – Programs avoid overhead by explicitly assigning and ordering processes to take advantage of data locality. This approach works well when there is complicated data dependency. &lt;br /&gt;
&lt;br /&gt;
Reverse Cuthill-McKee (RCM) Reordering - RCM is a typical level set reordering method. Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node. &lt;br /&gt;
&lt;br /&gt;
DJDS reordering- Reorders data to produce arrays of coefficients with continuous memory access. Vector programming is made more efficient by providing sufficient length for innermost loops. Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS) &lt;br /&gt;
[1] provides a good explanation and comparison of RCM/PDJDS re-ordering techniques. &lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
&lt;br /&gt;
1. Nakajima, K. et al, Parallel Iterative Solvers for Finite-Element Methods using a Hybrid Programming Model on SMP Cluster Architectures, http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf, March 2003.&lt;br /&gt;
&lt;br /&gt;
2. Isard, M. et al, Automatic Mutual Exclusion,  http://research.microsoft.com/users/misard/papers/hotos2007.pdf, 2007.&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. &lt;br /&gt;
These include:&lt;br /&gt;
&lt;br /&gt;
''Locks'' - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
''Semaphores'' - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code.&lt;br /&gt;
&lt;br /&gt;
''Critical regions&amp;quot; - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
''Barriers'' - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available.  &lt;br /&gt;
&lt;br /&gt;
''Atomic operations'' - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
&lt;br /&gt;
This list is short, has not changed much in the recent past and is unlikely to change any time soon. Any new mechanisms like that of a monotonic counter(see references) only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. These goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures. &lt;br /&gt;
&lt;br /&gt;
''References''&lt;br /&gt;
&lt;br /&gt;
1. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573,  14th International Parallel and Distributed Processing Symposium (IPDPS'00),  2000&lt;br /&gt;
&lt;br /&gt;
2. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s&lt;br /&gt;
&lt;br /&gt;
3. Apple Threading Libraries, &lt;br /&gt;
http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3180</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3180"/>
		<updated>2007-09-10T03:21:12Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* Reordering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
== Reordering ==&lt;br /&gt;
 &lt;br /&gt;
Reordering strategies in the book include: &lt;br /&gt;
&lt;br /&gt;
Implicit ordering – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon. &lt;br /&gt;
&lt;br /&gt;
Mutual Exclusion – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events. &lt;br /&gt;
&lt;br /&gt;
Automatic Mutual Exclusion - In a simplified model, Automatic Mutual Exclusion consists of asynchronous method calls and guarantees that the program execution is essentially executing each of the calls in some serialized order. It achieves concurrency because the async construct is similar to forking a thread in thread-like systems. The system attempts to execute the method calls concurrently and is subject to strategies that prevent excessive transaction aborts. In more complicated models, the asynchronous methods may be fragmented, using a Yield function to synchronize the fragments prior to blocks. &lt;br /&gt;
&lt;br /&gt;
Events – Specific events allow other processes to start. An event may trigger a single process or a group of processes.&lt;br /&gt;
 &lt;br /&gt;
Explicit Reordering – Programs avoid overhead by explicitly assigning and ordering processes to take advantage of data locality. This approach works well when there is complicated data dependency. &lt;br /&gt;
&lt;br /&gt;
Reverse Cuthill-McKee (RCM) Reordering - RCM is a typical level set reordering method. Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node. &lt;br /&gt;
&lt;br /&gt;
DJDS reordering- Reorders data to produce arrays of coefficients with continuous memory access. Vector programming is made more efficient by providing sufficient length for innermost loops. Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS) &lt;br /&gt;
[1] provides a good explanation and comparison of RCM/PDJDS re-ordering techniques. &lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
&lt;br /&gt;
1. Nakajima, K. et al, Parallel Iterative Solvers for Finite-Element Methods using a Hybrid Programming Model on SMP Cluster Architectures, http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf, March 2003.&lt;br /&gt;
&lt;br /&gt;
2. Isard, M. et al, Automatic Mutual Exclusion,  http://research.microsoft.com/users/misard/papers/hotos2007.pdf, 2007.&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. &lt;br /&gt;
These include:&lt;br /&gt;
&lt;br /&gt;
''Locks'' - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
''Semaphores'' - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code.&lt;br /&gt;
&lt;br /&gt;
''Critical regions&amp;quot; - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
''Barriers'' - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available.  &lt;br /&gt;
&lt;br /&gt;
''Atomic operations'' - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
&lt;br /&gt;
This list is short, has not changed much in the recent past and is unlikely to change any time soon. Any new mechanisms like that of a monotonic counter(see references) only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. These goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures. &lt;br /&gt;
&lt;br /&gt;
''References''&lt;br /&gt;
&lt;br /&gt;
1. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573,  14th International Parallel and Distributed Processing Symposium (IPDPS'00),  2000&lt;br /&gt;
&lt;br /&gt;
2. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s&lt;br /&gt;
&lt;br /&gt;
3. Apple Threading Libraries, &lt;br /&gt;
http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3179</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=3179"/>
		<updated>2007-09-10T03:20:49Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* Reordering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
== Reordering ==&lt;br /&gt;
 &lt;br /&gt;
Reordering strategies in the book include: &lt;br /&gt;
&lt;br /&gt;
Implicit ordering – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon. &lt;br /&gt;
&lt;br /&gt;
Mutual Exclusion – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events. &lt;br /&gt;
&lt;br /&gt;
Automatic Mutual Exclusion - In a simplified model, Automatic Mutual Exclusion consists of asynchronous method calls and guarantees that the program execution is essentially executing each of the calls in some serialized order. It achieves concurrency because the async construct is similar to forking a thread in thread-like systems. The system attempts to execute the method calls concurrently and is subject to strategies that prevent excessive transaction aborts. In more complicated models, the asynchronous methods may be fragmented, using a Yield function to synchronize the fragments prior to blocks. &lt;br /&gt;
&lt;br /&gt;
Events – Specific events allow other processes to start. An event may trigger a single process or a group of processes.&lt;br /&gt;
 &lt;br /&gt;
Explicit Reordering – Programs avoid overhead by explicitly assigning and ordering processes to take advantage of data locality. This approach works well when there is complicated data dependency. &lt;br /&gt;
&lt;br /&gt;
Reverse Cuthill-McKee (RCM) Reordering - RCM is a typical level set reordering method. Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node. &lt;br /&gt;
&lt;br /&gt;
DJDS reordering- Reorders data to produce arrays of coefficients with continuous memory access. Vector programming is made more efficient by providing sufficient length for innermost loops. Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS) &lt;br /&gt;
[1] provides a good explanation and comparison of RCM/PDJDS re-ordering techniques. &lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
&lt;br /&gt;
1. Nakajima, K. et al, Parallel Iterative Solvers for Finite-Element Methods using a Hybrid Programming Model on SMP Cluster Architectures, http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf, March 2003.&lt;br /&gt;
2. Isard, M. et al, Automatic Mutual Exclusion,  http://research.microsoft.com/users/misard/papers/hotos2007.pdf, 2007.&lt;br /&gt;
&lt;br /&gt;
== Synchronization == &lt;br /&gt;
&lt;br /&gt;
There is a small collection of tools that are commonly used for synchronization in parallel architectures. &lt;br /&gt;
These include:&lt;br /&gt;
&lt;br /&gt;
''Locks'' - Locks limit access to shared resources by identifying each resource as being available or unavailable. Successful acquisition of a lock means that your code now has the right to use the protected resource. &lt;br /&gt;
&lt;br /&gt;
''Semaphores'' - A semaphore is a flag that signals the presence of a specific condition in your program. Semaphores offer a way to synchronize the execution of code.&lt;br /&gt;
&lt;br /&gt;
''Critical regions&amp;quot; - A critical region is a section of code that can be executed by only one thread at a time. You might designate a block of code as a critical region to prevent modification of a common data structure or to prevent race conditions as two threads execute the same code. &lt;br /&gt;
&lt;br /&gt;
''Barriers'' - Deadlock occurs whenever a thread is blocked waiting on a resource of another thread that will never become available.  &lt;br /&gt;
&lt;br /&gt;
''Atomic operations'' - The x86 bit test and set is an example of Instruction Set Architecture support for synchronization. They simplify synchronization by eliminating the need to locks altogether. &lt;br /&gt;
&lt;br /&gt;
This list is short, has not changed much in the recent past and is unlikely to change any time soon. Any new mechanisms like that of a monotonic counter(see references) only build on existing process synchronization constructs. Most of the effort and research seems to be going in the way of building threading libraries that will allow software developers to build scalable applications that can optimally utilize massively parallel architectures. These goal of these libraries is to reduce the amount of time spent on dealing with the low-level without compromising on the performance of the applications. Intel, for example, has gone public with an open source threading building block library with promises that it will become the STL(Standard Template Library) for multi-threaded applications. These libraries allow rapid application development of new applications while hiding the low-level thread synchronization mechanics. A few years ago, distributed computing was the talk of the town but with the movement of PC architecture toward multiple cores per processor, these threading libraries will have a big role to play in getting the best performance out of these new architectures. &lt;br /&gt;
&lt;br /&gt;
''References''&lt;br /&gt;
&lt;br /&gt;
1. John Thornley, K. Mani Chandy, &amp;quot;Monotonic Counters: A New Mechanism for Thread Synchronization,&amp;quot; ipdps, p. 573,  14th International Parallel and Distributed Processing Symposium (IPDPS'00),  2000&lt;br /&gt;
&lt;br /&gt;
2. Intel Threading Building Blocks 2.0, http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm?cid=cim:ggl|spd_us_tbb|k7A3E|s&lt;br /&gt;
&lt;br /&gt;
3. Apple Threading Libraries, &lt;br /&gt;
http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/articles/ThreadLocking.html&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2590</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2590"/>
		<updated>2007-09-05T16:16:05Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* How have reordering strategies evolved to accommodate larger multicomputers? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
== How have reordering strategies evolved to accommodate larger multicomputers? ==&lt;br /&gt;
 &lt;br /&gt;
Reordering strategies in the book include: &lt;br /&gt;
&lt;br /&gt;
''Implicit ordering'' – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon.&lt;br /&gt;
&lt;br /&gt;
''Mutual Exclusion'' – Certain operations on certain data are performed by only one thread/process at a time. The processes are sequential, but without a specific order or events.&lt;br /&gt;
&lt;br /&gt;
''Events'' – Specific events allow other processes to start. An event may trigger a single process or a group of processes. &lt;br /&gt;
&lt;br /&gt;
In more recent years, advances have been made to accommodate larger multicomputers. These advances include developments in reordering both processes and the data being used by the processes.&lt;br /&gt;
&lt;br /&gt;
'''Process Ordering'''&lt;br /&gt;
&lt;br /&gt;
''Explicit Reordering'' – Programs avoid overhead by explicitly assigning and ordering processes to take advantage of data locality. This approach works well when there is complicated data dependency.&lt;br /&gt;
&lt;br /&gt;
'''Data Reordering''':&lt;br /&gt;
&lt;br /&gt;
''Reverse Cuthill-McKee (RCM) Reordering'' -  RCM is a typical level set reordering method.  Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node.&lt;br /&gt;
&lt;br /&gt;
''DJDS reordering''-  Reorders data to produce arrays of coefficients with continuous memory access. Vector programming is made more efficient by providing sufficient length for innermost loops. Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS)&lt;br /&gt;
&lt;br /&gt;
[http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf] provides a good explanation and comparison of RCM/PDJDS re-ordering techniques.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Have new kinds of synchronization operations been developed?''' &lt;br /&gt;
&lt;br /&gt;
'''I doubt that other topics covered in these sections have changed much, but do check.'''&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2409</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2409"/>
		<updated>2007-09-05T02:28:14Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* How have reordering strategies evolved to accommodate larger multicomputers? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
== How have reordering strategies evolved to accommodate larger multicomputers? ==&lt;br /&gt;
 &lt;br /&gt;
Strategies in the book include: &lt;br /&gt;
&lt;br /&gt;
''Implicit ordering'' – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon.&lt;br /&gt;
&lt;br /&gt;
''Mutual Exclusion'' – Certain operations on certain data are performed by only one thread/process at a time. Sequential without the specific order or events.&lt;br /&gt;
&lt;br /&gt;
''Events'' – Specific events allow other processes to start. “Events may be point to point, involving a pair of processes, or they may be global,” involving all or a group of processes.&lt;br /&gt;
&lt;br /&gt;
Updated information&lt;br /&gt;
&lt;br /&gt;
'''Process Ordering'''&lt;br /&gt;
&lt;br /&gt;
''Explicit Reordering'' – Avoid overhead by explicitly assigning and ordering to take advantage of data locality. Complicated Data Dependency&lt;br /&gt;
&lt;br /&gt;
'''Data Reordering''':&lt;br /&gt;
&lt;br /&gt;
''Reverse Cuthill-McKee (RCM) Reordering'' -  Typical level set reordering method.  Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node.&lt;br /&gt;
&lt;br /&gt;
''Multicoloring reordering'' – &lt;br /&gt;
&lt;br /&gt;
''DJDS reordering''- “For efficient vector processing, producing 1D arrays of coefficients with continuous memory access and sufficient length of innermost loops.”&lt;br /&gt;
Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS)&lt;br /&gt;
&lt;br /&gt;
[http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf] provides a good explanation and comparison of RCM/CM/PDJDS re-ordering techniques.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Have new kinds of synchronization operations been developed?''' &lt;br /&gt;
&lt;br /&gt;
'''I doubt that other topics covered in these sections have changed much, but do check.'''&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2408</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2408"/>
		<updated>2007-09-05T02:27:48Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
== How have reordering strategies evolved to accommodate larger multicomputers? ==&lt;br /&gt;
 &lt;br /&gt;
Strategies in the book include: &lt;br /&gt;
&lt;br /&gt;
''Implicit ordering'' – Operations in a thread are in program order. When multiple threads access the same data, there is no guarantee that they will not reach the data too late/too soon.&lt;br /&gt;
&lt;br /&gt;
''Mutual Exclusion'' – Certain operations on certain data are performed by only one thread/process at a time. Sequential without the specific order or events.&lt;br /&gt;
&lt;br /&gt;
''Events'' – Specific events allow other processes to start. “Events may be point to point, involving a pair of processes, or they may be global,” involving all or a group of processes.&lt;br /&gt;
&lt;br /&gt;
Updated information&lt;br /&gt;
&lt;br /&gt;
'''Process Ordering'''&lt;br /&gt;
&lt;br /&gt;
''Explicit Reordering'' – Avoid overhead by explicitly assigning and ordering to take advantage of data locality. Complicated Data Dependency&lt;br /&gt;
&lt;br /&gt;
'''Data Reordering''':&lt;br /&gt;
&lt;br /&gt;
''Reverse Cuthill-McKee (RCM) Reordering'' -  Typical level set reordering method.  Elements of a level set are traversed from the nodes of the highest degree to those of the lowest degree, according to dependency relationships. Degree refers to the number of nodes connected to each node.&lt;br /&gt;
&lt;br /&gt;
''Multicoloring reordering'' – &lt;br /&gt;
&lt;br /&gt;
''DJDS reordering''- “For efficient vector processing, producing 1D arrays of coefficients with continuous memory access and sufficient length of innermost loops.”&lt;br /&gt;
     Descending-order jagged diagonal storage (DJDS) involves permuting rows into an order of decreasing number of non-zeros. Can be modified to split and permute arrays to be distributed across an SMP node (parallel DJDS or PDJDS)&lt;br /&gt;
&lt;br /&gt;
[http://geofem.tokyo.rist.or.jp/report_common/GeoFEM03_003.pdf] provides a good explanation and comparison of RCM/CM/PDJDS re-ordering techniques.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Have new kinds of synchronization operations been developed?''' &lt;br /&gt;
&lt;br /&gt;
'''I doubt that other topics covered in these sections have changed much, but do check.'''&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2288</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2288"/>
		<updated>2007-09-04T02:18:13Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''How have reordering strategies evolved to accommodate larger multicomputers?''' &lt;br /&gt;
&lt;br /&gt;
Strategies in the book include:&lt;br /&gt;
&lt;br /&gt;
''Implicit ordering''&lt;br /&gt;
&lt;br /&gt;
''Mutual Exclusion''&lt;br /&gt;
&lt;br /&gt;
''Events''&lt;br /&gt;
&lt;br /&gt;
*Will add more detail on Tues*&lt;br /&gt;
&lt;br /&gt;
'''Have new kinds of synchronization operations been developed?''' &lt;br /&gt;
&lt;br /&gt;
'''I doubt that other topics covered in these sections have changed much, but do check.'''&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2286</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2286"/>
		<updated>2007-09-04T01:58:44Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: /* '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''How have reordering strategies evolved to accommodate larger multicomputers?''' &lt;br /&gt;
&lt;br /&gt;
Strategies in the book include:&lt;br /&gt;
Implicit ordering&lt;br /&gt;
Mutual Exclusion&lt;br /&gt;
Events&lt;br /&gt;
&lt;br /&gt;
'''Have new kinds of synchronization operations been developed?''' &lt;br /&gt;
&lt;br /&gt;
'''I doubt that other topics covered in these sections have changed much, but do check.'''&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2285</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2285"/>
		<updated>2007-09-04T01:27:15Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Sections 1.3.1 and 1.3.2: Communication and programming model.''' ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''How have reordering strategies evolved to accommodate larger multicomputers?''' &lt;br /&gt;
&lt;br /&gt;
'''Have new kinds of synchronization operations been developed?''' &lt;br /&gt;
&lt;br /&gt;
'''I doubt that other topics covered in these sections have changed much, but do check.'''&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2253</id>
		<title>CSC/ECE 506 Fall 2007/wiki 11 e4</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki_11_e4&amp;diff=2253"/>
		<updated>2007-09-03T18:02:58Z</updated>

		<summary type="html">&lt;p&gt;Sbhanna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Something to start with&lt;/div&gt;</summary>
		<author><name>Sbhanna</name></author>
	</entry>
</feed>