Fact-checked by Grok 2 weeks ago

Parallel computing

Parallel computing is the simultaneous use of multiple compute resources, such as central processing units (CPUs), graphics processing units (GPUs), or entire computer systems, to solve a single computational problem by dividing it into smaller, concurrent tasks. This approach enables significant performance improvements for large-scale problems that exceed the capabilities of sequential computing, where tasks are executed one after another on a single processor. The origins of parallel computing trace back to the late 1950s, when researchers John Cocke and Daniel Slotnick explored parallelism for numerical calculations in a 1958 research memo. By the , the field advanced with the construction of early supercomputers like the , focusing on scientific and engineering applications that required massive computational power. The shift to multicore processors in the mid-2000s marked a pivotal , driven by the end of exponential gains from in single-core performance, making parallelism essential for modern computing hardware. Parallel architectures are classified using , proposed in 1966, which distinguishes systems based on the number of instruction streams and data streams: single instruction single data (SISD) for traditional sequential machines, (SIMD) for vector processors like GPUs, (MISD) for fault-tolerant pipelined systems, and (MIMD) for most contemporary multiprocessors. Common implementations include shared-memory systems, where multiple processors access a unified memory space, and distributed-memory systems, where processors communicate via over networks. Hybrid models combine these for scalability in clusters and supercomputers. Parallel computing is crucial for applications demanding high performance, such as , molecular simulations in and , seismic data analysis for oil exploration, and large-scale in astrophysics and bioinformatics. It powers advancements in fields like , where training deep neural networks on massive datasets benefits from distributed across thousands of cores. By enabling scalable computation, parallel systems address problems infeasible on single processors, supporting innovations in scientific discovery and engineering design. Despite its benefits, parallel computing faces challenges, including the complexity of developing efficient parallel algorithms and software that minimize communication overheads and load imbalances. , formulated in 1967, quantifies these limits by showing that the maximum from parallelization is constrained by the fraction of a program that remains serial, even with an infinite number of processors. Additional hurdles involve , scalability across heterogeneous hardware, and in large-scale deployments.

Fundamentals

Definition and Motivation

Parallel computing refers to the simultaneous use of multiple processing elements to execute computations that solve a single cohesive problem, in contrast to sequential computing, which processes tasks one at a time on a single . This approach leverages concurrency to divide complex problems into independent subtasks that can be handled in parallel, enabling more efficient resource utilization across such as multicore CPUs or distributed systems. The key motivations for adopting parallel computing stem from the need to accelerate solutions for large-scale computational problems, where sequential methods become prohibitively slow due to the in data volumes and problem . By distributing workloads, systems can achieve significant speedups, making them essential for fields like scientific simulations and data analytics. Additionally, as has slowed in terms of clock frequency increases—limited by power density constraints known as the "power wall"— has become the primary avenue for performance gains beyond traditional uniprocessor scaling. Parallel computing also promotes by allowing computations to complete faster on specialized hardware, reducing overall power consumption compared to prolonged sequential runs, and it enables applications such as autonomous systems and that demand low-latency responses. A representative example is , where a sequential exhibits O(n³) for n×n matrices, but parallel distribution across p can ideally yield a approaching p, reducing execution time proportionally in the absence of overheads. Frameworks like Cannon's algorithm from 1969 demonstrate this by aligning data blocks on a processor mesh to minimize communication while computing products concurrently. Classifications such as offer a foundational lens for understanding these parallel forms without delving into specifics here.

Theoretical Limits

Theoretical limits in parallel computing arise from both mathematical models of speedup and fundamental physical constraints that cap the efficiency gains from additional processors. These bounds highlight why parallelization cannot indefinitely scale performance, even for highly parallelizable tasks, due to inherent serial components, resource scaling, and hardware realities. provides a foundational bound on the maximum achievable by parallelizing a . Formulated by in 1967, it assumes a fixed problem size and quantifies the impact of the serial fraction of the workload. Let s denote the fraction of the that must be executed serially, and p the number of processors. The S(p) is then given by S(p) = \frac{1}{s + \frac{1-s}{p}}, which demonstrates diminishing returns as p increases: even if the parallel fraction $1-s approaches 1, the serial portion s limits the overall speedup to $1/s. This law underscores that parallel efficiency degrades rapidly for workloads with non-negligible serial components, such as input/output operations or initialization steps. In response to Amdahl's fixed-size assumption, Gustafson's law, proposed by John Gustafson in 1988, considers scalable problem sizes that grow with available processors, offering a more optimistic view for large-scale systems. Here, the scaled speedup S(p) for a problem adjusted to leverage p processors, with serial fraction s, is S(p) = s + p(1 - s), emphasizing that efficiency improves as parallel portions expand proportionally with resources, potentially approaching linear speedup for weakly scalable applications like simulations where problem granularity increases. This formulation is particularly relevant for scientific computing, where larger datasets can exploit more processors without fixed serial bottlenecks dominating. Brent's scheduling principle establishes an upper bound on the execution time of parallel algorithms under optimal scheduling. Introduced by Richard Brent in 1974, it relates the work T_1 (total computational effort) and the critical path length T_\infty (longest dependency chain) to the time T_p on p processors via T_p \leq \frac{T_1}{p} + T_\infty, indicating that even with perfect load balancing, performance is constrained by the sequential depth T_\infty, preventing arbitrary speedup regardless of processor count. This bound applies to expression evaluation and more general parallel computations, guiding algorithm design to minimize dependency chains. Beyond mathematical models, physical limits impose hard barriers on parallel scaling. Communication overhead, modeled in frameworks like LogP (latency, overhead, gap, processors), arises from data exchange delays between processors, which grow with system scale and can dominate computation time in distributed-memory architectures, limiting effective parallelism to applications with low inter-processor traffic. The power wall, as analyzed in studies of multicore scaling, restricts active core utilization due to thermal and energy constraints; for instance, under Dennard scaling breakdown, only a fraction of transistors can operate simultaneously without exceeding power budgets, leading to "dark silicon" where much of the chip remains idle. Similarly, memory bandwidth constraints form a "memory wall," where processor speeds outpace data access rates, bottlenecking parallel workloads that require frequent memory operations, as off-chip DRAM latencies and bandwidth fail to scale with core counts. These physical realities collectively cap parallel efficiency, necessitating architectural innovations to approach theoretical bounds.

Classifications of Parallelism

Flynn's Taxonomy

Flynn's taxonomy, introduced by Michael J. Flynn in 1966, provides a foundational classification for parallel computer architectures by distinguishing between the number of concurrent instruction streams and data streams. This two-dimensional framework—single or multiple for each stream—yields four primary categories: Single Instruction Single Data (SISD), Single Instruction Multiple Data (SIMD), Multiple Instruction Single Data (MISD), and Multiple Instruction Multiple Data (MIMD). The taxonomy emphasizes architectural concurrency at the machine level, aiding in the design and evaluation of systems for parallel processing without delving into workload decomposition scales like granularity. The following table summarizes the categories, their stream configurations, key characteristics, and representative examples:
CategoryInstruction StreamsData StreamsCharacteristicsExamples
SISDSingleSingleSequential execution of one instruction on one data item at a time, representing conventional uniprocessor systems.Traditional architectures, such as early scalar processors.
SIMDSingleMultipleA single instruction applied simultaneously to multiple data elements, enabling efficient or array operations. processors like the , modern GPUs for parallel compute tasks, and Intel's () instructions for multimedia processing.
MISDMultipleSingleMultiple distinct instructions operate on the same , often conceptualized for specialized redundancy or pipelining.Rarely implemented in practice; potential applications in fault-tolerant systems or systolic arrays, though no widespread commercial examples exist.
MIMDMultipleMultipleIndependent instructions execute on separate s, supporting flexible, asynchronous parallelism for diverse workloads.Multicore processors, systems, and distributed clusters for general-purpose computing.
SISD architectures form the baseline for non-parallel computing, where instructions and data flow sequentially through a single processing unit, as seen in classic designs that dominate early computing history. In contrast, SIMD architectures exploit data-level parallelism by broadcasting one instruction across an array of processing elements, making them ideal for uniform operations like image processing or scientific simulations; for instance, GPUs leverage SIMD principles to handle thousands of threads in for graphics rendering and acceleration. Intel's instructions extend this to x86 processors, allowing operations on 128-bit vectors to boost performance in applications such as . MISD remains the least utilized category, primarily theoretical, as its focus on redundant processing of a single offers limited practical advantages over other forms without clear efficiency gains in standard tasks. MIMD, however, underpins most contemporary systems, enabling processors to run different or branches of the same independently on distinct sets, which suits irregular or control-flow-heavy computations; clusters of servers, for example, operate under MIMD to scale out large-scale analytics and simulations. Modern extensions to include the (SPMD) model, a software within MIMD architectures where multiple processors execute the same program code but on different data portions, often using message-passing interfaces like MPI for coordination. This approach has become prevalent in environments, bridging hardware flexibility with simplified programming for scalable parallelism.

Granularity and Types

