int x_src[3]={1,2,4};
int x_dest[3]={1.1,2.3,3.5};
int indexs[3];
int ratios[3];
interp1_prepare(x_src,x_dest,indexs,ratios,3);
//indexs结果为:{0,1,1}//ratios结果为:{0.1,0.15,0.75}//这是数据的前处理,实在cpu中进行的,下面可以放到gpu中
//这是核函数//indexs,ratios就是数据前处理时的准备好的数据//src就是y_src//dest就是y_dest//row_length和col_length用来描述src/dest大小//size就是src/dest的长度,等于row_length*col_length
__global__ voidinterp1_liear_kernal(int *indexs, float *ratios, float *src, float *dest, int row_length,int col_length, int size)
{
//先求数组下标,这部分是固定的int all_blocks = gridDim.x * gridDim.y * blockIdx.z + gridDim.x * blockIdx.y + blockIdx.x;
int block_threads = blockDim.x * blockDim.y * threadIdx.z + blockDim.x * threadIdx.y + threadIdx.x;
int loc = all_blocks * (blockDim.x * blockDim.y * blockDim.z) + block_threads;
//判断有没有超界if (loc < size)
{
//从1维坐标转换到2维坐标,为什么row不是loc%col_length?//这个是为了和matlab里面的1维转2维保持一致。//在matlab中,[1,2,3,4]转成2维就是[[1,3],[2,4]]int row = loc % row_length;
int col = loc / row_length;
int src_index = indexs[row];
float src_ratio = ratios[row];
float src_min = src[col*row_length+src_index];//等同二维的src[src_index,col]float src_max = src[col*row_length+src_index+1];//等同二维的src[src_index+1,col]
dest[col*row_length+row] = src_min + src_ratio * (src_max - src_min);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库