hello world

名詞的概念:

1涛救、cl_int clGetPlatformIDs (cl_uint num_entries,cl_platform_id *platforms,cl_uint *num_platforms)

Platform (平臺(tái)):主機(jī)加上OpenCL框架管理下的若干設(shè)備構(gòu)成了這個(gè)平臺(tái)匆光,通過(guò)這個(gè)平臺(tái),應(yīng)用程序可以與設(shè)備共享資源并在設(shè)備上執(zhí)行kernel鞭达。實(shí)際使用中基本上一個(gè)廠商對(duì)應(yīng)一個(gè)Platform,比如Intel, AMD都是這樣。

2、cl clGetDeviceIDs (cl_platform_id platform,cl_device_type device_type,cl_uint num_entries,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cl_device_id *devices,cl_uint *num_devices)

Device(設(shè)備):官方的解釋是計(jì)算單元(Compute Units)的集合沫换。舉例來(lái)說(shuō),GPU是典型的device轧叽。Intel和AMD的多核CPU也提供OpenCL接口苗沧,所以也可以作為Device刊棕。

3炭晒、cl_context clCreateContext (const cl_context_properties *properties,?cl_uint num_devices,

const cl_device_id *devices,

void ( CL_CALLBACK *pfn_notify)(const char *errinfo,const void *private_info, size_t cb,void *user_data),

void *user_data,cl_int *errcode_ret)

Context(上下文):OpenCL的Platform上共享和使用資源的環(huán)境待逞,包括kernel、device网严、memory objects识樱、command queue等。使用中一般一個(gè)Platform對(duì)應(yīng)一個(gè)Context震束。

4怜庸、cl_command_queue clCreateCommandQueue (cl_context context,cl_device_id device,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cl_command_queue_properties properties,cl_int *errcode_ret)

當(dāng)設(shè)備執(zhí)行任務(wù)時(shí),由主機(jī)來(lái)提交命令垢村,將命令發(fā)送到隊(duì)列中割疾。命令隊(duì)列和設(shè)備對(duì)應(yīng),一個(gè)命令隊(duì)列只能關(guān)聯(lián)到一個(gè)設(shè)備嘉栓,但是單個(gè)設(shè)備可以有多個(gè)命令隊(duì)列宏榕,這就可以將不同的命令提交到不同隊(duì)列。

Command Queue(指令隊(duì)列):在指定設(shè)備上管理多個(gè)指令(Command)侵佃。隊(duì)列里指令執(zhí)行可以順序也可以亂序麻昼。一個(gè)設(shè)備可以對(duì)應(yīng)多個(gè)指令隊(duì)列。

5馋辈、cl_program?clCreateProgramWithSource (cl_context context,cl_uint count,const char **strings,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? const size_t *lengths,cl_int *errcode_ret)

cl_int?clBuildProgram (cl_program program,cl_uint num_devices,const cl_device_id *device_list,

const char *options,

void ( CL_CALLBACK *pfn_notify)(cl_program program,void *user_data),

void *user_data)

Program:OpenCL程序抚芦,由kernel函數(shù)、其他函數(shù)和聲明等組成迈螟。

6叉抡、cl_mem clCreateBuffer (cl_context context,cl_mem_flags flags,size_t size,void *host_ptr,

cl_int *errcode_ret)

Memory Object(內(nèi)存對(duì)象):在主機(jī)和設(shè)備之間傳遞數(shù)據(jù)的對(duì)象,一般映射到OpenCL程序中的global memory答毫。有兩種具體的類(lèi)型:Buffer Object(緩存對(duì)象)和Image Object(圖像對(duì)象)卜壕。

cl_int clEnqueueReadBuffer (cl_command_queue command_queue,cl_mem buffer,cl_bool blocking_read,

size_t offset,size_t size,void *ptr,cl_uint num_events_in_wait_list,const cl_event *event_wait_list,

cl_event *event)

7、cl_kernel?clCreateKernel (cl_program program,?const char *kernel_name,?cl_int *errcode_ret)

