vault backup: 2023-04-17 21:15:05

This commit is contained in:
2023-04-17 21:15:05 +08:00
parent 3c7c09b1c3
commit f0682b7f59
5 changed files with 129 additions and 54 deletions

View File

@@ -164,9 +164,23 @@ if (err != CL_SUCCESS) {
```
第一個參數是[[OpenCL#6. 建立 kernel]]所建立的kernel。
第二個參數是偏移量,我們假設它在所有維度上都是 0。`cl::NullRange` 對象將滿足該 0 規範。
**第三個參數是全局大小它指定希望執行與內核對象K**關聯的內核源代碼中指定的工作項
第三個參數是**全局大小它指定希望執行與內核對象K**關聯的內核源代碼中指定的工作項
第四個參數是本地大小,它指定應將多少工作項分組到一個工作組中。
重點在於第三個參數,因為 GPU 可以平行運算,這裡指定說我們的資料需要幾個
重點在於第三個參數,因為 GPU 可以平行運算,這裡指定平行運算的數量。
## 11. 讀回資料
## 11. 讀回資料
```cpp
grayHistogram.resize(sizeof(uint32_t) * 256);
err = queue.enqueueReadBuffer(clGrayHistogram, CL_TRUE, 0, 256 * sizeof(uint32_t), grayHistogram.data());
if (err != CL_SUCCESS) {
printf("OpenCL read clGrayHistogram error.\n");
}
```
第一行的 `grayHistogram` 是讀回 CPU 的記憶體。
[`enqueueReadBuffer`](https://registry.khronos.org/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueReadBuffer.html)的參數解釋:
第一個參數就是[[OpenCL#8. 建立 `cl::Buffer`]]所建立的其中一個 buffer。
第二個參數指定是否 **blocking_read**
第三個參數是 `cl::Buffer` 的偏移量。
第四個參數要讀取的長度。
第五個參數是要寫入的 memory address。