本論文針對GPU (Graphics Processing Unit)上之哼唱選歌 (Query by Singing/Humming, QBSH)系統做出效能上的改良。此系統可將使用者數秒鐘之哼唱片段,與資料庫近兩萬首之歌曲進行比對,並找出最相似之前十名歌曲。 線性伸縮為此系統其中一種比對方法。我們設計了不同於前人之實作方式,在存放資料庫歌曲之音高向量方面,以GPU上之shared memory來取代local memory,使得系統更加貼近GPU之硬體特性,並在資料庫歌曲中加入額外的音高點以減少bank conflict之問題,此改進可將搜尋時間減少32%。 另一方面,為減少多餘的比對,我們也從資料庫中刪除了1265首之重複歌曲以及佔總長約22%之歌曲最長重複片段。 最後,我們也將此系統改良成可支援多張GPU,將比對工作平均分配給各GPU來運算,以最直觀的方式改善效能。當配備N張GPU時,系統可幾乎獲得N倍的加速。
This research proposes a modification to speed up a QBSH (query by singing/humming) system running on a GPU. The system can compare the user's singing or humming with about 20000 songs in the database and retrieve the top-10 most likely candidates. Linear scaling is one of the comparison methods in our QBSH system. We design a new implementation that uses shared memory instead of local memory for storing pitch vectors of songs in the database so that it is more closely conform to the design of GPU. Furthermore, we add extra pitch points to songs in the database to eliminate bank conflict. After these improvements, we can achieve a 32% reduction in retrieve time. Besides, in order to reduce redundant comparisons, we remove 1265 repeating songs from the database and the longest repeating pattern of each song, comprising around 22% of the total length of all songs in the database. Finally, we enhance the system to support multi-GPU so that the work load can be distributed among all GPUs to increase overall efficiency. A speedup factor close to N is achieved when the task is distributed among N GPUs.