Workload-aware Scheduling Techniques for General Purpose Applications on Graphics Processing Units