CUDA 學習(二十) 優化策略5 演算法

2021-07-24 05:45:54 字數 313 閱讀 9714

一、概述

如果要考慮演算法,我們需要先思考如下問題:

(1)、如何將問題分解成塊或片,然後如何將這些塊分解成執行緒;

(2)、執行緒如何訪問資料以及產生什麼樣的記憶體模式;

(3)、演算法總共要執行多少工作以及序列化的實現方法有何顯著不同;

二、排序

可用的排序演算法有很多,其中有一些可以輕鬆、高效地在gpu 上實現,但也有很多不適合gpu 實現。

三、歸約

歸約是並行程式中一種常用的技巧。我們將通過不同的方法執行歸約。可以有基於全域性記憶體的原子加法、執行緒內歸約、基於塊數目的歸約、使用共享記憶體的歸約。

CUDA 學習(二十一) 優化策略6 資源競爭

一 識別瓶頸 分析瓶頸工具 1 visual profiler 對已實現的 進行分析,我們首先可以考慮的就是sdk 中提供的那些分析工具。比如,nvidia visual profile。這是一款多平台的工具。它能指出在我們核心中哪些是錯誤的,並告訴我們該如何改進。2 parallel nsight...

CUDA學習(二十四)

共享記憶體的影響 共享記憶體在多 種情況下可能會有所幫助,例如幫助合併或消除對全域性記憶體的冗餘訪問。但是,它也可以作為占用限制。在許多情況下,核心所需的共享記憶體量與所選塊的大小有關,但執行緒與共享記憶體元素的對映不需要是一對一的。例如,可能需要在核心中使用32x32元素共享記憶體陣列,但由於每塊...

CUDA學習(二十八)

多處理器級別 在更低層次上,應用程式應該最大化多處理器內各個功能單元之間的並行執行 如 硬體多執行緒 中所述,gpu多處理器依賴於執行緒級並行性來最大限度地利用其功能單元。因此利用率與駐留經線的數量直接相關。在每個指令發布時間,乙個warp排程器選擇乙個準備好執行下乙個指令的warp 如果有的話 然...