Kernel(核函數(shù)):可以從主機(jī)端調(diào)用烙常,運(yùn)行在設(shè)備端的函數(shù)轴捎。

cl_int clSetKernelArg (cl_kernel kernel,cl_uint arg_index,size_t arg_size,const void *arg_value)

8、cl_int?clEnqueueNDRangeKernel (cl_command_queue command_queue,cl_kernel kernel,

cl_uint work_dim,const size_t *global_work_offset,const size_t *global_work_size,

const size_t *local_work_size,cl_uint num_events_in_wait_list,const cl_event *event_wait_list,

cl_event *event)

NDRange:主機(jī)端運(yùn)行設(shè)備端kernel函數(shù)的主要接口蚕脏。實(shí)際上還有其他的侦副,NDRange是非常常見(jiàn)的,用于分組運(yùn)算驼鞭,以后具體用到的時(shí)候就知道區(qū)別了秦驯。

9. 設(shè)置Group Size

一個(gè)OpenCL運(yùn)行任務(wù)中并行計(jì)算的單位是work-item。而work-item的組織形式就由維數(shù)(dim),各維度尺寸( global_work_size)和分組方式( local_work_size)等參數(shù)決定挣棕。

注意幾點(diǎn):一是維數(shù)译隘,一般的OpenCL設(shè)備最大支持維數(shù)為3亲桥,可以查詢CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS來(lái)獲取固耘;二是local_work_size题篷,合適的size與具體OpenCL設(shè)備的最大并發(fā)資源有關(guān),可以不設(shè)置厅目。

/** step 9: set work group size */

cl_uint work_dim = 3;

// in most opencl device, max dimition is 3

size_t global_work_size[] = { ARRAY_SIZE, 1, 1 };

size_t *local_work_size = NULL; // let opencl device determine how to break work items into work groups

Host端來(lái)看番枚,OpenCL的組要執(zhí)行流程是這樣的:

List basic kernel source:

char *kernelSource =

"__kernel void test(__global int *pInOut)\n"

"{\n"

" int index = get_global_id(0);\n"

" pInOut[index] += pInOut[index];\n"

"}\n";

與這個(gè)例子運(yùn)算結(jié)果等價(jià)的程序?yàn)?br>

for (int i = 0; i < ARRAY_SIZE; i++)

{

a[i] += a[i];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市损敷,隨后出現(xiàn)的幾起案子葫笼,更是在濱河造成了極大的恐慌,老刑警劉巖拗馒,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件路星,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诱桂,警方通過(guò)查閱死者的電腦和手機(jī)洋丐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)访诱,“玉大人垫挨,你說(shuō)我怎么就攤上這事〈ゲ耍” “怎么了九榔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)涡相。 經(jīng)常有香客問(wèn)我哲泊,道長(zhǎng),這世上最難降的妖魔是什么催蝗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任切威,我火速辦了婚禮,結(jié)果婚禮上丙号,老公的妹妹穿的比我還像新娘先朦。我一直安慰自己,他們只是感情好犬缨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布喳魏。 她就那樣靜靜地躺著,像睡著了一般怀薛。 火紅的嫁衣襯著肌膚如雪刺彩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音创倔,去河邊找鬼嗡害。 笑死,一個(gè)胖子當(dāng)著我的面吹牛畦攘,可吹牛的內(nèi)容都是我干的霸妹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼念搬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抑堡!你這毒婦竟也來(lái)了摆出?” 一聲冷哼從身側(cè)響起朗徊,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偎漫,沒(méi)想到半個(gè)月后爷恳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡象踊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年温亲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杯矩。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡栈虚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出史隆,到底是詐尸還是另有隱情魂务,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布泌射,位于F島的核電站粘姜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏熔酷。R本人自食惡果不足惜孤紧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拒秘。 院中可真熱鬧号显,春花似錦、人聲如沸躺酒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阴颖。三九已至活喊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钾菊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工帅矗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人煞烫。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓浑此,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親滞详。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凛俱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容