In parallel computing, granularity refers to the size of computational tasks into which a larger problem is for concurrent execution, influencing the balance between and communication overheads. A finer granularity involves smaller tasks that may require frequent interactions, while coarser granularity uses larger tasks with reduced inter-task dependencies. This decomposition is crucial for optimizing performance across hardware architectures, as it determines how effectively parallelism can be exploited without excessive costs. Parallelism can be realized at multiple scales of . Bit-level parallelism exploits concurrent operations on individual bits within a word, often achieved through designs that increase word length, such as performing arithmetic on wider data paths in parallel arithmetic logic units (ALUs). (ILP) enables the simultaneous execution of multiple from a single program stream, commonly through techniques like pipelining, where are broken into stages processed concurrently, or , which reorders to maximize overlap while respecting dependencies. Superword-level parallelism extends this by vectorizing independent operations on similar data elements, such as packing multiple scalar operations into a single to process arrays or loops efficiently using SIMD . Task-level parallelism divides a program into larger, independent subtasks assigned to separate threads or processes, allowing concurrent execution on multi-core systems or distributed nodes. Parallel tasks are further classified by types based on their communication and dependency patterns, orthogonal to classifications like that focus on instruction and data streams. Fine-grained parallelism involves small tasks with high communication frequency, such as in pixel-by-pixel image processing where adjacent computations exchange boundary data, leading to tight coupling but potential for high throughput on tightly integrated hardware. Coarse-grained parallelism, in contrast, uses larger tasks with minimal inter-task communication, exemplified by simulations where independent random sampling runs on separate processors contribute to overall statistical estimates with little synchronization. Embarrassing parallelism represents the extreme case of coarse granularity, where tasks are completely independent and require no communication, as in rendering independent frames or pixels in applications. Choosing the appropriate granularity involves trade-offs between overhead from task creation, communication, and synchronization versus load balancing to ensure even distribution across processors. Finer granularity can improve load balance but increases overhead due to frequent interactions, while coarser granularity reduces overhead at the risk of uneven workloads or idle processors. A key metric for assessing granularity is the communication-to-computation ratio, defined as the volume of data exchanged divided by the amount of local computation per task, which helps predict scalability; low ratios favor coarse-grained approaches on distributed systems, while higher ratios suit fine-grained execution on shared-memory platforms.

Synchronization and Challenges

Dependencies and Race Conditions

In parallel computing, dependencies represent constraints that dictate the order of execution among tasks to ensure correct . Data dependencies occur when the outcome of one relies on the result of another, preventing concurrent execution without risking errors. These are classified into true dependencies, also known as or read-after-write () dependencies, where a task reads a value produced by a prior task; anti-dependencies, or write-after-read (), where a task writes to a that another task will later read; and output dependencies, or write-after-write (WAW), where multiple tasks attempt to write to the same . True dependencies preserve data and cannot be eliminated without altering semantics, while anti- and output dependencies often arise from naming conflicts and can sometimes be resolved through techniques like in hardware or variable renaming in software. Control dependencies arise from branching structures, such as conditional statements or loops, where the execution path of subsequent tasks depends on the outcome of a control decision. These dependencies enforce sequential ordering to maintain logical correctness, as parallelizing across branches may lead to executing code paths that should be skipped. Input and output dependencies further complicate parallelism by involving shared resources at the boundaries of tasks; input dependencies occur when multiple tasks read from the same initial data source, potentially requiring to avoid stale reads, while output dependencies manifest when tasks produce results that aggregate into a common destination, such as in operations. Race conditions emerge from unhandled dependencies, particularly data dependencies, resulting in non-deterministic behavior when multiple threads or processes concurrently access and modify shared resources without proper coordination. A classic example is the lost problem in a shared , where two threads read the initial value simultaneously, increment it independently, and write back, causing one update to overwrite the other and yielding an incorrect final count. This unpredictability stems from the timing of interleaving executions, which varies across runs due to scheduling nondeterminism. Detection of race conditions typically employs static analysis, which examines code without execution to identify potential conflicts through flow-sensitive interprocedural checks, or dynamic tracing, which monitors accesses to and flags concurrent unsynchronized operations. Tools like RacerX exemplify static approaches by modeling pointer flows to pinpoint races conservatively, while dynamic methods, such as those in RaceTrack, record execution traces and detect suspicious access patterns with higher precision but at runtime overhead. The impacts of undetected race conditions include non-reproducibility, where bugs manifest inconsistently across executions, complicating , and subtle program errors that corrupt or produce incorrect outputs, undermining the reliability of parallel applications. Such issues can propagate through computations, leading to cascading failures in large-scale systems.

and

Mutual exclusion ensures that only one or accesses a shared at a time, preventing race conditions where concurrent modifications could lead to inconsistent states. Early software-based solutions for two processes include , which uses shared flags and a turn variable to coordinate access without hardware support, achieving through busy-waiting loops that check the other process's intent. This approach, attributed to T.J. Dekker and formalized by E.W. Dijkstra in 1965 notes, was the first correct software solution relying solely on load and store instructions. Peterson's algorithm, developed for two processes in 1981, improves on Dekker's by introducing a flag array and turn variable, allowing one process to yield priority to the other, thus ensuring progress and bounded waiting while maintaining via atomic reads and writes. For scalability to multiple processes, these algorithms form the basis for more general constructions, though they rely on assumptions of memory operations. Hardware support simplifies through atomic instructions like , which reads a memory location and sets it to a non-zero value in a single indivisible operation, enabling simple implementations where processes repeatedly test until the lock is acquired. Synchronization primitives extend to coordinate broader interactions among parallel processes. Semaphores, introduced by E.W. Dijkstra in 1968, are integer variables with P (wait) and V (signal) operations: P decrements the value if positive or blocks otherwise, while V increments and wakes a waiting process, supporting both binary semaphores for locks and counting semaphores for resource pools. Barriers synchronize a group of processes by blocking each until all reach the point, ensuring collective progress; a dissemination-style barrier, for example, uses logarithmic steps where processes pairwise notify others in a tournament pattern. Monitors, proposed by C.A.R. Hoare in , encapsulate shared data with procedures that implicitly enforce via a single entry lock, simplifying programming by serializing access. Within monitors, condition variables enable signaling: a process waits on a if a is false, and another signals via notify or broadcast to resume waiters, decoupling exclusion from waiting. These primitives address issues like race conditions by providing structured mechanisms for safe concurrency. In shared-memory models, synchronization relies on these primitives to manage access to common address spaces, as in multi-core systems using locks or . In contrast, message-passing models, as in distributed systems, achieve through explicit sends and receives that coordinate via point-to-point or operations, avoiding shared state but requiring agreement protocols for barriers or exclusions. A classic example is the producer-consumer problem, where producers add items to a bounded and consumers remove them without or underflow. resolve this: a mutex semaphore ensures exclusive buffer access, an empty semaphore (initialized to buffer size) blocks consumers if empty, and a full semaphore (initialized to zero) blocks producers if full; producers signal empty after adding, and consumers signal full after removing.
pseudocode
[semaphore](/page/Semaphore) mutex = 1;
[semaphore](/page/Semaphore) empty = N;  // [buffer](/page/Buffer) size
[semaphore](/page/Semaphore) full = 0;

producer() {
    P(empty);
    P(mutex);
    // add item to [buffer](/page/Buffer)
    V(mutex);
    V(full);
}

consumer() {
    P(full);
    P(mutex);
    // remove item from [buffer](/page/Buffer)
    V(mutex);
    V(empty);
}
This ensures bounded waiting and while coordinating production and consumption rates.

Parallel Slowdown and Limitations

Parallel slowdown refers to the phenomenon where adding more processors to a parallel system fails to yield proportional performance improvements, often resulting in degradation compared to ideal expectations. This occurs primarily due to , which highlights that the speedup is limited by the fraction of the program that remains inherently serial, as even a small sequential portion bottlenecks the entire . For instance, if 5% of a program's execution is serial, the maximum theoretical with infinite processors is only 20-fold, regardless of parallelizable parts. In practice, serial bottlenecks manifest in tasks like operations or initialization that cannot be distributed, preventing full utilization of resources. Additional causes of parallel slowdown include excessive synchronization overhead and load imbalance. Synchronization overhead arises from mechanisms like barriers or locks that force processors to wait for each other, leading to idle time; studies on shared-memory multiprocessors show that at critical sections and uneven workload distribution can account for a significant portion of this overhead, sometimes dominating overall performance losses. Load imbalance happens when tasks are unevenly distributed across processors, causing some to finish early while others remain busy, which is particularly pronounced in irregular data structures or adaptive algorithms. These factors compound the serial limitations, reducing actual speedup below theoretical bounds outlined in models like . Parallel systems also introduce broader disadvantages, such as increased complexity in and higher consumption. parallel programs is notoriously challenging due to non-deterministic execution, race conditions, and the need to trace interactions across multiple threads, which amplifies the effort compared to sequential ; traditional tools often fail to capture non-repeatable behaviors, exacerbating time. consumption rises with the number of active processors and interconnects, as each additional core draws more energy without linear gains—experiments indicate that power usage grows non-linearly, sometimes exceeding twice the baseline for inefficient parallelization. is further limited by communication , where data exchange between processors introduces delays that grow with system size, hindering on large-scale machines regardless of volume. Other limitations stem from inherently non-parallelizable problems and the overhead costs in small-scale applications. Many tasks, such as sequential algorithms or problems with strong dependencies (e.g., certain traversals), resist effective parallelization because each step relies on prior results, rendering distribution inefficient or impossible. In small-scale scenarios, the setup costs for parallelism— including management and communication—often outweigh benefits, making sequential execution more practical; this is evident when problem sizes do not justify the coordination overhead. To quantify these losses, parallel efficiency is commonly measured as the ratio of achieved to the number of processors (p), where efficiency E = S_p / p and S_p is the ; values below 1 indicate sub-linear , with typical efficiencies dropping to 50% or less in real systems due to the aforementioned issues. These practical drawbacks contrast with idealized theoretical limits, where bounds like Amdahl's assume perfect parallelization of eligible portions but are rarely met in implementation.

Hardware Architectures

Memory and Communication

