日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读书笔记-OpenCL编程指南 HelloWorld

發布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读书笔记-OpenCL编程指南 HelloWorld 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

main函數會實現或調用一組函數,完成以下操作:

可以和OpenCL入門二:OpenCL基礎概念中的代碼進行對比

OpenCL內核

__kernel void vector_add(global const float *a, global const float *b, global float *result) { int gid = get_global_id(0);result[gid] = a[gid] + b[gid]; } ———————————————— 版權聲明:本文為CSDN博主「肥叔菌」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/asmartkiller/article/details/86611145

主函數





選擇OpenCL平臺并創建一個上下文


選擇設備并創建命令隊列


創建和構建程序對象


執行內核


cl_context context = 0; cl_command_queue commandQueue = 0; cl_program program = 0; cl_device_id device = 0; cl_kernel kernel = 0; cl_mem memObjects[3] = { 0, 0, 0}; cl_int errNum;// 創建OpenCL上下文 context = CreateContext(&device); //獲得OpenCL設備,并創建命令隊列 commandQueue = CreateCommandQueue(context, device); // 創建OpenCL程序 program = CreateProgram(context, device, "device.cl"); // 創建OpenCL內核 kernel = clCreateKernel(program, "vector_add", NULL); // 創建OpenCL內存對象 float result[ARRAY_SIZE]; float a[ARRAY_SIZE]; float b[ARRAY_SIZE]; for (int i = 0; i < ARRAY_SIZE; i++) {a[i] = (float)i;b[i] = (float)(i * 2); } if (!CreateMemObjects(context, memObjects, a, b)) {return 1; } // 設置內核參數 errNum = clSetKernelArg(kernel, 0, sizeof(cl_mem), &memObjects[0]); errNum |= clSetKernelArg(kernel, 1, sizeof(cl_mem), &memObjects[1]); errNum |= clSetKernelArg(kernel, 2, sizeof(cl_mem), &memObjects[2]); if (errNum != CL_SUCCESS) {return 1; } // 執行內核 size_t gloabalWorkSize = ARRAY_SIZE;size_t localWorkSize = 1;std::cout << "GPU 運行開始:" << time_stamp() << std::endl;errNum = clEnqueueNDRangeKernel(commandQueue, kernel, 1, NULL, &gloabalWorkSize, &localWorkSize, 0, NULL, NULL);std::cout << "GPU 運行結束:" << time_stamp() << std::endl; //計算結果拷貝回主機 errNum = clEnqueueReadBuffer(commandQueue, memObjects[2], CL_TRUE, 0, sizeof(float) * ARRAY_SIZE, result, 0, NULL, NULL); for (int i = 0; i < ARRAY_SIZE; i++){printf("i = %d:%f\n",i,result[i]);} ———————————————— 版權聲明:本文為CSDN博主「肥叔菌」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/asmartkiller/article/details/86611145

檢查OpenCL中的錯誤




總結

以上是生活随笔為你收集整理的读书笔记-OpenCL编程指南 HelloWorld的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。