<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Parallel_algorithm</id>
	<title>Parallel algorithm - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Parallel_algorithm"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Parallel_algorithm&amp;action=history"/>
	<updated>2026-10-24T12:45:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Parallel_algorithm&amp;diff=4491961&amp;oldid=prev</id>
		<title>imported&gt;LucasH02: Added links to related wikipedia pages in distributed algorithms section</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Parallel_algorithm&amp;diff=4491961&amp;oldid=prev"/>
		<updated>2025-12-21T07:44:26Z</updated>

		<summary type="html">&lt;p&gt;Added links to related wikipedia pages in distributed algorithms section&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Previous revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:44, 21 December 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l37&quot;&gt;Line 37:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 37:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{expand section|date=February 2014}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{expand section|date=February 2014}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A subtype of parallel algorithms, &amp;#039;&amp;#039;[[distributed algorithm]]s&amp;#039;&amp;#039;, are algorithms designed to work in [[cluster computing]] and [[distributed computing]] environments, where additional concerns beyond the scope of &amp;quot;classical&amp;quot; parallel algorithms need to be addressed.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A subtype of parallel algorithms, &amp;#039;&amp;#039;[[distributed algorithm]]s&amp;#039;&amp;#039;, are algorithms designed to work in [[cluster computing]] and [[distributed computing]] environments, where additional concerns beyond the scope of &amp;quot;classical&amp;quot; parallel algorithms need to be addressed.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Distributed algorithms are intended to run on a network of interconnected computers that communicate through shared memory or message passing. Unlike traditional parallel algorithms, they must operate under additional constraints such as limited local knowledge, communication delays, the lack of a global state, and the possibility of node failures.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The focus of distributed algorithms is on coordination problems that arise in distributed systems, including [[leader election]], [[mutual exclusion]], and [[consensus (computer science)]]. These problems are studied under different system models with varying assumptions, such as whether the system is synchronous or asynchronous and if there are failures, such as crash failures or [[Byzantine fault|Byzantine failures]].&amp;lt;ref&amp;gt;Hagit Attiya and Jennifer Welch. &#039;&#039;Distributed Computing: Fundamentals, Simulations, and Advanced Topics&#039;&#039;. 2nd ed., Wiley, 2004.&amp;lt;/ref&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Distributed algorithms have many practical applications in distributed databases, fault-tolerance systems, and large-scale networked applications.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==See also==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==See also==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>imported&gt;LucasH02</name></author>
	</entry>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Parallel_algorithm&amp;diff=3405848&amp;oldid=prev</id>
		<title>imported&gt;Shonfeder: /* Parallelizability */ typo fix</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Parallel_algorithm&amp;diff=3405848&amp;oldid=prev"/>
		<updated>2025-08-14T04:14:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Parallelizability: &lt;/span&gt; typo fix&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Previous revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:14, 14 August 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot;&gt;Line 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Some problems cannot be split up into parallel portions, as they require the results from a preceding step to effectively carry on with the next step – these are called &amp;#039;&amp;#039;&amp;#039;{{visible anchor|inherently serial problem}}s&amp;#039;&amp;#039;&amp;#039;. Examples include iterative [[numerical analysis|numerical methods]], such as [[Newton&amp;#039;s method]], iterative solutions to the [[three-body problem]], and most of the available algorithms to compute [[pi]] (π).{{citation needed|date=August 2019}} Some sequential algorithms can be converted into parallel algorithms using [[automatic parallelization]].&amp;lt;ref name=&amp;quot;MXian1997&amp;quot;&amp;gt;{{cite book |author1=Megson G M|author2=Chen Xian|title=Automatic Parallelization For A Class Of Regular Computations|url=https://books.google.com/books?id=1wHtCgAAQBAJ&amp;amp;q=%22parallel+algorithm%22|date=4 January 1997|publisher=World Scientific|isbn=978-981-4498-41-8}}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Some problems cannot be split up into parallel portions, as they require the results from a preceding step to effectively carry on with the next step – these are called &amp;#039;&amp;#039;&amp;#039;{{visible anchor|inherently serial problem}}s&amp;#039;&amp;#039;&amp;#039;. Examples include iterative [[numerical analysis|numerical methods]], such as [[Newton&amp;#039;s method]], iterative solutions to the [[three-body problem]], and most of the available algorithms to compute [[pi]] (π).{{citation needed|date=August 2019}} Some sequential algorithms can be converted into parallel algorithms using [[automatic parallelization]].&amp;lt;ref name=&amp;quot;MXian1997&amp;quot;&amp;gt;{{cite book |author1=Megson G M|author2=Chen Xian|title=Automatic Parallelization For A Class Of Regular Computations|url=https://books.google.com/books?id=1wHtCgAAQBAJ&amp;amp;q=%22parallel+algorithm%22|date=4 January 1997|publisher=World Scientific|isbn=978-981-4498-41-8}}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In many cases developing an effective parallel algorithm &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for solution of some &lt;/del&gt;task requires &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;attraction of &lt;/del&gt;new ideas and methods &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;comparing to creating &lt;/del&gt;a sequential algorithm &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;version&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;These are, for instance, &lt;/del&gt;practically important problems of searching a target element in data &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;structures, &lt;/del&gt;evaluation of an algebraic expression&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, etc&lt;/del&gt;.&amp;lt;ref&amp;gt;{{Cite book |last=Kurgalin |first=Sergei |title=The discrete math workbook: a companion manual using Python |last2=Borzunov |first2=Sergei |date=2020 |publisher=Springer Naturel |isbn=978-3-030-42220-2 |edition=2nd |series=Texts in Computer Science |location=Cham, Switzerland}}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In many cases developing an effective parallel algorithm &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;so solve a &lt;/ins&gt;task requires &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;developing &lt;/ins&gt;new ideas and methods &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;not needed in the design of &lt;/ins&gt;a sequential algorithm &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;to solve the same problem&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Examples of such cases include the &lt;/ins&gt;practically important problems of searching &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for &lt;/ins&gt;a target element in &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a &lt;/ins&gt;data &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;structure and the &lt;/ins&gt;evaluation of an algebraic expression.&amp;lt;ref&amp;gt;{{Cite book |last=Kurgalin |first=Sergei |title=The discrete math workbook: a companion manual using Python |last2=Borzunov |first2=Sergei |date=2020 |publisher=Springer Naturel |isbn=978-3-030-42220-2 |edition=2nd |series=Texts in Computer Science |location=Cham, Switzerland}}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Motivation==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Motivation==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>imported&gt;Shonfeder</name></author>
	</entry>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Parallel_algorithm&amp;diff=109095&amp;oldid=prev</id>
		<title>imported&gt;OlliverWithDoubleL: Added short description</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Parallel_algorithm&amp;diff=109095&amp;oldid=prev"/>
		<updated>2025-01-17T08:29:40Z</updated>

		<summary type="html">&lt;p&gt;Added short description&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Algorithm which can do multiple operations in a given time}}&lt;br /&gt;
{{More citations needed|date=November 2012}}&lt;br /&gt;
In [[computer science]], a &amp;#039;&amp;#039;&amp;#039;parallel algorithm&amp;#039;&amp;#039;&amp;#039;, as opposed to a traditional [[serial algorithm]], is an [[algorithm]] which can do multiple operations in a given time. It has been a tradition of [[computer science]] to describe serial algorithms in [[abstract machine]] models, often the one known as [[random-access machine]]. Similarly, many computer science researchers have used a so-called [[parallel random-access machine]] (PRAM) as a parallel abstract machine (shared-memory).&amp;lt;ref&amp;gt;{{cite web |title=Parallel Algorithms |first1=Guy E. |last1=Blelloch |first2=Bruce M. |last2=Maggs |publisher=School of Computer Science, [[Carnegie Mellon University]] |location=USA |access-date=2015-07-27 |url=https://www.cs.cmu.edu/~guyb/papers/BM04.pdf}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |title=Thinking in Parallel: Some Basic Data-Parallel Algorithms and Techniques, 104 pages |first=Uzi |last=Vishkin |publisher=Class notes of courses on parallel algorithms taught since 1992 at the University of Maryland, College Park, Tel Aviv University and the Technion |date=2009 |url=http://users.umiacs.umd.edu/~vishkin/PUBLICATIONS/classnotes.pdf}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many parallel algorithms are executed [[concurrent computing|concurrently]] – though in general [[concurrent algorithm]]s are a distinct concept – and thus these concepts are often conflated, with which aspect of an algorithm is parallel and which is concurrent not being clearly distinguished. Further, non-parallel, non-concurrent algorithms are often referred to as &amp;quot;[[sequential algorithm]]s&amp;quot;, by contrast with concurrent algorithms.&lt;br /&gt;
&lt;br /&gt;
==Parallelizability==&lt;br /&gt;
{{see also|Analysis of parallel algorithms}}&lt;br /&gt;
Algorithms vary significantly in how parallelizable they are, ranging from easily parallelizable to completely unparallelizable. Further, a given problem may accommodate different algorithms, which may be more or less parallelizable.&lt;br /&gt;
&lt;br /&gt;
Some problems are easy to divide up into pieces in this way – these are called &amp;#039;&amp;#039;[[embarrassingly parallel]] problems.&amp;#039;&amp;#039; Examples include many algorithms to solve [[Rubik&amp;#039;s Cube]]s and find values which result in a given [[associative array|hash]].{{citation needed|date=December 2019}}&lt;br /&gt;
&lt;br /&gt;
Some problems cannot be split up into parallel portions, as they require the results from a preceding step to effectively carry on with the next step – these are called &amp;#039;&amp;#039;&amp;#039;{{visible anchor|inherently serial problem}}s&amp;#039;&amp;#039;&amp;#039;. Examples include iterative [[numerical analysis|numerical methods]], such as [[Newton&amp;#039;s method]], iterative solutions to the [[three-body problem]], and most of the available algorithms to compute [[pi]] (π).{{citation needed|date=August 2019}} Some sequential algorithms can be converted into parallel algorithms using [[automatic parallelization]].&amp;lt;ref name=&amp;quot;MXian1997&amp;quot;&amp;gt;{{cite book |author1=Megson G M|author2=Chen Xian|title=Automatic Parallelization For A Class Of Regular Computations|url=https://books.google.com/books?id=1wHtCgAAQBAJ&amp;amp;q=%22parallel+algorithm%22|date=4 January 1997|publisher=World Scientific|isbn=978-981-4498-41-8}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In many cases developing an effective parallel algorithm for solution of some task requires attraction of new ideas and methods comparing to creating a sequential algorithm version. These are, for instance, practically important problems of searching a target element in data structures, evaluation of an algebraic expression, etc.&amp;lt;ref&amp;gt;{{Cite book |last=Kurgalin |first=Sergei |title=The discrete math workbook: a companion manual using Python |last2=Borzunov |first2=Sergei |date=2020 |publisher=Springer Naturel |isbn=978-3-030-42220-2 |edition=2nd |series=Texts in Computer Science |location=Cham, Switzerland}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
Parallel algorithms on individual devices have become more common since the early 2000s because of substantial improvements in [[multiprocessing]] systems and the rise of [[multi-core]] processors. Up until the end of 2004, single-core processor performance rapidly increased via [[frequency scaling]], and thus it was easier to construct a computer with a single fast core than one with many slower cores with the same [[throughput]], so multicore systems were of more limited use. Since 2004 however, frequency scaling hit a wall, and thus multicore systems have become more widespread, making parallel algorithms of more general use.&lt;br /&gt;
&lt;br /&gt;
==Issues==&lt;br /&gt;
&lt;br /&gt;
===Communication===&lt;br /&gt;
The cost or complexity of serial algorithms is estimated in terms of the space (memory) and time (processor cycles) that they take. Parallel algorithms need to optimize one more resource, the communication between different processors. There are two ways parallel processors communicate, shared memory or message passing.&lt;br /&gt;
&lt;br /&gt;
[[Shared memory]] processing needs additional [[lock (computer science)|locking]] for the data, imposes the overhead of additional processor and bus cycles, and also serializes some portion of the algorithm.&lt;br /&gt;
&lt;br /&gt;
[[Message passing]] processing uses channels and message boxes but this communication adds transfer overhead on the bus, additional memory need for queues and message boxes and latency in the messages. Designs of parallel processors use special [[bus (computing)|buses]] like [[crossbar switch|crossbar]] so that the communication overhead will be small but it is the parallel algorithm that decides the volume of the traffic.&lt;br /&gt;
&lt;br /&gt;
If the communication overhead of additional processors outweighs the benefit of adding another processor, one encounters [[parallel slowdown]].&lt;br /&gt;
&lt;br /&gt;
===Load balancing===&lt;br /&gt;
{{main|Load balancing (computing)}}&lt;br /&gt;
Another problem with parallel algorithms is ensuring that they are suitably [[load balancing (computing)|load balanced]], by ensuring that &amp;#039;&amp;#039;load&amp;#039;&amp;#039; (overall work) is balanced, rather than input size being balanced. For example, checking all numbers from one to a hundred thousand for primality is easy to split among processors; however, if the numbers are simply divided out evenly (1–1,000, 1,001–2,000, etc.), the amount of work will be unbalanced, as smaller numbers are easier to process by this algorithm (easier to test for primality), and thus some processors will get more work to do than the others, which will sit idle until the loaded processors complete.&lt;br /&gt;
&lt;br /&gt;
==Distributed algorithms==&lt;br /&gt;
{{main|Distributed algorithm}}&lt;br /&gt;
{{expand section|date=February 2014}}&lt;br /&gt;
A subtype of parallel algorithms, &amp;#039;&amp;#039;[[distributed algorithm]]s&amp;#039;&amp;#039;, are algorithms designed to work in [[cluster computing]] and [[distributed computing]] environments, where additional concerns beyond the scope of &amp;quot;classical&amp;quot; parallel algorithms need to be addressed.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Multiple-agent system]] (MAS)&lt;br /&gt;
* [[Parallel algorithms for matrix multiplication]]&lt;br /&gt;
* [[Parallel algorithms for minimum spanning trees]]&lt;br /&gt;
* [[Parallel computing]]&lt;br /&gt;
* [[Parareal]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
*[https://www.mcs.anl.gov/~itf/dbpp/ Designing and Building Parallel Programs], US Argonne National Laboratory&lt;br /&gt;
&lt;br /&gt;
{{Parallel computing}}&lt;br /&gt;
{{Authority control}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Parallel computing]]&lt;br /&gt;
[[Category:Concurrent algorithms]]&lt;br /&gt;
[[Category:Distributed algorithms]]&lt;/div&gt;</summary>
		<author><name>imported&gt;OlliverWithDoubleL</name></author>
	</entry>
</feed>