OpenCL内核函数支持double和结构体
在opencl开发中,有时需要保证精度,需要支持double类型,但是double类型在opencl标准里面不是要求强制实现的,有些设备支持,有些不支持,如果你的设备支持的话,就需要在所有出现在double的最前面声明如下:
#pragma OPENCL EXTENSION cl_khr_fp64: enable
但是这也有一个问题,就是不能保证程序的可移植性,之前在编写地形因子提取算法时,在某些AMD的显卡就不支持。
另外有时候需要支持结构体的话,就只需要定义和主机端一模一样的结构体,然后在CPU传进来就可以了,比如,我上一篇博客中的RPC结构体的信息如下:
那么需要再主机端传输结构体参数,具体就是调用clSetKernelArg函数
这样,内核函数中就可以使用double类型和结构体了
原文链接:http://blog.csdn.net/zhouxuguang236/article/details/39270775
#pragma OPENCL EXTENSION cl_khr_fp64: enable
但是这也有一个问题,就是不能保证程序的可移植性,之前在编写地形因子提取算法时,在某些AMD的显卡就不支持。
另外有时候需要支持结构体的话,就只需要定义和主机端一模一样的结构体,然后在CPU传进来就可以了,比如,我上一篇博客中的RPC结构体的信息如下:
typedef struct
{
//偏移量
double dfLINE_OFF;
double dfSAMP_OFF;
double dfLAT_OFF;
double dfLONG_OFF;
double dfHEIGHT_OFF;
//缩放比例
double dfLINE_SCALE;
double dfSAMP_SCALE;
double dfLAT_SCALE;
double dfLONG_SCALE;
double dfHEIGHT_SCALE;
//系数
double adfLINE_NUM_COEFF[20];
double adfLINE_DEN_COEFF[20];
double adfSAMP_NUM_COEFF[20];
double adfSAMP_DEN_COEFF[20];
//最大最小经纬度范围
double dfMIN_LONG;
double dfMIN_LAT;
double dfMAX_LONG;
double dfMAX_LAT;
} stRPCInfo;那么需要再主机端传输结构体参数,具体就是调用clSetKernelArg函数
status = clSetKernelArg(ckKernel,0,sizeof(stRPCInfo),&stInfo);这样,内核函数中就可以使用double类型和结构体了
__kernel void RPCWarpKernel(
struct stRPCInfo RpcInfo,
__global double *dbGeoTrans,
__global unsigned short* poDataIn,
int nWidthIn,
int nHeightIn,
int nMinRowIn,
int nSrcHeight,
__global unsigned short* poDataOut,
int nWidthOut,
int nHeightOut,
int nMinRowOut,
int nBandCount)原文链接:http://blog.csdn.net/zhouxuguang236/article/details/39270775
...全文
相关推荐
OpenCL内建函数中文手册.pdf
整数函数整数函数提供了整数算术运算的支持,例如加法、减法、乘法和除法。由于整数运算在GPU编程中十分常见,这些内建函数能够为OpenCL程序提供必要的数值操作,以优化性能和资源利用。2.
openCL C语言
- **变量声明**: 支持在函数或循环内部声明变量。- **数组**: 不支持可变长度数组。- **打印功能**: 通过供应商扩展提供的`printf()`函数。
OpenCL 历史版本更新信息
- **OpenCL 2.0**: - 引入了内核参数和工作组配置的动态调整,进一步优化了并行性能。 - 支持事件等待列表,允许用户更细粒度地控制命令的执行顺序。
2 OpenCL float_comp.docx
本文将围绕OpenCL的浮点计算能力进行深入探讨。在OpenCL中,浮点计算是通过数据类型`float`、`double`等来实现的,这些数据类型支持单精度和双精度浮点运算。
双树复小波变换 的 OpenCL 实现
在这个项目中,开发者可能使用OpenCL编写了内核函数,这些函数负责执行DTCWT的计算,并在GPU上进行高效执行。OpenCL的并行计算模型使得代码可以充分利用GPU的并行计算能力,提高运算速度。


