Parallel and Distributed Computing
Parallel and Distributed Computing
A distributed system is a model where distributed applications are running on multiple computers
linked by a communications network. Sometimes it is also called loosely coupled systems because in
which each processor has its own local memory and processing units. LOCUS and MICROS are some
examples of distributed operating systems.
Advantages of Distributed Systems:
Scalability: Distributed systems can be easily scaled by adding more computers to the
network.
Fault Tolerance: Distributed systems can recover from failures by redistributing work to other
computers in the network.
Geographical Distribution: Distributed systems can be geographically distributed, allowing
for better performance and resilience.
S.
No Parallel System Distributed System
Parallel systems work with the The distributed system consists of a number of
simultaneous use of multiple computer computers that are connected and managed so
resources which can include a single that they share the job processing load among
2. computer with multiple processors. various computers distributed over the network.
S.
No Parallel System Distributed System
These systems are multiprocessor In Distributed Systems, each processor has its
4. systems. own memory.
It is also known as a tightly coupled Distributed systems are also known as loosely
5. system. coupled systems.
These systems have close These systems communicate with one another
communication with more than one through various communication lines, such as
6. processor. high-speed buses or telephone lines.
These systems share a memory, clock, These systems do not share memory or clock in
7. and peripheral devices contrast to parallel systems.
S=1.19
The system improves by only 19%, showing that the 80% sequential part is the bottleneck.
Advantages
Provides a clear upper bound on performance.
Helps identify bottlenecks in programs.
Useful in guiding hardware/software design decisions.
Disadvantages
Assumes the sequential part is fixed (in practice, it can sometimes be optimized).
Assumes processors are identical, not always true in heterogeneous systems.
Ignores real-world factors like communication, synchronization, and load balancing overhead.
Hardware architectures:
Multiprocessors (shared memory)
1. Multiprocessor: A Multiprocessor is a computer system with two or more central processing units
(CPUs) share full access to a common RAM. The main objective of using a multiprocessor is to boost
the system’s execution speed, with other objectives being fault tolerance and application matching.
There are two types of multiprocessors, one is called shared memory multiprocessor and another is
distributed memory multiprocessor. In shared memory multiprocessors, all the CPUs shares the
common memory but in a distributed memory multiprocessor, every CPU has its own private
memory.
Parallel and Distributed Computing
The interconnection among two or more processor and shared memory is done with three methods
2)Multiport memories
As the name itself indicates, int this method is contains a single shared bus through which all
processor & memory unit can be communicated.
Consider CPU-1 is interacting with memory unit using common shared bud in that case all other
processor must be idle as we have only one bus to communicate.
Advantage:
Simple to implement.
Disadvantage:
Unlike in the shared common bus method, hence it contains separate bus for each processor to
communicate with the memory module.
Suppose CPU-1 wants to interact with memory module 1 then port mm1 is enabled. Similarly CPU-4
wants to
to interact with memory module 4 then port mm4 is enabled. Hence all the process can be
communicated parallelly. If more than one CPU request for same time memory module, priority will
be given in the order of CPU-1,CPU-2,CPU-3,CPU-4.
Advantage:
Disadvantage:
Costlier to implement.
Applications of Multiprocessor -
2. As a multiprocessor, such as single instruction, multiple data stream (SIMD), which is usually
used for vector processing.
Parallel and Distributed Computing
3. Multiple series of instructions in a single perspective, such as multiple instruction, single data
stream (MISD), which is used for describing hyper-threading or pipelined processors.
4. Inside a single system for executing multiple, individual series of instructions in multiple
perspectives, such as multiple instruction, multiple data stream (MIMD).
Enhanced performance.
Multiple applications.
Advantages:
Improved performance: Multiprocessor systems can execute tasks faster than single-processor
systems, as the workload can be distributed across multiple processors.
Better scalability: Multiprocessor systems can be scaled more easily than single-processor systems,
as additional processors can be added to the system to handle increased workloads.
Increased reliability: Multiprocessor systems can continue to operate even if one processor fails, as
the remaining processors can continue to execute tasks.
Reduced cost: Multiprocessor systems can be more cost-effective than building multiple single-
processor systems to handle the same workload.
Enhanced parallelism: Multiprocessor systems allow for greater parallelism, as different processors
can execute different tasks simultaneously.
Disadvantages:
Increased complexity: Multiprocessor systems are more complex than single-processor systems, and
they require additional hardware, software, and management resources.
Higher power consumption: Multiprocessor systems require more power to operate than single-
processor systems, which can increase the cost of operating and maintaining the system.
Difficult programming: Developing software that can effectively utilize multiple processors can be
challenging, and it requires specialized programming skills.
Parallel and Distributed Computing
Synchronization issues: Multiprocessor systems require synchronization between processors to
ensure that tasks are executed correctly and efficiently, which can add complexity and overhead to the
system.
Limited performance gains: Not all applications can benefit from multiprocessor systems, and some
applications may only see limited performance gains when running on a multiprocessor system.
2. Multicomputer: A multicomputer system is a computer system with multiple processors that are
connected together to solve a problem. Each processor has its own memory and it is accessible by that
particular processor and those processors can communicate with each other via an interconnection
network.
As the multicomputer is capable of messages passing between the processors, it is possible to divide
the task between the processors to complete the task. Hence, a multicomputer can be used for
distributed computing. It is cost effective and easier to build a multicomputer than a multiprocessor.
1. Multiprocessor is a system with two or more central processing units (CPUs) that is capable
of performing multiple tasks where as a multicomputer is a system with multiple processors
that are attached via an interconnection network to perform a computation task.
Parallel and Distributed Computing
2. A multiprocessor system is a single computer that operates with multiple CPUs where as a
multicomputer system is a cluster of computers that operate as a singular computer.
Advantages:
Improved performance: Multicomputer systems can execute tasks faster than single-computer
systems, as the workload can be distributed across multiple computers.
Better scalability: Multicomputer systems can be scaled more easily than single-computer systems,
as additional computers can be added to the system to handle increased workloads.
Increased reliability: Multicomputer systems can continue to operate even if one computer fails, as
the remaining computers can continue to execute tasks.
Reduced cost: Multicomputer systems can be more cost-effective than building a single large
computer system to handle the same workload.
Enhanced parallelism: Multicomputer systems allow for greater parallelism, as different computers
can execute different tasks simultaneously.
Disadvantages:
Increased complexity: Multicomputer systems are more complex than single-computer systems, and
they require additional hardware, software, and management resources.
Higher power consumption: Multicomputer systems require more power to operate than single-
computer systems, which can increase the cost of operating and maintaining the system.
Difficult programming: Developing software that can effectively utilize multiple computers can be
challenging, and it requires specialized programming skills.
Network latency: Multicomputer systems rely on a network to communicate between computers, and
network latency can impact system performance
Parallel and Distributed Computing
Distributed memory: Each workstation in the network has its own private memory. For
workstations to access remote data, they must communicate with other nodes over a high-
speed network.
Parallel computing: Computational tasks are broken down and executed simultaneously
across multiple workstations to improve performance. Programming for this requires a
strategy for distributing and moving data efficiently.
Primary benefits
Implementing a network of workstations offers significant advantages for businesses and researchers.
Modern implementations
Parallel and Distributed Computing
The concept of networked workstations has evolved with advancements in technology, particularly
with the rise of virtualization and cloud computing.
Desktop workstations: These are powerful, on-premise PCs that connect to local servers and
network peripherals.
Virtual workstations: Workstation environments are hosted on a central server, and users
access them remotely using thin clients or less powerful machines. This centralizes
management, improves security, and pools resources for more efficient use.
Network devices: A high-quality core switch to connect servers and workstations, along with
routers to manage data traffic.
Connectivity: High-speed Ethernet cables (Cat5e, Cat6) are typical for wired connections,
while Wi-Fi provides mobility for laptops and mobile workstations.
Networking protocols: Standard protocols include TCP/IP for communication, DHCP for
dynamic IP assignment, and DNS for name resolution. File and print sharing often rely on
protocols like SMB or NFS.
Cluster Computing
2. It resolves the demand for content criticality and process services in a faster way.
3. Many organizations and IT companies are implementing cluster computing to augment their
scalability, availability, processing speed and resource management at economic prices.
5. It provides a single general strategy for the implementation and application of parallel high-
performance systems independent of certain hardware vendors and their product decisions.
Parallel and Distributed Computing
A
Simple Cluster Computing Layout
2. Load-balancing clusters :
Incoming requests are distributed for resources among several nodes running similar programs or
having similar content. This prevents any single node from receiving a disproportionate amount of
task. This type of distribution is generally used in a web-hosting environment.
HA clusters are designed to maintain redundant nodes that can act as backup systems in case any
failure occurs. Consistent computing services like business activities, complicated databases,
customer services like e-websites and network file distribution are provided. They are designed to
give uninterrupted data availability to the customers.
Classification of Cluster :
1. Open Cluster :
IPs are needed by every node and those are accessed only through the internet or web. This type of
cluster causes enhanced security concerns.
2. Close Cluster :
Parallel and Distributed Computing
The nodes are hidden behind the gateway node, and they provide increased protection. They need
fewer IP addresses and are good for computational tasks.
Cluster Computing Architecture :
It is designed with an array of interconnected individual computers and the computer systems
operating collectively as a single standalone system.
A node – Either a single or a multiprocessor network having memory, input and output
functions and an operating system.
Two or more nodes are connected on a single line or every node might be connected
individually through a LAN connection.
1. Cluster Nodes
Cluster Components
1. High Performance :
The systems offer better and enhanced performance than that of mainframe computer networks.
2. Easy to manage :
3. Scalable :
4. Expandability :
Computer clusters can be expanded easily by adding additional computers to the network. Cluster
computing is capable of combining several additional resources or the networks to the existing
computer system.
5. Availability :
Parallel and Distributed Computing
The other nodes will be active when one node gets failed and will function as a proxy for the failed
node. This makes sure for enhanced availability.
6. Flexibility :
1. High cost :
It is not so much cost-effective due to its high hardware and its design.
Infrastructure may increase as more servers are needed to manage and monitor.
Applications of Cluster Computing :
Weather forecasting.
Image Rendering.
Earthquake Simulation.
Software architectures:
In today's world, people of all ages, from children to adults, use smartphones, laptops, computers, and
PDAs to solve both simple and complex tasks online using various software programs. To the user,
everything may seem simple and easy to use. And that’s the point of good software to provide high-
quality services in a user-friendly environment.
There the overall abstraction of any software product makes it looks like simple and very easier for
user to use. But in back if we will see building a complex software application includes complex
processes which comprises of a number of elements of which coding being just one part of the puzzle.
After gathering of business requirement by a business analyst then developer team begins working on
the Software Requirement Specification (SRS).
Parallel and Distributed Computing
This is followed by steps like testing, acceptance, deployment, maintenance etc. Every software
development process is carried out by following some sequential steps which comes under Software
Development Life Cycle (SDLC). In the design phase of Software Development Life Cycle the
software architecture is defined and documented. This article delves into the importance of software
architecture within the SDLC.
Software Architecture defines fundamental organization of a system and more simply defines a
structured solution. It determines how the various components of a software system are assembled,
how they relate to one another, and how they communicate. Essentially, it serves as a blueprint for
the application and a foundation for the development team to build upon.
Software architecture defines a list of things which results in making many things easier in the
software development process.
Software architecture is a multifaceted concept, and architects often categorize its characteristics
based on various factors such as operation, requirements, and structure. Here are some important
characteristics to consider:
Performance: The system should meet performance goals such as speed and responsiveness.
Fault tolerance: The system should gracefully handle errors and failures.
Parallel and Distributed Computing
Scalability: The system should be able to handle increasing loads without performance
degradation.
Supportability: The ease with which the system can be maintained and supported.
Maintainability: The system should be easy to update and fix over time.
Accessibility: Ensuring the system is usable by a wide range of people, including those with
disabilities.
Security: Protecting the system from unauthorized access and data breaches.
Usability: Ensuring the system is easy to use and intuitive for users.
Each character of the word SOLID defines one principle of software architecture.
The SOLID principles are key guidelines for creating well-structured, maintainable software
architectures This SOLID principle is followed to avoid product strategy mistakes. A software
architecture must adhere to SOLID principle to avoid any architectural or developmental failure.
Parallel and Distributed Computing
S.O.L.I.D PRINCIPLE
Single Responsibility - Each services or module should have only one responsibility or
purpose .
Interface Segregation Principle - Software should be divided into such microservices there
should not be any redundancies.
Software architecture comes under design phase of software development life cycle. It serves as one
of the first steps in the software development process. Without software architecture proceeding to
Parallel and Distributed Computing
software development is like building a house without designing architecture of house. So software
architecture is one of important part of software application development.
In technical and developmental aspects point of view below are reasons software architecture are
important.
Optimizes quality attributes: Architects select quality attributes to focus on, such as
performance and scalability.
Facilitates early prototyping: Architecture allows for early prototypes to be built, offering
insight into system behavior.
Component-based development: Systems are often built using components, which makes
them easier to develop, test, and maintain.
Adapts to changes: Architecture helps manage and integrate changes smoothly throughout
the development process.
Besides all these software architecture is also important for many other factors like quality of
software, reliability of software, maintainability of software, Supportability of software and
performance of software and so on.
Solid foundation: It lays the groundwork for a successful project, guiding development.
Scalability and flexibility: The system can adapt to future changes or demands.
Tooling and standardization: Obtaining the right tools and maintaining consistent standards
can sometimes be a challenge.
Uncertain predictions: It's not always possible to predict the success of a project based
solely on its architecture.
Parallel and Distributed Computing
Parallel Algorithms
Granularity
Shared-Memory Programming:
Distributed-Memory Programming:
Enterprise:
Parallel and Distributed Computing
Process templates
Research Topics