clCompileProgram&clLinkProgram

本文详细介绍了在OpenCL编程中从OpenCL1.1到OpenCL1.2的变化,特别关注了创建program的方式从直接使用clBuildProgram转变为先使用clCompileProgram再使用clLinkProgram。通过具体例子展示了如何实现这一过程,包括使用kernel.cl文件和add.h中的add函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   在OpenCL1.1中,创建program,直接用clBuildProgram即可。

   在OpenCL1.2中,新添加了一种方式:先compiler(clCompileProgram),再linker(clLinkProgram)。

   具体用法,请看下面的例子:

   kernel.cl文件,调用了add.h中的add函数,

#include"add.h"

__kernel void call_test(__global float* A,const float b)
{
    int index=get_global_id(0); 
    A[index]=add(A[index],b);
}
add.h文件内容

float add(float a,float b)
{
    return (a+b)+100.0;
}

对于此种方式,采用先compiler再linker创建program:

	cl_program program_cl,program_head,program;
  std::ifstream srcFile("kernel.cl");
  string srcProg(istreambuf_iterator<char>(srcFile),(istreambuf_iterator<char>()));
  const char *src=srcProg.c_str();
  size_t src_length=srcProg.length();
  program_cl=clCreateProgramWithSource(context,1,&src,&src_length,&err);

	std::ifstream srcFile_head("add.h");
string srcProg_head(istreambuf_iterator<char>(srcFile_head),(istreambuf_iterator<char>()));
  const char *src_head=srcProg_head.c_str();
   size_t src_length_head=srcProg_head.length();
   program_head=clCreateProgramWithSource(context,1,&src_head,&src_length_head,&err);

	const char *input_head_names[1]={"add.h"};
	cl_program input_head[1]={program_head};
	err=clCompileProgram(program_cl,0,NULL,0,1,input_head,input_head_names,NULL,NULL);

	program=clLinkProgram(context,num_device,devices,NULL,1,&program_cl,NULL,NULL,&err);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值