In parallel computing systems, memory models define how processors access shared data, influencing performance and scalability. Uniform Memory Access (UMA) architectures provide all processors with equal and direct access to a common physical memory pool, typically through a shared bus or crossbar interconnect, ensuring consistent latency for memory operations across the system. This model is common in symmetric multiprocessing (SMP) systems with a small number of processors, as it simplifies hardware design but can become a bottleneck under high contention due to the centralized memory controller. In contrast, Non-Uniform Memory Access (NUMA) architectures distribute memory modules locally to groups of processors, allowing faster access to local memory while remote access incurs higher latency, often 2-5 times greater depending on the interconnect distance. NUMA scales better for larger systems by reducing contention on a single memory controller, though it requires software optimizations like affinity scheduling to minimize remote accesses. Cache coherence protocols maintain consistency among multiple local caches in shared-memory systems, preventing processors from operating on stale data. The MESI (Modified, Exclusive, Shared, ) protocol, a widely adopted invalidate-based scheme, tracks the state of each cache line to ensure that writes are propagated or invalidated appropriately across caches. In MESI, a cache line in the Modified state holds the only valid copy after a write; transitioning to Shared allows multiple readers; Exclusive permits a sole read before potential modification; and marks unusable lines that must be fetched anew. This protocol reduces overhead in bus-based systems by minimizing bus traffic for reads while ensuring coherence through snooping, though it can introduce delays during state transitions in multi-level cache hierarchies. Communication in parallel systems varies by architecture, with shared-memory models relying on implicit data exchange via a common address space and distributed-memory models using explicit message passing. In bus-based shared-memory systems, processors communicate through a shared interconnect like a bus, where data is accessed directly but contention limits scalability to tens of processors. Distributed-memory systems, such as clusters, employ message-passing interfaces like MPI (Message Passing Interface), where processes on separate nodes exchange data via explicit sends and receives, supporting scalability to thousands of nodes through networks like InfiniBand. These approaches trade off bandwidth and latency: shared-memory offers low-latency access (microseconds) but saturates quickly due to bus bandwidth limits (e.g., 10-50 GB/s), while distributed-memory provides higher aggregate bandwidth (hundreds of GB/s across nodes) at higher per-message latency (tens of microseconds), making it suitable for loosely coupled computations. Key issues in these models include memory consistency and , which can degrade performance if unaddressed. Sequential consistency requires that all memory operations appear to execute in a consistent with each processor's program order, as if on a uniprocessor, ensuring intuitive but imposing strict hardware constraints that limit optimizations like . Relaxed consistency models, such as release consistency, weaken these ordering rules—allowing reads to bypass writes under certain barriers—to improve performance by enabling compiler and hardware reordering, though programmers must use primitives to enforce necessary orders. occurs when multiple processors modify distinct variables mapped to the same cache line (typically 64 bytes), triggering unnecessary traffic and invalidations, which can reduce throughput by factors of 2-10 in multithreaded workloads. Performance implications often stem from bandwidth bottlenecks during scaling, where increasing processor count amplifies memory demands without proportional interconnect improvements. In shared-memory systems, bus saturation leads to queuing delays, capping effective speedup at 4-8 processors for memory-intensive applications, as aggregate bandwidth fails to match parallel access rates. NUMA and distributed systems mitigate this through locality-aware allocation and partitioning, but remote accesses can still impose latency walls, emphasizing the need for algorithms that minimize communication volume to achieve linear scaling.

Multi-Core and Symmetric Multiprocessing

Multi-core processors integrate multiple independent processing units, known as cores, onto a single die, enabling simultaneous execution of multiple threads or tasks to improve overall system performance. This design emerged as a response to the limitations of increasing clock speeds in single-core processors, driven by power and thermal constraints, with early pioneering work on general-purpose chip multiprocessors conducted by and his team at Stanford in the . In such architectures, each core typically includes its own private L1 cache for fast access to instructions and data, while higher-level caches like and L3 may be shared among cores to facilitate efficient data exchange. A key feature in many multi-core designs, such as those in Intel's processors, is technology, which allows each physical to present as two logical cores to the operating system by duplicating certain architectural states and sharing execution resources. This enables better utilization of core resources during thread switches, potentially improving throughput by up to 30% in thread-heavy workloads without requiring additional physical . For instance, the 14th-generation Intel processors feature up to 20 cores (8 performance cores and 12 efficient cores) with on the performance cores, supporting up to 28 in total. Symmetric multiprocessing (SMP) extends the multi-core concept to systems where multiple identical processors share a common space and interconnect, treating all processors as equals with uniform access to resources. In SMP configurations, the operating system schedules tasks across processors transparently, relying on hardware mechanisms like protocols to maintain data consistency. Scalability in SMP systems typically reaches dozens of cores, limited by factors such as and coherence overhead, but it provides a tightly coupled environment suitable for workloads like and scientific simulations. Early examples of SMP include AMD's processors, introduced in 2003, which supported up to eight sockets in a shared-memory configuration using the interconnect for low-latency inter-processor communication. Modern implementations push boundaries further; for example, AMD's processors in the 9005 series offer up to 192 cores per socket in SMP setups, while Intel's 6 series provides up to 128 performance cores (Granite Rapids) or 144 efficiency cores () per socket, enabling up to 256 or 288 cores across dual sockets, respectively, often integrated with accelerators like GPUs via on-chip links for hybrid computing. One primary advantage of multi-core and SMP architectures is the low-latency communication enabled by on-chip shared caches, where data transfer between cores occurs in tens of cycles compared to hundreds or thousands in distributed systems, reducing overhead for fine-grained parallelism. This shared minimizes the need for explicit data movement, enhancing efficiency in cache-coherent environments that align with uniform memory access models.

Distributed and Specialized Systems

Distributed computing encompasses systems where multiple independent machines collaborate over a to perform parallel tasks, typically using a message-passing to exchange data and coordinate operations. This approach allows for beyond single-system limits by leveraging commodity in clusters or grids, where each node operates autonomously but communicates explicitly to achieve collective computation. Unlike tightly coupled shared-memory architectures, distributed systems prioritize and resource pooling across geographically dispersed resources. Beowulf clusters exemplify early distributed systems, aggregating off-the-shelf personal computers into a high-performance environment through Ethernet interconnects and message-passing interfaces, enabling cost-effective scaling for scientific simulations without specialized hardware. In modern cloud environments, services like AWS ParallelCluster facilitate on-demand deployment of such clusters, allowing users to provision virtual machines for (HPC) workloads with automatic scaling and integration of parallel job schedulers. These systems support workloads ranging from weather modeling to analytics by distributing computations across hundreds or thousands of nodes. Specialized hardware extends parallelism through domain-specific designs that optimize for particular computation patterns. Graphics processing units (GPUs) excel in single instruction, multiple data (SIMD) operations, where thousands of cores execute identical instructions on arrays of data simultaneously; NVIDIA's programming model enables developers to harness this for general-purpose computing, such as matrix multiplications in simulations. Field-programmable gate arrays (FPGAs) offer reconfigurable parallelism, allowing hardware logic to be customized at the gate level for irregular or dataflow-oriented tasks, providing flexibility for accelerating algorithms like that benefit from tailored pipelines. Tensor processing units (TPUs), developed by , are application-specific integrated circuits (ASICs) optimized for AI workloads, featuring systolic arrays for efficient parallel tensor operations in neural network training and inference. Prominent examples include the Frontier supercomputer, deployed in 2022 at Oak Ridge National Laboratory, which, as of June 2025, achieved 1.353 exaFLOPS on the HPL benchmark using its 9,472 nodes equipped with AMD processors and GPUs interconnected via high-speed fabrics for distributed simulations in climate and materials science. The IBM Blue Gene series, spanning models from Blue Gene/L to Blue Gene/Q, demonstrated massive scalability in the 2000s, with Blue Gene/L sustaining linear performance up to 131,072 nodes for applications like molecular dynamics, emphasizing low-power, distributed-memory designs. These systems typically align with the multiple instruction, multiple data (MIMD) classification in Flynn's taxonomy due to their independent processing and data streams across nodes. While distributed and specialized systems can to millions of cores— as seen in exascale machines— inter-node communication via introduces higher latency than intra-node , potentially bottlenecking applications sensitive to ; optimizations like hierarchical interconnects mitigate this by reducing average message transit times. This trade-off underscores their suitability for or loosely coupled tasks, where overall throughput gains outweigh communication overheads. As of 2025, hybrid CPU-GPU integrations continue to advance, with systems like incorporating AI accelerators for enhanced parallel workloads.

Software Approaches

Parallel Programming Languages

Parallel programming languages provide explicit constructs for expressing concurrency and coordination in software, enabling developers to leverage multiple processing units effectively. These languages extend traditional sequential programming models by incorporating features such as thread creation, , and data distribution, which are essential for managing parallelism on shared-memory and distributed systems. Early developments in the focused on message-passing paradigms to address challenges, with the (MPI) standard emerging as a foundational specification for portable parallel programs across heterogeneous clusters. Thread-based models, exemplified by threads (pthreads) in C and C++, allow explicit creation and management of lightweight processes that share memory, facilitating fine-grained parallelism within a single node. Pthreads support operations like mutexes for and condition variables for coordination, making them suitable for irregular workloads where threads execute concurrently and access shared data. In contrast, task-based models, such as Intel's (oneTBB), abstract parallelism through dynamic task graphs, where tasks represent units of work that the runtime scheduler distributes across cores for load balancing and . Data-parallel models, like those in NVIDIA's , enable massive concurrency by executing identical kernels across thousands of GPU threads, ideal for SIMD-style computations on arrays or matrices. Fortran's coarray extensions, introduced in the 2008 standard, provide a (PGAS) model where arrays are distributed across images (processes) with simple syntax for remote data access, reducing the verbosity of explicit messaging in scientific simulations. C++ integrates parallelism via directives for compiler-guided loop parallelization and thread spawning, supporting both shared-memory and accelerator offloading while maintaining portability across multi-core architectures. For implicit parallelism, Haskell employs strategies and monads to automatically parallelize pure functional computations, such as data-parallel operations on aggregate structures, without requiring explicit thread management. Chapel, developed for high-productivity parallel computing, combines imperative and functional elements with built-in support for domains, locales, and reduction operations, allowing scalable expression of distributed tasks on large-scale systems. Modern languages like Julia incorporate multi-threading and distributed computing primitives, including macros for parallel loops (@threads) and remote function calls (remotecall), enabling seamless scaling from single-node multi-core to cluster environments. Key features across these languages include fork-join parallelism, where a parent task spawns subtasks that execute asynchronously before synchronizing at join points; async tasks for non-blocking execution; and operations to ensure thread-safe updates to shared variables without locks. These constructs, evolving from MPI's point-to-point communications in the to today's integrated models, prioritize developer productivity while mitigating overheads in diverse hardware ecosystems.

