關於CPU與GPU的同步問題

2021-03-31 08:56:59 字數 1334 閱讀 1598

前兩天在寫**的時候,想到這個問題,我的程式gpu要把結果輸出到深度緩衝區,然後交給cpu查詢,

gpu不是通用處理器,通常的**p是不合適的。又仔細讀了opengl ext spec,發現nvidia的occlusion query考慮到了這個問題,是我一直沒有讀到,還是把這些天的一些簡單筆記寫一下。

標準opengl

的只提供了兩種同步的機制:

glflush, glfinish.

flush,

只是向user

保證可以在有限的時間裡完成命令,但是這個時間無法確定,它只是乙個適度的工具;

finish,

會stall cpu

的執行,直到所有

pending

的圖形命令執行完成。

而nv_fence

擴充套件則提供了乙個中間的尺度,既能夠保證

finish

一部分的命令,又提供了判斷已給圖形命令是否完成的能力。

乙個有用的應用就是檢測

gpu完成

gl命令的效能,如下示例:

start = getcurrenttime();

updatetextures();

glsetfencenv(texture_load_fence, gl_all_***pleted_nv);

drawbackground();

glsetfencenv(draw_background_fence, gl_all_***pleted_nv);

drawcharacters();

glsetfencenv(draw_characters_fence, gl_all_***pleted_nv);

glfinishfencenv(texture_load_fence);

textureloadend = getcurrenttime();

glfinishfencenv(draw_background_fence);

drawbackgroundend = getcurrenttime();

glfinishfencenv(draw_characters_fence);

drawcharactersend = getcurrenttime();

printf("texture load time = %d/n", textureloadend - start);

printf("draw background time = %d/n", drawbackgroundend - textureloadend);

printf("draw characters time = %d/n", drawcharacters - drawbackgroundend);

組成 GPU與CPU的比較

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

GPU與CPU簡單區別

gpu的運算速度取決於僱了多少小學生,cpu的運算速度取決於請了多麼厲害的教授。教授處理複雜任務的能力是碾壓小學生的,但是對於沒那麼複雜的任務,還是頂不住人多。當然現在的gpu也能做一些稍微複雜的工作了,相當於公升級成初中生高中生的水平。但還需要cpu來把資料喂到嘴邊才能開始幹活,究竟還是靠cpu來...

CPU與GPU效能的比較報告

在一塊p100gpu 視訊記憶體16276mib 效能如下 由上圖可見,隨著程序數目的增大耗時會線性增加。當然,如果rt滿足要求,卡上可以同時部署其他任務。intel r xeon r cpu e5 2620 v3 2.40ghz 24核伺服器下。tf預設為盡可能的占用所有的核,真正的neuron服...