0
点赞
收藏
分享

微信扫一扫

OpenCL编程初探


首先参考如下文章部署CUDA开发环境

locate libOpenCL.so

命令,有如下输出,说明OpenCL和CUDA环境是一起安装的,所以安装环境时并没有特意为OpenCL去做什么,CUDA环境OK了,OPENCL的环境自然就OK了。

OpenCL编程初探_linux

网上白嫖的一份OpenCL源码:

#include <stdio.h>
#include <stdlib.h>
#include <alloca.h>
#include <CL/cl.h>

void displayPlatformInfo(cl_platform_id id,
cl_platform_info param_name,
const char* paramNameAsStr) {
cl_int error = 0;
size_t paramSize = 0;
error = clGetPlatformInfo( id, param_name, 0, NULL, ¶mSize );
char* moreInfo = (char*)alloca( sizeof(char) * paramSize);
error = clGetPlatformInfo( id, param_name, paramSize, moreInfo, NULL );
if (error != CL_SUCCESS ) {
perror("Unable to find any OpenCL platform information");
return;
}
printf("%s: %s\n", paramNameAsStr, moreInfo);
}

int main() {

/* OpenCL 1.1 data structures */
cl_platform_id* platforms;

/* OpenCL 1.1 scalar data types */
cl_uint numOfPlatforms;
cl_int error;

/*
Get the number of platforms
Remember that for each vendor's SDK installed on the computer,
the number of available platform also increased.
*/
error = clGetPlatformIDs(0, NULL, &numOfPlatforms);
if(error != CL_SUCCESS) {
perror("Unable to find any OpenCL platforms");
exit(1);
}

// Allocate memory for the number of installed platforms.
// alloca(...) occupies some stack space but is automatically freed on return
platforms = (cl_platform_id*) alloca(sizeof(cl_platform_id) * numOfPlatforms);
printf("Number of OpenCL platforms found: %d\n", numOfPlatforms);

error = clGetPlatformIDs(numOfPlatforms, platforms, NULL);
if(error != CL_SUCCESS) {
perror("Unable to find any OpenCL platforms");
exit(1);
}
// We invoke the API 'clPlatformInfo' twice for each parameter we're trying to extract
// and we use the return value to create temporary data structures (on the stack) to store
// the returned information on the second invocation.
for(cl_uint i = 0; i < numOfPlatforms; ++i) {
displayPlatformInfo( platforms[i], CL_PLATFORM_PROFILE, "CL_PLATFORM_PROFILE" );
displayPlatformInfo( platforms[i], CL_PLATFORM_VERSION, "CL_PLATFORM_VERSION" );
displayPlatformInfo( platforms[i], CL_PLATFORM_NAME, "CL_PLATFORM_NAME" );
displayPlatformInfo( platforms[i], CL_PLATFORM_VENDOR, "CL_PLATFORM_VENDOR" );
displayPlatformInfo( platforms[i], CL_PLATFORM_EXTENSIONS, "CL_PLATFORM_EXTENSIONS" );
}

return 0;
}

编译:

gcc -I/usr/local/cuda-11.5/targets/x86_64-linux/include main.c -o main -L/usr/local/cuda-11.5/targets/x86_64-linux/lib/ -lOpenCL

OpenCL编程初探_linux_02

OpenCL编程初探_centos_03

 看一下库中所有的以cl打头的API有哪些?

OpenCL编程初探_linux_04

现在来看,与其说OpenCL是一种语言,不如说它是一种API,类似于openGL,openvx一样,是API层面的意思,并非编程语言层面的意义,openCL也是用C语言编程,并且用GCC编译的不是么 ?:)

这种理解有错误,具体原因可以看这篇博客,OpenCL是有独立的语言文件的。


结束

举报

相关推荐

0 条评论