Automatic Parallelization and Checkpointing

Automatic parallelization refers to compiler techniques that automatically detect and exploit parallelism in sequential code without requiring explicit programmer intervention, primarily through analysis and transformation of loops. A core method involves data dependence analysis, which identifies whether iterations of a loop can execute independently, enabling transformations such as converting sequential do-loops into parallel do-loops where no inter-iteration dependencies exist. For instance, a DOALL loop, characterized by the absence of cross-iteration data dependencies, can be fully parallelized by distributing iterations across multiple threads or processors, as the compiler confirms that statements within the loop do not need sequential ordering beyond barrier synchronization at the loop boundaries. Compilers like the C++ and compilers (formerly , now part of Intel oneAPI) implement these techniques using flags such as -parallel (or /Qparallel on Windows), which perform dependence on loop nests starting from the outermost level and apply optimizations like loop and when profitable. This process often includes alongside parallelization to leverage SIMD instructions, but success depends on accurate dependence detection. Tools such as these have demonstrated speedups on benchmarks like SPEC FP, though gains vary by code structure. Recent advances as of 2024 include AI-driven tools like for inserting pragmas and new thread-level speculative models, enhancing applicability to more complex real-world applications. Despite these advances, faces significant limitations, particularly in alias analysis, where the compiler struggles to disambiguate pointers that may reference the same memory location, leading to conservative assumptions that prevent parallelization even when safe. Profitability heuristics further constrain applicability, as compilers weigh the overhead of thread creation, , and load imbalance against potential gains, often deeming transformations unprofitable for irregular or small loops. These challenges result in parallelization rates below 50% for many real-world applications, highlighting the need for hybrid approaches combining static analysis with runtime speculation. Checkpointing in parallel computing involves periodically saving the state of a running program to enable restart after failures, such as faults or outages, which is crucial for long-running jobs on large-scale systems. Transparent checkpointing operates at the system or user level without modifying application code, capturing states, memory, and open files automatically; DMTCP (Distributed MultiThreaded CheckPointing) exemplifies this by providing transparent support for distributed and multithreaded applications across clusters, using to intercept system calls and coordinate checkpoints via a . In contrast, application-level checkpointing requires explicit code changes to save and restore domain-specific states, such as variables or data structures, offering finer control but increasing development effort. For distributed parallel environments, checkpointing integrates with message-passing interfaces like MPI to ensure coordinated state saving across nodes, often using coordinated protocols where all synchronize before writing checkpoints to shared or local storage. This integration handles challenges like in-flight messages by quiescing communication, but introduces significant I/O overhead from serializing large images—up to gigabytes per —which can substantially increase depending on and system configuration. Tools like support built-in checkpointing extensions, such as CRS (Checkpoint/Restart Service), to facilitate in MPI jobs while minimizing downtime.

Parallel Algorithms

Algorithmic Methods

Algorithmic methods in parallel computing encompass strategies for structuring computations to leverage multiple processors simultaneously, aiming to minimize execution time while maintaining efficiency. These methods emphasize dividing problems into concurrent tasks, managing dependencies, and optimizing resource utilization. Central to this is the identification of inherent parallelism in algorithms, often through techniques that balance computational load and communication overhead. Seminal approaches include divide-and-conquer paradigms, which recursively partition problems into independent subproblems solvable in parallel. A prominent example is the parallel , which divides an array into two halves, recursively sorts each in parallel, and then merges the sorted halves using a parallel merging step. This achieves O(log n) parallel time with O(n/log n) processors on a PRAM model, matching the sequential time bound while providing linear . Another key method is the () operation, which computes cumulative results over an array, such as partial sums, and serves as a primitive for more complex parallel like and . Blelloch's work-efficient parallel on an EREW PRAM uses an up-sweep reduction followed by a down-sweep , running in O(log n) time with n processors and total work O(n). The map-reduce paradigm further exemplifies algorithmic methods for large-scale , where input data is mapped into intermediate key-value pairs processed independently across processors, followed by a reduction phase that aggregates results by key. This approach enables fault-tolerant parallelism on distributed systems, as demonstrated in its original handling terabytes of data with automatic task distribution. Parallelization techniques commonly employed include data decomposition, which partitions input across processors so each performs identical computations on its subset, ideal for regular problems like operations. For instance, in numerical simulations, arrays are divided into blocks assigned to processors, with communication only at boundaries. parallelism structures algorithms as a sequence of stages where outputs from one stage feed into the next, allowing overlapping execution to hide , as in pipelined data-parallel algorithms that through processing phases on distributed-memory systems. Hybrid approaches combine these, such as using data decomposition within pipeline stages, to exploit both data and for irregular workloads. in decomposition guides the choice of size to optimize load balance and minimize overhead. Complexity analysis of parallel algorithms relies on models like the PRAM, introduced as an abstraction of synchronized processors with access in constant time, enabling theoretical bounds independent of hardware details. In PRAM, algorithms are evaluated by time steps T and processors P, with efficiency measured by S = T_1 / T, where T_1 is sequential time. The work-depth framework complements this by separating total computational work T_1 (sum of operations) from parallel time T_p (length of critical path or depth), allowing analysis of schedulability; an algorithm is work-efficient if T_1 = O(sequential work) and T_p = O(log n) for balanced trees. Illustrative examples include the parallel fast Fourier transform (FFT), which applies divide-and-conquer to the Cooley-Tukey decomposition, computing the by recursively factoring into smaller DFTs executed in parallel across dimensions. This yields O(log n) depth on O(n) processors for n-point FFT, with applications in . Matrix multiplication via block distribution, as in Cannon's algorithm, decomposes matrices into blocks assigned to a processor grid, where initial alignment shifts blocks followed by local multiplications and reductions, achieving O(n^3 / P) computational time with O(n^2 / sqrt(P)) communication cost on P processors arranged in a 2D grid for n x n matrices and optimal communication on mesh topologies.
TechniqueKey ExampleParallel Time (T_p)Processors (P)Model
Divide-and-ConquerO(log n)O(n / log n)PRAM
Prefix SumO(log n)nEREW PRAM
Map-ReduceO(input size / P)Scalable to thousandsDistributed
Data DecompositionO(n^3 / P)Up to n^2
PipelineO(stages + data / P)Number of stagesDistributed-Memory
These methods underscore the importance of matching algorithmic structure to , ensuring scalable performance without excessive .

Fault Tolerance in Algorithms

Fault tolerance in parallel algorithms refers to the design of computational methods that maintain correctness and progress despite or software failures, which are increasingly prevalent in large-scale parallel systems. These algorithms incorporate mechanisms to detect, diagnose, and recover from errors without complete system halts, ensuring reliable execution in environments where component failures are frequent. Key fault models include crash-stop failures, where a abruptly ceases operation but does not produce incorrect outputs, and Byzantine faults, where a faulty component can behave arbitrarily, potentially sending misleading to others. A critical metric for assessing system reliability is the (MTBF), projections for exascale supercomputers, which became operational starting in 2022, estimated around 30 minutes due to the vast number of components, though actual systems like achieve MTBF of several hours, necessitating fault-tolerant algorithms that minimize downtime. Techniques for achieving emphasize and error detection integrated directly into the algorithm's structure. Replication involves executing the same computation on multiple processors and comparing results via voting mechanisms, such as majority voting in ensemble methods, to mask errors from crash-stop or Byzantine faults. For instance, in parallel iterative solvers like conjugate gradient methods, replicated task ensembles allow faulty iterations to be discarded through , restoring with minimal recomputation. Checkpoint-restart provides rollback recovery by periodically saving algorithm states, enabling resumption from the last valid checkpoint upon detection, though it introduces I/O overhead that must be balanced in algorithm design. protect during communication and storage; in parallel algorithms, syndrome-based checks verify appended to vectors or , correcting single-bit errors without halting execution. Algorithm-based fault tolerance (ABFT) extends this by embedding relations into the algorithm itself, such as row and column for multiplications, allowing detection and correction of up to t faults with O(n) redundancy for n x n . Seminal ABFT approaches, developed in the , have been adapted for modern computations and linear algebra routines, where forward recomputes affected sub-results using redundant encodings. In practice, parallel algorithms like those for solving partial differential equations employ ABFT with for transient faults, combining replication for permanent failures; for example, a fault-tolerant parallel LU decomposition uses verification to isolate errors and restart only the impacted factorization steps. Ensemble voting in distributed simulations replicates random sampling across nodes, aggregating results to tolerate up to f Byzantine faults with 3f+1 replicas, as per foundational protocols. However, these techniques incur overheads—replication can double computation time, while ABFT adds 10-20% storage and verification costs—that escalate in exascale systems, where rates amplify latency and challenge . Optimizing such overheads remains a focus, with hybrid ABFT-checkpoint methods reducing restart times by an in large-scale linear solvers. In practice, systems like have implemented advanced features, achieving MTBF of hours through rapid checkpointing and prediction, exceeding early projections.

