CPU和GPU实现julia
2024-10-19 01:29:59
CPU和GPU实现julia
主要目的是通过对比,学习研究如何编写CUDA程序。julia的算法还是有一定难度的,但不是重点。由于GPU实现了也是做图像识别程序,所以缺省的就是和OPENCV结合起来。
一、CPU实现(julia_cpu.cpp)
//julia_cpu 采用cpu实现julia变换
#
.;
);
);
cuComplex c(.,.);
cuComplex a(jx,jy);
;i;i)
{
;
}
}
;
}
;x;y;c;c;
}
}
}
imshow(;
}
.;
);
);
cuComplex c(.,.);
cuComplex a(jx,jy);
;i;i)
{
;
}
}
;
}
;x;y;c;c;
}
}
}
imshow(;
}
这里的实现,主要是说明julia的算法,它本身是一个递归的,而且具有一定计算复杂度的算法。
二、GPU实现
为了能够深刻理解这里的技术,我做了一系列的实验。需要注意的是GPU编译非常慢,不知道有什么办法能够加快这个速度。
此外,比较麻烦的就是矩阵的读入读出,因为现在的资料缺乏,所以很多东西还搞不清楚。
1)CUDA和OPENCV联系起来;(test1.cu)
CUDA主要还是来做数学运算的,它本身和OPENCV没有必然的联系。一般来说,计算本身在CUDA中,而OPENCV编写相关转换,进行结果显示。这里实现的功能就是读入一幅单色图像,所有像素进行反转。
编写代码的话,还是基于现有的模板,进行参数的调整,这样来得最快;基于现有的数据不断地调整,这样也能够控制错误。
注意,CUDA核中,不能用任何OPENCV的函数。目前我只能实现这样的效果,因为多数组如何引入,必须要查更多的资料。
主要就是数组的操作,现在只能做单数组,一旦多维就溢出。
);
resize(src,src,Size(N,N));
;i;i;j;c;c;
}
resize(src,src,Size(N,N));
;i;i;j;c;c;
}
2)CUDA计算斐波那契数,思考CNN的实现;
CUDA是否适合斐波那契,像julia这样的,每一个点都是独立的,它很适合;如果能够分出一些块来,应该也是适合的因此,单个的斐波那契运算不适合,但是做到一个数组中,并且以并行化的想法来运算,还是有一定价值的。
结果报不支持递归,那么在以后运算设计的时候要注意这一点。并行设计从来都不是一个简单的问题,必然有很陡峭的学习曲线,需要分丰富的经验,也有很远大的市场。
但是,CNN的确算的上是一个典型的实现了,它不需要串行的运算,而是在大量的并行的结果之后,选择一个最好的参数,所以CNN可以作为图像领域和CUDA结合的一个典型实现。
3)CUDA实现julia。
在前面的基础上,非常顺利
.;
);
);
cuComplex c(.,.);
cuComplex a(jx,jy);
;i;i)
{
;
}
}
;
}
__device__ )
{
)));
}
}
;
}
;i;
}
checkCudaErrors(cudaMalloc((;i;j;c;c;
}
);
);
cuComplex c(.,.);
cuComplex a(jx,jy);
;i;i)
{
;
}
}
;
}
__device__ )
{
)));
}
}
;
}
;i;
}
checkCudaErrors(cudaMalloc((;i;j;c;c;
}
三、小结
CUDA编程是一个新的领域,虽然文档中都说不复杂、不复杂的,但是想要大规模应用不可能不复杂。所以先基于现有的例子,将能够跑起来的东西跑起来。然后思考融合,形成自己的东西,这就是生产率。我相信,不需要很多的时间,我就能够使用CUDA的计算功能去接触并解决一些以前无法去做的东西。
祝成功,愿回顾。
最新文章
- Linux守护进程
- oracle11g AUD$维护
- 用ProGet搭建内部的NuGet服务器(更新安装步骤)
- Webstorm &; PhpStorm的序列号和证书
- SpringRMI解析1-使用示例
- 143. Reorder List
- powerbulider9.0在数据窗口中实现滚动到新添加行
- Android上运行本地c
- Hibernate 实体关联关系映射----总结
- Think with Google 京东如何玩转TensorFlow?
- 设计模式 -->; (3)策略模式
- 使用PHP脚本远程部署git项目
- C# -- 文件的压缩与解压(GZipStream)
- [C++]PAT乙级1004. 成绩排名 (20/20)
- docker自动重启容器
- 20189203《Linux内核原理与分析》第一周作业
- iptables随笔
- [leetcode]78. Subsets数组子集
- 【CSS3】响应式布局
- MYSQLi数据访问修改数据
热门文章
- 怎么查找执行比较慢的sql语句-DBA给的建议
- 有关于break,continue,return的区别和代码分析
- linux下利用nginx部署python网站
- 认识javascript
- 服务器 CentOS上yum安装Nginx服务
- [CentOS] 使用gitolite搭建git服务端
- 8007003Windows Update遇到未知错误
- zw版【转发·台湾nvp系列Delphi例程】HALCON RegionToBin2
- 基于UP-CUP6410点灯实验完成
- Cannot spawn... TortoisePlink