| With the rapid development of computer technology, applications require more performance of computer system. However, it is hard to increase the capacity of memory because of manufacturing technique’s limitation, which makes it stuck in bottleneck to expand the main memory system. Meanwhile, Non-volatile phase change memory(PCM), provided us greater capacity and lower price at the same time, hybrid memory system combined by DRAM and PCM is becoming more and more popular. When a parallel program run on a hybrid memory system, threads may slow down each other because their memory requests distribute in difference memory channel, the request that access PCM will effect a much longer delay, so the thread with numerous PCM write operation needs more time to complete its memory access and eventually become the slowest thread, the slowest thread will obviously effect the processing of other threads and result in performance degradation over the whole application.In this paper, we propose a memory request scheduling algorithm designed specifically for parallel applications in hybrid memory environments. The algorithm on the basis of FRFCFS algorithm, scheduling the memory request according to the behavior of threads dynamically. It will reduce the running time of the slowest thread by using priority scheduling to the thread, thereby decreasing the overall program execution time. Our approach firstly estimates the frequency of memory access behavior for each thread on the run-time system, and then according the memory request quantity and the distribution difference of memory request, calculate the priority of each thread, and finally execute our scheduling strategy based on the priority on the premise of FRFCFS algorithm.We build the hybrid memory system using the GEM5 simulator and NVMain simulator, and run the NPB benchmarks in this hybrid memory system, we show that our hybrid memory system speeds up some memory-intensive parallel applications from NPB benchmarks averagely by 10% compared to the hybrid memory system before optimization. |