OpenCL將陣列從記憶體copy到視訊記憶體

2022-06-21 16:00:14 字數 1525 閱讀 4645

我的思路的初衷是將這塊的資料送到視訊記憶體之後再送到暫存器中,從暫存器讀取的時間應該是很快的,通過這樣把計算的時間改為讀取的時間。當然,讀取暫存器的時間是否比計算更短,這個確實應該質疑,但是對於比較複雜的計算,我覺得直接讀應該是比計算更快的。而對於這部分資料,cpu計算應該會比gpu更快。當然,還應當考慮資料量的大小,從記憶體搬到視訊記憶體也是需要時間的。

..................

int ksize = 11

;float sigma_d = 3.0

;float *dkl = new

float[ksize*ksize];

for (int i = -ksize/2; i <= ksize/2; i++)

}cl_mem d_dkl;

d_dkl = clcreatebuffer(context, cl_mem_read_only, ksize*ksize*sizeof(float

), null,null);

clenqueuewritebuffer(commandqueue, d_dkl, cl_true,

0, ksize*ksize*sizeof(float), dkl, 0

, null, null);

........................

errnum |= clsetkernelarg(kernel, 2, sizeof(cl_mem), &d_dkl);

errnum |= clsetkernelarg(kernel, 3, sizeof(cl_mem), &ksize);

........................

delete dkl;

...................

主要就是clcreatebuffer函式和clenqueuewritebuffer函式的用法。

const sampler_t sampler = clk_address_clamp_to_edge |clk_filter_nearest;

kernel

void bilateralblur(read_only image2d_t src, write_only image2d_t dst, __constant float* dkl, int

ksize)

}float4 gij = (float4)(0.0f, 0.0f, 0.0f, 1.0f

);

if (denominator.x > 0 && denominator.y > 0 &&denominator.z)

write_imagef(dst, (int2)(x, y), gij);

}

與上一部落格的**相比,主要就是把dkl的計算改為了讀取,ksize也通過引數傳進來。

當然,我這裡的計算簡單,對於複雜的計算,應該還是可以考慮這種優化方法的。

下一步考慮記憶體優化,增大粒度。

**:

orange 關於將資料從軟盤讀到記憶體的一些總結

防止我以後忘記,我還是記一下吧 雖然都是在別人的基礎上隨便重複寫一下。然後呢,這裡先跟著書上學軟盤的,等我以後看完了全部去了解下光碟的做法。終於看完第四章了。一 軟盤入門知識 1.首先要了解軟盤的構造 以 1.44mb 軟盤為例 引導扇區 扇區號 0 fat1 扇區號 1 9 fat2 通常與 fa...

從記憶體角度 剖析 字元陣列 和字元指標

我們都知道,陣列 和指標原本是兩個完全不同程度的概念,他們表示的含義也不相同,然而我在c語言中經常會遇到將陣列轉換成指標來使用的情況.有時候,我們容易混淆兩者.今天我以一道面試題來剖析字元陣列和字元指標 的區別 首先 我們從理論出發,看看兩者的概念和定義 1 陣列 概念 what 一組相同資料型別的...

從記憶體上解析c 中陣列為什麼不支援多型

前段時間在c c 版塊的時候,看到有人問為什麼陣列物件不支援多型的問題,當時沒有回,只是感覺不支援!不能拿出理論和實際證據!後面因為工作也就沒有 細想,今天剛好看到酷殼上陳皓老師說的也就來述說一下!因為這個涉及到記憶體的問題,所以 我們先來乙個小段c語言簡單 typedef struct base ...