CPU-GPU Implementation of a Computational-Intensive Application

2018 COE Engineering Design Project (GK01)


Faculty Lab Coordinator

Gul Khan

Topic Category

Software / Data Engineering

Preamble

Heterogeneous computing involves CPU-GPU processing clusters and it is gaining attraction due to General-Purpose GPU (GPGPU) programming and shared memory architectures of CPU-GPU systems. GPUs (Graphics Processing Units) were originally intended for graphics processing. However, GPUs are being increasing used for a wide range of computational-intensive applications. Such applications have led the GPU manufacturers to amend the internal GPU architectures from SIMD and MIMD to a mixture Single Instruction Multiple Thread (SIMT) architecture-based computing structure. The GPUs with the new and modified architecture are called General Purpose GPU (GPGPU). Software developers for heterogeneous systems have been seeking new ways to utilize untapped power of the GPU for various compute hungry specific applications such as cryptocurrency and data mining. The main concern for GPU based computing is their higher power consumption that must be considered.

Objective

CPU-GPU implementation of a computing-intensive Multimedia or Encryption application for faster execution.

Partial Specifications

1. Survey various GPU boards suitable for CPU-GPU programming.
2. Study and learn OpenCL (C based Language) for GPU and parallel programming.
3. Investigate GPU architectures and their programming techniques.
4. Selection of a candidate multimedia or encryption application for CPU-GPU implementation.
5. Identify parts of the application or its tasks in the task graph suitable for GPU implementation.
6. Partition the application task graph into CPU and GPU allocation with minimal communication between CPU and GPU.
7. Compare the execution time of CPU-GPU implementation with the CPU only implementation.

Suggested Approach

1. Study and learn various GPU architectures as well as their programming details.
2. Study and select an economical and low-cost GPU board for your project.
3. Select a computing-intensive multimedia or encryption application suitable for CPU-GPU implementation.
4. Review and learn OpenCL (C based Language) for GPU and parallel programming.
5. Divide the selected application task graph into CPU and GPU implementation with minimal communication overhead between CPU and GPU.
6. Implement the application on target CPU-GPU system by using OpenCL environment.
7. Determine the application execution speed for a CPU only implementation.
8. Compare the CPU-GPU implementation with the CPU only implementation in terms of execution time and minimum power consumption.

Group Responsibilities

1. Investigate and study various GPU architectures. 2. Select a suitable high-performance application for CPU-GPU implementation. 3. Study different GPU platforms to select a target CPU-GPU board/platform. 4. Study and write small OpenCL designs for CPU-GPU systems. 5. Write the single CPU code of your selected application. 6. Write OpenCL code for the selected application. 7. Convert your application into a task graph and program the GPU candidate tasks as OpenCL kernels. 8. Implement the application for the selected CPU-GPU platform. 9. For verification, compare your CPU-GPU implementation with a single CPU implementation of the same application in terms of execution time and power consumption.

Student A Responsibilities

1. Investigate and study various GPU architectures and corresponding GPU platforms for implementation. 2. Select a suitable computing-intensive application for CPU-GPU implementation in consultation with other students in the group. 3. Study and practice OpenCL software development environment for GPU programming. 4. Develop OpenCL kernel for selected application tasks working with Student B. 5. Develop complete OpenCL code of the application for CPU-GPU implementation by working with student B. 6. Assist Student B and C and manage the overall project design and implementation.

Student B Responsibilities

1. Investigate and study various GPU architectures and corresponding GPU platforms for implementation. 2. Select a suitable computing-intensive application for CPU-GPU implementation in consultation with other students in the group. 3. Study and practice OpenCL software development environment for GPU programming. 4. Improve and develop OpenCL kernel for selected application tasks working with Student A. 5. Develop complete OpenCL code of the application for CPU-GPU implementation by working with student A. 6. Assist Student A and C to manage the overall project design and implementation.

Student C Responsibilities

1. Investigate and study different GPU architectures and corresponding GPU platforms for target application implementation. 2. Select a suitable computing-intensive application for CPU-GPU implementation in consultation with other students in the group. 3. Study and practice OpenCL software development environment for GPU programming. 4. Develop OpenCL or C code for the selected application for single CPU implementation in consultation with the other with the other students in the group. 5. Understand and verify the application OpenCL code developed by student A and B. 6. For verification, compare your single CPU implementation with CPU-GPU implementation of the same application in terms of execution time and power consumption. 7. Assist Student A and B to manage the overall project and implementation.

Course Co-requisites

COE718, COE838

 


GK01: CPU-GPU Implementation of a Computational-Intensive Application | Gul Khan | Monday August 27th 2018 at 03:58 PM