CPU對GPU的資源更新

2021-09-01 15:45:43 字數 2107 閱讀 1271

一共有四個方法進行對資源進行更新:

cpu呼叫:

id3d11devicecontext::map

gpu呼叫:

id3d11devicecontext::copysubresourceregion

id3d11devicecontext::copyresource

id3d11devicecontext::updatesubresource

首先如果想更新gpu中的resource,1是可以通過map()函式來讓cpu讀寫gpu的資料;2還可以通過id3d11devicecontext::copyresource(),id3d11devicecontext::updatesubresource()等來直接讓gpu寫更新它自己的resource。

資源建立時都會描述資源的d3d11_usage 特性:

d3d11_usage_default

d3d11_usage_immutable

d3d11_usage_dynamic

d3d11_usage_staging

這四種針對不同的cpu和gpu訪問許可權的情況

copysubresourceregion:

void copysubresourceregion(

[in] id3d10resource *pdstresource, // 目標

[in] uint dstsubresource, // 目標的子

[in] uint dstx, // 左上角開始的起始位置

[in] uint dsty,

[in] uint dstz,

[in] id3d10resource *psrcresource, // 源

[in] uint srcsubresource, // 源的子

[in] const d3d10_box *psrcbox // box 描述拷貝資源的區域

);

如果可以的話,盡量全部拷貝,常見使用即可,微軟的東西不穩定。d3d11_subresource_data 根本就不能直接賦值2d紋理,如果很難用不如不提供。

copyresource:

void copyresource(

[in] id3d10resource *pdstresource,

[in] id3d10resource *psrcresource

);

copysubresourceregion的簡潔版

updatesubresource:

void updatesubresource(

[in] id3d10resource *pdstresource,

[in] uint dstsubresource,

[in] const d3d10_box *pdstbox,

[in] const void *psrcdata,

[in] uint srcrowpitch,

[in] uint srcdepthpitch

);

其實copysubresourceregion針對的是d3d建立的資源,這些資源或者就儲存在gpu裡面,而updatesubresource跟多的是把記憶體中的一些外來物種溶於到裡面去,所以叫更新值。這裡讓描述源每行的跨度,而不是像d3d11_subresource_data 要求描述目標的跨度,目標的跨度並不等於每一行的畫素,它是大於的。

補充:default用於gpu快速讀寫,並且只能用updatesubresource()來更新。immutable用於被gpu唯讀,其中存放的資料不可變。dynamic提供快速的cpu寫和較慢的gpu讀。只能用map()來更新。staging提供了一種方法讓你可以讀取gpu寫回的資料。扼要歸納綜合來說:必要cpu常常更新的資料用dynamic,必要cpu常常更新的可用default,完全不必要cpu更新的資料用immutable,cpu必要讀的用staging。綜上所述,我們的cb一樣平常是要常常被更新的,以是用dynamic較為符合,進而可推斷,用map較符合,同時nvdia也表達保舉利用dynamic+map。這個跟硬體實現其實關係也挺大。updatesubresource()必要體系記憶體和特別的拷貝操縱,而map()則不必要這些。

CPU和GPU的區別

cpu 即 處理器,解釋計算機指令以及處理計算機軟體中的資料 gpu即圖形處理器,專門處理和繪製圖形相關的硬體。gpu時專為執行複雜的數學和 集合計算而設計的,有了它,cpu就從圖形處理的任務中解放出來,可以執行其他更多的 系統任務。硬體加速 在計算機中把計算量非常大的工作非陪給專門的硬體處理,減輕...

CPU和GPU的區別

個人認為cpu和gpu各有自己的適應領域。cpu central processing unit 計算核心較少,通常是雙核 四核 八核,但是擁有大量的共享快取 亂序執行等優化,可以做邏輯非常複雜的計算任務。這一點就當前的gpu來說,仍然難以做到。會犧牲大量的效能 造成大量的能耗開銷,而且增加了程式設...

組成 GPU與CPU的比較

不管是cpu還是gpu都是很高速的裝置,然而從主存中取資料會很慢很慢,為了充分利用高速裝置,二者都使用了快取,程式設計一定要考慮的是電腦程式的區域性性 locality 的基本屬性 時間區域性性與空間區域性性。多核時代和gpu並行運算時代來臨,另外乙個影響程式執行的速度的關鍵因素 快取一致性 cac...