Historical Development

Early Foundations

The foundations of parallel computing emerged in the mid-20th century as researchers sought to overcome the limitations of sequential processing architectures. The , outlined in John von Neumann's 1945 report on the computer, established the stored-program concept where instructions and data share a single memory, enabling general-purpose computation but creating a "bottleneck" due to sequential instruction execution. This design influenced early computing but highlighted the need for concurrent operations to accelerate complex calculations, particularly in scientific applications. Von Neumann's later work on self-reproducing cellular automata in the 1940s and early 1950s introduced parallel concepts through interconnected, locally interacting components that evolve simultaneously, laying theoretical groundwork for distributed processing models. Key milestones in the 1950s advanced these ideas toward practical parallel machines. In 1958, researchers John Cocke and Daniel Slotnick published a seminal exploring parallelism in numerical calculations, proposing that multiple arithmetic units could process independent operations concurrently to achieve significant speedups in tasks like and simulations. Building on this, Slotnick led the project around 1959, an early SIMD () design for a parallel array aimed at high-throughput scientific , though it was never fully built. Concurrently, UNIVAC's LARC (Livermore Advanced Research Computer), proposed in the late 1950s and delivered in 1960, incorporated parallel features such as dual systems—one for arithmetic and one for —to enable overlapping operations and boost performance for atomic weapons simulations. The 1960s saw prototypes realizing these concepts, with Slotnick's design of the at the University of Illinois representing a breakthrough in vector processing. Announced in 1961 and operational by 1975, the featured 64 processing elements operating in parallel under a single control unit, achieving up to 200 million instructions per second for array-based computations like weather modeling. Slotnick, who had collaborated with at Princeton, drew from to emphasize fault-tolerant, scalable parallelism. Theoretical developments culminated in Michael J. Flynn's 1966 , which classified emerging architectures by instruction and data streams (SISD, SIMD, MISD, MIMD), providing a framework to evaluate parallel potential. These pre-Amdahl efforts focused on inherent from parallelism, estimating gains like 10-100 times for vectorizable problems without formal limits on serial fractions.

Modern Advancements

The supercomputer, introduced in 1976 by Cray Research, marked a pivotal milestone in parallel computing through its innovative vector processing architecture, which enabled high-speed operations on arrays of data and achieved peak performance of 160 megaflops. This design shifted focus from scalar processing to vector pipelines, facilitating efficient handling of scientific computations in fields like and nuclear simulations. In the 1980s, the series by advanced massively parallel architectures with its SIMD () model, featuring up to 65,536 one-bit processors interconnected in a for concurrent data manipulation. The CM-5 model, released in 1991, further scaled this approach to thousands of vector processors, demonstrating practical feasibility for data-parallel tasks such as image processing and simulations. The establishment of the TOP500 project in 1993 provided a standardized benchmark for tracking supercomputing progress, ranking systems by LINPACK performance and highlighting the rapid evolution toward higher parallelism. Entering the 2000s, the GPGPU (General-Purpose computing on Graphics Processing Units) era transformed consumer GPUs into versatile parallel processors, with NVIDIA's CUDA platform, launched in 2006, introducing a unified programming model that allowed developers to leverage thousands of cores for non-graphics workloads like molecular dynamics. This democratized access to massive parallelism, accelerating applications in scientific modeling by orders of magnitude compared to CPU-only systems. By 2022, the Frontier supercomputer at Oak Ridge National Laboratory achieved exascale status, delivering 1.1 exaflops of performance through heterogeneous integration of AMD CPUs and GPUs across over 9 million cores, surpassing petascale barriers and enabling simulations previously infeasible due to computational scale. Recent developments in quantum-inspired parallelism, as seen in hybrid classical-quantum systems by 2025, use mechanisms to mimic quantum superposition for optimization problems, enhancing parallel efficiency in high-dimensional data analysis without full quantum hardware. Contemporary trends emphasize , where diverse accelerators like GPUs, FPGAs, and specialized chips coexist in unified systems to optimize workload distribution and . Asynchronous distributed algorithms improve efficiency in large-scale on multi-node clusters. These advancements have driven the petascale-to-exascale transition, with systems like overcoming power and data-movement challenges to achieve quintillion-scale operations per second, fundamentally impacting by enabling real-time analytics on petabyte datasets through distributed parallel frameworks. In contexts, parallel computing underpins scalable and querying, reducing times from days to hours and supporting model on vast volumes that would otherwise overwhelm sequential systems.

Applications and Analogies

Scientific and Engineering Uses

Parallel computing plays a pivotal role in weather simulation, enabling the execution of complex numerical models that predict atmospheric behavior on global scales. The (ECMWF) relies on supercomputers to perform these simulations, where parallelism is foundational to handling the vast computational demands of integrated forecasting systems like the (IFS). These systems divide atmospheric equations across thousands of processors, allowing for timely medium-range forecasts that incorporate petabyte-scale observational data. In , parallel computing accelerates simulations of atomic and molecular interactions, essential for understanding biochemical processes. , a widely used open-source toolkit, employs domain decomposition to parallelize force calculations and particle updates across multiple cores and nodes, achieving high throughput for large biomolecular systems. This approach reduces simulation times from days to hours, enabling researchers to model and drug interactions at scales involving millions of atoms. Finite element analysis (FEA) in leverages parallel solvers to tackle problems, such as stress distribution in complex geometries. Direct parallel solvers for symmetric sparse , implemented on multi-core shared-memory systems, efficiently handle the linear algebra operations central to FEA, scaling to thousands of for accurate predictions in and applications. By distributing partitioning and matrix assembly, these methods minimize communication overhead and enable simulations of real-world structures under dynamic loads. Climate modeling exemplifies parallel computing's impact on supercomputers, where high-resolution global simulations integrate atmospheric, oceanic, and land components. Recent advancements have achieved 1.25 km resolution in coupled climate models using massively parallel architectures like those at the Swiss National Supercomputing Centre, processing exabyte-scale datasets to forecast extreme events with unprecedented detail. Seismic data processing benefits similarly, with cloud-based parallel frameworks distributing waveform analysis across nodes to handle large volumes of seismic data. In , parallel computing facilitates crash simulations by solving nonlinear dynamic equations for large-scale finite element models. Using tools like on systems with up to 512 processors, simulations of 10-million-element vehicle models have reduced computation times from 91 hours to 43 hours for 120 ms of physical time, optimizing contact detection and load balancing for safer design iterations. Key benefits include managing petabyte-scale data through , which partitions workloads across distributed nodes to enable scalable without bottlenecks. In graphics, parallel rendering supports applications by decomposing scene rendering tasks across processors, achieving high frame rates for interactive in engineering design and . Modern extensions integrate parallelism into ecosystems, with Apache Hadoop's framework distributing batch across clusters for fault-tolerant handling of massive datasets. builds on this with in-memory computation, offering up to 100x faster parallel for iterative algorithms in and stream analytics as of its 2024 releases.

Biological Parallelism

The serves as a quintessential model of massive parallelism in biological systems, where approximately 86 billion neurons as distributed units, interconnected by an estimated 10^{14} to 10^{15} synapses that facilitate communication through electrochemical signals. This architecture enables the to perform highly efficient, massively parallel operations, particularly in tasks, where of neurons simultaneously process sensory inputs to identify complex patterns such as faces or voices without relying on a centralized clock or sequential execution. Unlike conventional , this biological parallelism operates at a fine-grained level, with individual neural firings representing discrete computational events that contribute to emergent global behaviors. Biological neural systems have profoundly influenced computational models, particularly through artificial neural networks (ANNs) that draw inspiration from the structure and dynamics of neurons and synapses. (SNNs), a more biologically faithful variant, emulate the temporal spiking patterns of real neurons—discrete electrical impulses triggered by thresholds—contrasting sharply with the synchronous, rate-coded processing typical of traditional architectures. In SNNs, information is encoded in the precise timing and frequency of spikes, allowing for event-driven computation that mirrors the brain's sparse, asynchronous signaling and reduces unnecessary activity. Key advantages of this biological parallelism include inherent achieved through structural , where multiple neural pathways and overlapping circuits ensure that localized damage or loss does not critically impair overall function, as seen in the brain's ability to reorganize after . Additionally, the brain's asynchronous operation—neurons firing independently based on local inputs rather than a global clock—contributes to its remarkably low power consumption, estimated at around 20 watts for the entire system, by activating only relevant circuits in response to stimuli. These properties have inspired bio-inspired paradigms, including neuromorphic that replicates neural topologies for efficient, brain-like ; a seminal example is IBM's TrueNorth chip, unveiled in , which integrates 1 million spiking s and 256 million synapses on a single low-power die to emulate asynchronous neural dynamics.

