簡體   English   中英

OpenCL 內核參數中的字符***?

[英]Char*** in OpenCL kernel argument?

我需要將vector<vector<string>>傳遞給內核 OpenCL。 最簡單的方法是什么? 傳遞一個char***給我一個錯誤:

__kernel void vadd(
   __global char*** sets,
   __global int* m,
   __global long* result)
{}

錯誤:clBuildProgram(CL_BUILD_PROGRAM_FAILURE)

在 OpenCL 1.x 中,這種事情基本上是不可能的。 您需要將數據轉換為適合單個緩沖區對象,或至少適合固定數量的緩沖區對象。 主機上的指針在設備上沒有意義。 (使用 OpenCL 2 的 SVM 功能,您可以在主機和內核代碼之間傳遞指針值,但您仍然需要確保以適合於此的方式分配內存。)

我能想到的一種選擇是,記住我對程序的其余部分一無所知,如下所示:

  1. 為所有字符串創建一個 OpenCL 緩沖區。 將所有字符串所需的字節數相加。 (可能包括 nul 終止,具體取決於您要執行的操作)
  2. 創建一個用於查找字符串起始偏移量(可能還有長度)的緩沖區。 看起來你有 2 個查找維度(嵌套向量),所以你如何布局這將取決於你的內部向量(第二維)是否都是相同的大小。
  3. 將您的字符串背靠背寫入第一個緩沖區,在第二個緩沖區中記錄起始偏移量(和長度,如果需要)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM