The OpenCL (Open Common Language) is an open standard for parallel programming of heterogeneous systems including CPUs, GPUs, Digital Signal Processors (DSPs), Field-programmable gate arrays (FPGAs). For the engineering computing, GPUs are more suited for throughput-critical applications like the Monte Carlo (MC) and similar codes, while CPUs are more suited for latency-critical applications like the Computational Fluid Dynamic (CFD) and similar codes. However, determining how OpenCL tasks should be dynamically best scheduled to heterogeneous devices is non-trivial. This project will investigate an OpenCL task scheduler to optimize the task distribution for GPU-CPU heterogeneous architecture. Newly arriving OpenCL tasks are inserted into the task queue. A first-come-first-serve (FCFS) scheduling policy will be used to dequeue and dispatch the task, due to its simplicity and low overhead. At this moment, the run-time scheduler developed in this project will make a proper decision whether to dispatch this task to GPU or CPU, which depends on the best speeding up of computing. The challenge here is that how the scheduler can determine the best platform (GPU/CPU) for a certain task. Through this project, students will investigate machine learning based solutions for the scheduler, which is the emerging research trend to do the task scheduling with best performance. They will learn and practice the most commonly used cross-platform parallel programming language OpenCL and deeply understand its internal working mechanism.