References

  1. [1]
    Parallel Computing: Overview, Definitions, Examples and ...
    Parallel computing is the use of two or more processors (cores, computers) in combination to solve a single problem.
  2. [2]
    Parallel computing — Math/CS 471, Fall 2020
    Parallel computing is the simultaneous use of multiple compute resources to solve a computational problem.
  3. [3]
    CMSC 411 Project - Fall 1998 - History
    In 1958, two IBM employees by the names of John Cocke and Daniel Slotnick first discuss the use of parallelism in numerical calculations in a research memo.
  4. [4]
    [PDF] Parallel Computer Architecture and Programming CMU 15-418/15 ...
    A Brief History of Parallel Computing. ▫ Initial Focus (starting in 1970s): “Supercomputers” for Scientific Computing. ▫ Another Driving Application ...
  5. [5]
    The Landscape of Parallel Computing Research - UC Berkeley EECS
    The recent switch to parallel microprocessors is a milestone in the history of computing. Industry has laid out a roadmap for multicore designs that ...
  6. [6]
    [PDF] Very High-speed Computing Systems
    231-241. Very High-speed Computing Systems. MICHAEL J. FLYNN; MEMBER, IEEE. Abstract-Very high-speed computers may be clnssified as follows: 1) Single ...
  7. [7]
    [PDF] INTRODUCTION TO PARALLEL COMPUTING - Harvard University
    Mar 25, 2016 · Parallel Computer Memory Architectures: Shared Memory: ❑ Multiple processors can operate independently, but share the same memory resources.
  8. [8]
    Parallelism and Computer Hardware | RC Learning Portal
    Nov 17, 2020 · Hybrid parallel programming is a combination of shared and distributed memory programming. Tasks and possibly some of the data are divided among ...
  9. [9]
    [PDF] Introduction to Parallel Computing
    Weather modeling, mineral prospecting, flood prediction, etc., are other important applications. • Bioinformatics and astrophysics also present some of the ...
  10. [10]
    Parallel and Distributed Computing for High-Performance Applications
    Parallel and distributed computing are essential for high-performance applications like scientific simulations, data analysis, and artificial intelligence ...<|separator|>
  11. [11]
    COMP 422/534 Parallel Computing: Home Page - Rice University
    Description. Parallel computing has long played a vital role in addressing the performance demands of high-end engineering and scientific applications.
  12. [12]
    [PDF] A View of the Parallel Computing Landscape - People @EECS
    One challenge for the parallel software span is that sequential programming accommodates the wide range of skills of today's programmers. Our experience in ...
  13. [13]
    [PDF] Validity of the Single Processor Approach to Achieving Large Scale ...
    Amdahl. TECHNICAL LITERATURE. This article was the first publica- tion by Gene Amdahl on what became known as Amdahl's Law. Interestingly, it has no equations.
  14. [14]
    [PDF] Parallel Architecture - CMU School of Computer Science
    Types of parallelism. Instruction-level parallelism (ILP). ◦ Different ... Much of parallel computer architecture is about. ◦ Designing machines that ...
  15. [15]
    What is parallel computing? | IBM
    Parallel computing is a process where large compute problems are broken down into smaller problems that can be solved by multiple processors.What is parallel computing? · Why is parallel computing...
  16. [16]
    Introduction to Parallel Computing Tutorial - | HPC @ LLNL
    The primary intent of parallel programming is to decrease execution wall clock time, however in order to accomplish this, more CPU time is required. For example ...
  17. [17]
    [PDF] The Landscape of Parallel Computing Research: A View from ...
    Dec 18, 2006 · The Landscape of Parallel Computing Research: A View From Berkeley. 26 point message would prefer a dedicated point-to-point pathway through ...
  18. [18]
    A Comprehensive Exploration of Languages for Parallel Computing
    Jan 18, 2022 · Besides increment of performance, parallelism can be used to reduce energy consumption too; this role is becoming more and more important, as ...
  19. [19]
  20. [20]
    [PDF] REEVALUATING AMDAHL'S LAW - John Gustafson
    We feel that it is important for the computing research community to overcome the “mental block” against massive parallelism imposed by a misuse of. Amdahl's ...
  21. [21]
    [PDF] the parallel evaluation of general arithmetic expressions
    GENERAL ARITHMETIC EXPRESSIONS. RICHARD P. BRENT. Abstract. It is shown that arithmetic expressions with n ≥ 1 variables and constants; operations of addition ...
  22. [22]
    [PDF] LogP: Towards a Realistic Model of Parallel Computation
    The model also encourages the careful scheduling of computation and overlapping of computation with communication, within the limits imposed by network capacity ...
  23. [23]
    [PDF] Dark Silicon and the End of Multicore Scaling
    This paper models multicore scaling limits by combining device scaling, single-core scaling, and multicore scaling to measure the speedup potential for a set of ...
  24. [24]
    Parallel Hardware Taxonomies - UF CISE
    Flynn's Taxonomy​​ By far the most commonly used taxonomy is that due to Flynn [Flynn]. He categorizes all computers according to how many instruction streams ...
  25. [25]
    Taxonomy of Parallel Computers - Cornell Virtual Workshop
    Parallelization can be achieved by using multiple instruction streams and/or multiple data streams. This insight is formalized in Flynn's taxonomy.
  26. [26]
    Flynn's Taxonomy - GeeksforGeeks
    Sep 26, 2025 · An SIMD system is a multiprocessor machine capable of executing the same instruction on all the CPUs but operating on different data streams.
  27. [27]
    [PDF] SIMD Programming - UCSB Computer Science
    • Flynn Taxonomy. • Intel SSE SIMD Instructions. – Exploit data-level parallelism in loops. – One instruction fetch that operates on multiple operands ...
  28. [28]
    Understanding Flynn's Taxonomy in Computer Architecture - Baeldung
    Jul 3, 2024 · Flynn's Taxonomy provides a clear and concise framework for classifying computer architectures based on their handling of instruction and data streams.
  29. [29]
    [PDF] Lecture 5.1 Flynn's Taxonomy - Parallel Computing for Data Science
    Feb 12, 2018 · SISD: single instruction, single data. ○ SIMD: single instruction, multiple data. ○ MISD: multiple instruction, single data. – Irrelevant.
  30. [30]
    Classification of Computers and Parallel Computing
    MIMD: Multiple Instruction streams, Multiple Data streams. MIMD parallel computers executes multiple instruction at once: multiple instruction stream. Each ...
  31. [31]
    [PDF] Introduction to Parallel Programming
    Jul 14, 2010 · SPMD: dominant programming model for shared and distributed memory machines. – One source code is written. – Code can have conditional execution ...
  32. [32]
    [PDF] Flynn's hardware taxonomy (Section 6.3) MIMD
    • The concept of single Program Multiple Data (SPMD):. (applies to both distributed memory and shared memory MIMD programming). – User writes one program to ...
  33. [33]
  34. [34]
  35. [35]
  36. [36]
  37. [37]
    [PDF] Basics of Parallelization
    True (flow) dependence – RAW. • Anti-dependence – WAR. • Output dependence – WAW. When can 2 statements execute in parallel? S1 and S2 can execute in parallel.
  38. [38]
    [PDF] CS 293S Parallelism and Dependence Theory
    Data dependence includes true (read after write), anti- (write after read), and output (write after write) dependences. True dependence is read after write.
  39. [39]
    [PDF] Lecture 19 Array Dependence Analysis & Parallelization
    There are four types of data dependence: flow, anti, output, and input. Flow dependence is the only "true" dependence.
  40. [40]
    [PDF] Lecture 4: Principles of Parallel Algorithm Design
    • Task-dependency graph vs. task-interaction graph. – Task-dependency graph represents control dependency. – Task-interaction graph represents data dependency.
  41. [41]
    [PDF] Fundamentals of parallel programming - LIACS Leiden University
    In fact task interaction graphs represent input- and output- dependencies, whereas task dependence graphs represent true-dependencies or anti-dependencies. Page ...
  42. [42]
    1.2 Race Conditions — Parallel Computing for Beginners
    By the end of this section, you should be able to define what a race condition is, identify race conditions in sample code, and extrapolate some strategies for ...
  43. [43]
    What Is a Race Condition? | Baeldung on Computer Science
    Mar 26, 2025 · A race condition is a condition of a program where its behavior depends on relative timing or interleaving of multiple threads or processes.
  44. [44]
    [PDF] RacerX: Effective, Static Detection of Race Conditions and Deadlocks
    Abstract. This paper describes RacerX, a static tool that uses flow- sensitive, interprocedural analysis to detect both race condi- tions and deadlocks.
  45. [45]
    efficient detection of data race conditions via adaptive tracking
    This paper describes RaceTrack, a dynamic race detection tool that tracks the actions of a program and reports a warning whenever a suspicious pattern of ...Missing: tracing | Show results with:tracing
  46. [46]
    [PDF] Race Detection in Parallel Programming - San Jose State University
    The other method is detecting race condition at runtime that called dynamic detection. Dynamic detection is more accurate compared to static method. However, ...
  47. [47]
    A Survey of Race Condition Vulnerability Detectors - arXiv
    Dec 22, 2023 · This survey paper is focused on the realm of race condition bug detectors. We systematically categorize these detectors based on the diverse methodologies they ...
  48. [48]
    Race Condition Vulnerability | Causes, Impacts & Prevention - Imperva
    A race condition vulnerability is a software bug that allows these unexpected results to be exploited by malicious entities.
  49. [49]
    E.W.Dijkstra Archive: Cooperating sequential processes (EWD 123)
    When there is a need for distinction, we shall talk about "binary semaphores" and "general semaphores" respectively. The definition of the P- and V ...
  50. [50]
  51. [51]
    Electrical energy aware parallel computing with MPI and CUDA
    When the tasks are assigned, electrical power consumption increases, but not evenly for each core - each next core increases consumption of power less than the ...
  52. [52]
    Parallel Programming Concepts and High Performance Computing
    In parallel computing, efficiency is the proportion of simultaneously available resources utilized by a computation.
  53. [53]
    [PDF] Optimizing Applications for NUMA - Intel
    NUMA, or Non-Uniform Memory Access, is a shared memory architecture that describes the placement of main memory modules with respect to processors in a ...
  54. [54]
    [PDF] A Message-Passing Interface Standard - MPI Forum
    Nov 2, 2023 · The MPI standard includes point-to-point message-passing, collective communications, group and communicator concepts, process topologies, ...
  55. [55]
    [PDF] THE EFFECTS OF LATENCY, OCCUPANCY, AND BANDWIDTH IN ...
    Distributed shared memory (DSM) machines can be characterized by four parameters, based on a slightly modified version of the logP model. The l (latency) and ...
  56. [56]
    [PDF] Shared Memory Consistency Models: A Tutorial
    The goal of this tutorial article is to provide a description of sequential consistency and other more relaxed memory consistency models in a way that would be ...
  57. [57]
    Reducing false sharing on shared memory multiprocessors through ...
    We have developed compiler algorithms that analyze explicitly parallel programs and restructure their shared data to reduce the number of false sharing ...
  58. [58]
    [PDF] Effects of Communication Latency, Overhead, and Bandwidth in a ...
    Abstract. This work provides a systematic study of the impact of commu- nication performance on parallel applications in a high performance.
  59. [59]
    Pioneer of Multicore Processor Design Receives the ACM-IEEE CS ...
    Jun 7, 2023 · In the early 1990s, Olukotun became a leading designer of a new kind of microprocessor known as a "chip multiprocessor"—today called a " ...
  60. [60]
    Multicore CPU: Processor Proliferation - IEEE Spectrum
    Dec 30, 2010 · To solve that problem, Olukotun and his students designed the first general-purpose multicore CPU. This idea, more than any other in the past ...
  61. [61]
    [PDF] Multi-core processors – An overview - arXiv
    Multi-core processors are generally designed partitioned so that the unused cores can be powered down or powered up as and when needed by the application ...
  62. [62]
    Intel® Core™ i7 processors (14th gen)
    Intel® Core™ i7 processors (14th gen) product listing with links to detailed product features and specifications.
  63. [63]
    Extreme Software Scaling - ACM Queue
    Oct 18, 2005 · The advent of SMP (symmetric multiprocessing) added a new degree of scalability to computer systems. Rather than deriving additional ...Missing: advantages | Show results with:advantages
  64. [64]
    [PDF] AMD Opteron™ Shared Memory MP Systems
    Sep 22, 2002 · • Programming model of memory is effectively SMP. – Physical address space is flat and fully coherent. – Far to near memory latency ratio in a ...
  65. [65]
    AMD EPYC™ Processors
    When comparing 5 Gen AMD EPYC Server CPUs to Intel Xeon 6 CPUs, AMD EPYC Server CPUs offer better general computing, end-to-end AI performance, and power ...EPYC 9005 (5th Gen) · Discover EPYC 4004 · EPYC Energy Efficiency
  66. [66]
    Intel® Xeon® Processors - Server, Data Center, and AI Processors
    Find the latest list of Intel® Xeon® processors, plus specifications, benchmarks, features, Intel® technology, reviews, pricing, and where to buy.
  67. [67]
    [PDF] Multi-Core Cache Hierarchies - Electrical and Computer Engineering
    The resulting L2 cache yields high performance thanks to the clear low latency advantage of transmission lines. Halo Network, Jin et al., HPCA'07. Jin et al ...<|control11|><|separator|>
  68. [68]
    On the performance benefits of sharing and privatizing second and ...
    This paper investigates the performance impact of cache sharing on a homogeneous same-ISA 16-core processor with private first-level (L1) caches.
  69. [69]
    [PDF] A Brief Introduction to Parallel Computing∗
    Aug 2, 2006 · Here, the distributed computing model based on message passing is the most likely to remain the standard for software writing and tools like ...
  70. [70]
    Overview -- FAQ - Beowulf.org
    Beowulf Clusters are scalable performance clusters ... Each consists of a cluster of PCs or workstations dedicated to running high-performance computing tasks.
  71. [71]
    AWS ParallelCluster - Amazon Web Services
    AWS ParallelCluster is an open source cluster management tool that makes it easy for you to deploy and manage High Performance Computing (HPC) clusters on AWS.
  72. [72]
    CUDA C++ Programming Guide
    The programming guide to the CUDA model and interface.
  73. [73]
    Parallel and reconfigurable computing - University of Auckland
    A reconfigurable hardware system constructed from field-programmable gate arrays (FPGAs) can provide much higher performance for certain applications than ...
  74. [74]
    Tensor Processing Units (TPUs) - Google Cloud
    Their parallel structure makes them ideal for algorithms that process large blocks of data commonly found in AI workloads. Learn more. A TPU is an application- ...
  75. [75]
    Frontier - Oak Ridge Leadership Computing Facility
    Exascale is the next level of computing performance. By solving calculations five times faster than today's top supercomputers—exceeding a quintillion, or 1018, ...
  76. [76]
    Frontier: Step By Step, Over Decades, To Exascale - The Next Platform
    May 30, 2022 · Which is why it is significant that Frontier is hugely more energy efficient than the “Titan” hybrid CPU-GPU supercomputer that it is being ...<|separator|>
  77. [77]
    Designing a highly-scalable operating system: The Blue Gene/L story
    Dec 1, 2006 · Blue Gene/L is currently the world's fastest and most scalable supercomputer. It has demonstrated essentially linear scaling all the way to ...
  78. [78]
    [PDF] A Message-Passing Interface Standard - MPI Forum
    Nov 15, 2003 · Beginning in March, 1995, the Message Passing Interface Forum reconvened to correct errors and make clarifications in the MPI document of May 5, ...
  79. [79]
    Task-Based Programming - Intel
    oneTBB is a library that supports scalable parallel programming using standard ISO C++ code. Documentation includes Get Started Guide, Developer Guide, ...
  80. [80]
    [PDF] OpenMP C and C++ Application Program Interface
    known as the OpenMP C/C++ Application Program Interface (API). The goal of this specification is to provide a model for parallel programming that allows a ...
  81. [81]
    Data parallelism in Haskell | Proceedings of the 2nd ACM SIGPLAN ...
    The implicit data parallelism in collective operations on aggregate data structures constitutes an attractive parallel programming model for functional ...
  82. [82]
    Language Overview — Chapel Documentation 2.6
    Chapel is an emerging parallel programming language designed for productive scalable computing. Chapel's primary goal is to make parallel programming far more ...
  83. [83]
    Parallel Computing - Julia Documentation
    Julia's multi-threading provides the ability to schedule Tasks simultaneously on more than one thread or CPU core, sharing memory.
  84. [84]
    X10: concurrent programming for modern architectures
    Mar 14, 2007 · It provides for recursive fork-join parallelism for structured concurrency. It provides for termination detection so that collections of ...
  85. [85]
    [PDF] Automatic program parallelization - Proceedings of the IEEE
    It covers dependence analysis techniques, followed by a discussion of program transformations, including straight-line code parallelization, do loop ...
  86. [86]
    [PDF] A Performance-based Approach to Automatic Parallelization
    A key analysis technique in a parallelizing compiler is data dependence analysis. It determines, which statements (or expressions) need to be kept in the ...
  87. [87]
    [PDF] Quick-Reference Guide to Optimization with Intel® Compilers
    Optimize for parallel execution on multi-threaded, multi-core and multi-processor systems using: the auto-parallelization option /Qparallel (-parallel); OpenMP* ...
  88. [88]
    [PDF] Intel® C++ & Fortran Compiler - CERN Indico
    Facilitates or prevents auto-parallelization by assisting the compiler's dependence analysis of the immediately following DO loop. SIMD. Requires and controls ...
  89. [89]
    [PDF] The Limits of Alias Analysis for Scalar Optimizations
    This paper compares alias analysis algorithms on scalar optimizations, including an analysis that assumes no aliases, to establish a very loose upper bound on ...Missing: profitability heuristics
  90. [90]
    [PDF] A Sensible Approach to Speculative Automatic Parallelization
    The introduction of speculation to automatic parallelization over- came these applicability limitations but caused profitability problems due to high commu-.
  91. [91]
    A study on popular auto‐parallelization frameworks - Prema - 2019
    Feb 11, 2019 · We study five popular auto-parallelization frameworks (Cetus, Par4all, Rose, ICC, and Pluto) and compare them qualitatively as well as ...
  92. [92]
    [PDF] DMTCP: Transparent Checkpointing for Cluster Computations and ...
    DMTCP (Distributed MultiThreaded CheckPointing) is a transparent user-level checkpointing package for distributed applications. Checkpointing and restart is ...
  93. [93]
    DMTCP: Transparent checkpointing for cluster computations and the ...
    Abstract: DMTCP (distributed multithreaded checkpointing) is a transparent user-level checkpointing package for distributed applications.
  94. [94]
    [PDF] System-Level versus User-Defined Checkpointing - CS@Cornell
    Abstract. Checkpointing and rollback recovery is a very effective technique to tolerate transient faults and preventive shutdowns.
  95. [95]
    [PDF] Interconnect Agnostic Checkpoint/Restart in Open MPI - HPDC
    As HPC applications run longer and/or scale further the incorporation of fault tolerance techniques becomes a necessity. Checkpoint/Restart is the most popular.
  96. [96]
    A model of checkpoint behavior for applications that have I/O
    Apr 17, 2022 · In this paper, we present a model of checkpoint behavior for parallel applications that performs I/O; this depends on the application and on other factors.
  97. [97]
    [PDF] Hybrid Checkpointing for MPI Jobs in HPC Environments
    Overall, the experiments show that: (1) the overhead of full/incremental checkpointing of the MPI job is largely proportional to the size of the checkpoint file ...
  98. [98]
    [PDF] Parallel Algorithms - CMU School of Computer Science
    Brent's theorem shows that an algorithm designed for one of the work-depth models can be translated in a work-preserving fashion to a multiprocessor model.
  99. [99]
    Existence, Uniqueness, and Construction of Rewrite Systems | SIAM Journal on Computing
    - **Title**: Existence, Uniqueness, and Construction of Rewrite Systems
  100. [100]
    [PDF] Prefix Sums and Their Applications
    This section describes an algorithm for calculating the scan operation in parallel. For p processors and a vector of length n on an EREW PRAM, the algorithm has ...
  101. [101]
    [PDF] MapReduce: Simplified Data Processing on Large Clusters
    MapReduce is a programming model and an associ- ated implementation for processing and generating large data sets. Users specify a map function that ...
  102. [102]
    PIPELINED DATA PARALLEL ALGORITHMS
    ABSTRACT: A new style of efficient parallel algorithms on distributed-memory multiprocessors is introduced, which exploits parallelism through pipelined ...<|control11|><|separator|>
  103. [103]
    Parallelism in random access machines - ACM Digital Library
    A model of computation based on random access machines operating in parallel and sharing a common memory is presented.
  104. [104]
    [PDF] An Algorithm for the Machine Calculation of Complex Fourier Series
    Cooley and John W. Tukey. An efficient method for the calculation of the interactions of a 2" factorial ex- periment was introduced by Yates and is widely ...
  105. [105]
    [PDF] Parallel Matrix Multiplication: A Systematic Journey
    This paper introduces a set notation for describing the data distributions that underlie the Elemental library. The notation is motivated using parallel-.
  106. [106]
    [PDF] Addressing failures in exascale computing - Marc Snir
    We are using interrupt as synonymous with detected failure, so mean time between interrupts (MTBI) is equal to mean time between failures (MTBF). In our ...
  107. [107]
  108. [108]
    A highly scalable, algorithm-based fault-tolerant solver for ...
    We show that the Fault-Tolerant Combination Technique - an algorithm-based forward recovery method - can tolerate a large number of faults with a low overhead ...
  109. [109]
  110. [110]
  111. [111]
  112. [112]
  113. [113]
    [PDF] Von Neumann's Self-Reproducing Automata
    But von Neumann's automata theory placed more emphasis on logic and digital computers, while Wiener's cybernetics was oriented more around physiology and ...
  114. [114]
    Use of parallelism in numerical calculations - 102635119 - CHM
    Item Details. Date: 1958-07-21 (Made); Type: Document; Catalogue number: 102635119; People: D.S. Slotnick (Author) John Cocke (Author) ... Technical Paper or Note ...
  115. [115]
    Jews in Computer & Information Science - JINFO.org
    Slotnick designed SOLOMON in the early 1960s and built the first parallel processing prototypes. He was later the architect of Illiac IV, the first ...
  116. [116]
    Univac-Larc, the next step in computer design - ACM Digital Library
    , Larc has three entirely new fea- tures, all new forms of parallel operation within a computer. First, there are two computing systems, one for arithmetic, and ...Missing: proposal | Show results with:proposal
  117. [117]
    [PDF] THE IL IC IV - The First Supercomputer
    In looking back at the history of the Illiac IV project, lawrence ... The Illiac IV disk memory (140M) is the Illiac processor main memory. Under ...
  118. [118]
    Parallel architectures for computer systems | Physics Today | AIP ...
    2. J. Cocke, D. L. Slotnick, “The use of parallelism in numerical calculations,” IBM Research memorandum RC‐55, 21 July 1958.
  119. [119]
    [PDF] The CRAY- 1 Computer System - cs.wisc.edu
    To be efficient at processing short vectors, vector startup times must be small. On the CRAY-1, vector instructions may issue at a rate of one instruction.
  120. [120]
    The Cray-1 Supercomputer - CHM Revolution
    Its unique vector-processing design suited it to many critical computational problems, such as cryptography, bomb simulation, and aircraft design. View Artifact ...
  121. [121]
    [PDF] The Connection Machine - DSpace@MIT
    Mar 2, 2025 · In a Single Instruction Multiple Data (SIMD) machine, all processors are controlled from a single instruction stream which is broadcast to all ...
  122. [122]
    The CM-5 Connection Machine: a scalable supercomputer
    Distributed architectures · Grid computing · Parallel architectures · Multicore architectures · Multiple instruction, multiple data · Serial architectures.
  123. [123]
    Timeline | TOP500
    June 1, 1993​​ The first TOP500 List is published on June 24/1993, the first day of the 8th Mannheim Supercomputer Seminar.
  124. [124]
    Our History: Innovations Over the Years - NVIDIA
    NVIDIA CUDA Architecture. 2006. CUDA. Opens parallel processing capabilities of GPUs to science and research with unveiling of CUDA® architecture. NVIDIA AI ...
  125. [125]
    Multi-objective quantum hybrid evolutionary algorithms for ... - Nature
    Apr 28, 2025 · This paper proposes a novel quantum-inspired multi-objective optimization algorithm for IoT service management.
  126. [126]
    OpenCL: A Parallel Programming Standard for Heterogeneous ... - NIH
    The trend towards heterogeneous computing and highly parallel architectures has created a strong need for software development infrastructure in the form of ...
  127. [127]
    Advances in Asynchronous Parallel and Distributed Optimization
    This article reviews recent developments in the design and analysis of asynchronous optimization methods, covering both centralized methods.
  128. [128]
    Launching a New Class of U.S. Supercomputing
    Nov 17, 2022 · Based on petascale systems, scientists predicted that exascale supercomputers would face key challenges in power efficiency, data movement, and ...
  129. [129]
    [PDF] performance computing in medium-range weather forecasting: half a ...
    Sep 9, 2025 · This challenge demanded a fundamental redesign of forecasting software and introduced parallelism as a foundation of ECMWF computing models.
  130. [130]
    Fact sheet: Supercomputing at ECMWF
    Oct 18, 2022 · Only a supercomputer can handle the enormous amounts of mathematical calculations and data processing involved in modern-day weather forecasting.
  131. [131]
    Parallelization - GROMACS 2024 documentation
    The CPU time required for a simulation can be reduced by running the simulation in parallel over more than one core.Coordinate And Force... · Dynamic Load Balancing · Interaction Ranges
  132. [132]
    GROMACS 4.5: a high-throughput and highly parallel open source ...
    Feb 13, 2013 · Improvements in processor power, simulation algorithms and new computing paradigms are opening a new frontier for molecular dynamics where many ...
  133. [133]
    Parallel finite element solver for multi-core computers with shared ...
    Jul 15, 2021 · A direct finite element solver is considered for symmetric sparse matrices arising from the application of the finite element method to problems of structural ...
  134. [134]
    Global climate simulations achieve 1.25 km resolution—team ...
    Sep 29, 2025 · For the first time, scientists have run global coupled climate simulations at a resolution of just 1.25 kilometres.<|separator|>
  135. [135]
    Parallel Seismic Data Processing Performance with Cloud-based ...
    Apr 12, 2025 · This article introduces a general processing framework to effectively utilize waveform data stored on modern cloud platforms.
  136. [136]
    [PDF] Crash Simulation of Large-Number-of-Elements Car Model by LS ...
    To resolve this problem, we investigated the possibility of performing practical analysis by highly parallel computing on a parallel computer. This paper.Missing: automotive | Show results with:automotive
  137. [137]
    TDat: An Efficient Platform for Processing Petabyte-Scale Whole ...
    Jul 31, 2017 · This process is suitable for parallel reading and calculating. TDat uses two open-source parallel libraries: OpenMP and MPI. OpenMP is used to ...
  138. [138]
    An introduction to parallel rendering - ScienceDirect.com
    This article provides an overview of the parallel rendering field, encompassing both hardware and software systems.
  139. [139]
    Apache Hadoop
    Spark provides a simple and expressive programming model that supports a wide range of applications, including ETL, machine learning, stream processing, and ...Download · Setting up a Single Node Cluster · Hadoop 2.7.2 · Hadoop CVE List
  140. [140]
    The remarkable, yet not extraordinary, human brain as a scaled-up ...
    Jun 22, 2012 · Remarkably, at an average of 86 billion neurons and 85 billion nonneuronal cells (25), the human brain has just as many neurons as would be ...
  141. [141]
    Scale of the Human Brain - AI Impacts
    The brain has about 10¹¹ neurons and 1.8-3.2 x 10¹⁴ synapses. These probably account for the majority of computationally interesting behavior. Contents. Support.Support · Number of synapses in the brain
  142. [142]
    Pattern activation/recognition theory of mind - Frontiers
    Ray Kurzweil defines a “Pattern Recognition Theory of Mind” that states that the brain uses millions of pattern recognizers, plus modules to check, organize, ...
  143. [143]
    Biologically-Inspired Neuromorphic Computing - PMC
    This hardware may be designed for a variety of purposes, including “deep learning” tasks, or development of biologically realistic models of neuronal networks ...
  144. [144]
    Spiking Neural Networks and Bio-Inspired Supervised Deep Learning
    Jul 30, 2023 · This survey aims at providing a comprehensive review of recent biologically-inspired approaches for AI.
  145. [145]
    Spike-based dynamic computing with asynchronous sensing ...
    May 25, 2024 · A promising solution with an attractive low-power feature is neuromorphic computing, which is partially inspired by the human brain that runs ...
  146. [146]
    Advancing System Performance with Redundancy: From Biological ...
    Mar 1, 2019 · While the conventional interpretation often ties redundancy with fault tolerance, we propose a new model arguing that it can be engineered ...
  147. [147]
    A million spiking-neuron integrated circuit with a scalable ... - Science
    Aug 8, 2014 · With 5.4 billion transistors occupying 4.3-cm2 area in Samsung's 28-nm process technology, TrueNorth has ∼428 million bits of on-chip memory.Missing: neuromorphic chip paper