2013-02-17 25 views
2

我使用的HD5770有10個計算單元和32k的本地內存。本地記憶,我是否假設正確的概念?

我的全球尺寸爲256 * 256,
我的本地大小爲256

的工作組中的每一個需要使用的本地存儲器,我指定這樣的1K:

clSetKernelArg(predicate, param++, 1024, NULL); 

第一:這是分配本地內存的正確方法,還是必須指定所有工作組使用的緩衝區的整個大小,在設置內核arg時以及稍後根據本地ID在此緩衝區中設置索引時?

第二個:一個工作組是否只能在一個計算單元上執行?

第三項:工作組結束後會釋放內存嗎? (32K不會夠256個工作組,如果他們每個人的使用1K)

或者更一般的方式:將調度拿不出調度並聯超過32個工作組的照顧?

謝謝!

回答

2

1)這是如何分配1024個字節的未初始化的本地內存,所以如果這是你想要的,那麼是的,你做的是對的。您還可以定義在內核中的記憶是這樣的:

__local float localBuffer[1024]; 

2)這是實現定義的,所以沒有辦法知道,你不能假設。通常一個工作組在一個以上的計算單元上執行,但正如我所說,你永遠不知道。

3)內存將使用它,所以你不應該擔心釋放它,特別是因爲它是未初始化的,你是不是在傳遞一些緩衝下一次改寫。

希望這會有所幫助

+0

感謝您的回覆,但我如何知道同時有多少工作組會被激活?在這種情況下,超過32個不會同時執行 – Simbi 2013-02-17 12:59:27

+0

@ user984308,但無法知道真的,理論上工作組可以獨立運行。 OpenCL標準沒有指定執行模型如何映射到硬件上。 – 2013-02-17 14:27:10