Computers were designed in the beginning to have only one processor and algorithms been designed to be sequential. But modern computers have more than one processing element (either multiple CPU cores or GPU). The introduction of parallel architectures can improve program performance to alleviate the throughput of sequential programs that sometimes need to process the instructions one by one. However, you should consider some of the following communication factors when you are designing a Parallel Program: Scope, Cost of communication, Latency, Bandwidth, Visibility, Synchronous, and Asynchronous processing.
The RAM, Monitor, Hard Drive, Graphic Card, Printer and the various physical segments which are associated with the PC or which can be physically connected is the computer hardware. Without hardware, software cannot interact with the system components. Thus, hardware and software must collaborate to actualise the user need.
Although hardware factors can play a significant role in scalability, adding more machines in serial is rarely the answer and may, in some cases, cause performance to decrease. Therefore, the use of Parallel support libraries and subsystems should be considered when developing software that interacts directly with computer hardware or that is processing intensive.
The main goal of Parallel programming is to decrease execution time and increase speed, more CPU time is required. E.g. 1 parallel code that runs for 1 hour on 3 processors may use 3 hours of CPU time on 1 processor.
Learning Outcomes:
Completion of this assignment will address the following learning outcomes:
1. Evaluate a range of hardware and architectural features and make appropriate configuration selections to provide high performance taking into account cost and
availability.
2. Apply an understanding of the influences and constraints which affect the capability and performance of computer systems.
4. Appraise the ways in which auxiliary devices are used and how they interface with computers and their operating systems through interrupts and direct memory access.
Task:
Design and develop, a piece of software which interacts directly with computer hardware, including parallel architectures.
You are required to deliver a software solution with a report (1500 words). You should ensure the following are included in your development (this list is not exhaustive):
Part A (Design, implement and evaluate programs):
• You can select an application of your choice and parallelize it.
• You can use any programming language (Python, Java, C/C++, etc.) with which you are conversant and submit your source code.
• You are free to use any hardware (CPU, GPU or APU)
• You are free to use any Operating system (Linux, Windows, etc).
• You can use external libraries such as OpenMP, OpenCL, CUDA, etc.
• You are not allowed to use others work (such as sample programs and applications/programs written by other people).
Part B (Report – 1500 words):
You are required to submit a report of about 1250 words along with the code (both sequential version and parallel version). Also, you need to provide the video of working of your code. Your report should contain at least the following information:
• Summary or Introduction
• Programming language and hardware details: In this section, you should include details about programming language and hardware. Also, this is a section to mention external libraries.