随笔分类 -  CUDA

现在我的主要研究的内容离不开cuda编程,cuda的并行计算又比较难学,放一段时间后又容易忘记所以我准备将自己写过的一些代码放在博客园上方便自己复习。
摘要:Arrayfire 添加一维cuda kernel 1.利用Arrayfire丰富函数,又保持cuda kernel的灵活性,在编程的时候需要添加cuda kernel 2.在arrayfire中添加cuda kernel需要注意几点: 在.cu文件中包含头文件"af/cuda.h" 使用af::e 阅读全文
posted @ 2020-09-16 00:19 flyingswallow 阅读(387) 评论(0) 推荐(0)
摘要:Arrayfire与cucomplex数据之间的转换 转换目的: Arrayfire进行矩阵变换时有C++借口函数方便调用; CUDA提供的cublas函数属于底层一些的函数,使用起来非常不方便; cucomplex数据类型与cdouble中的类型一致,可以方便我们定制自己的kernel而且可以使用 阅读全文
posted @ 2020-09-15 23:14 flyingswallow 阅读(497) 评论(0) 推荐(0)
摘要:用CUDA求解矩阵的逆,有多种方法,也可以自己编写内核函数去实现,我查阅CSDN上用 cublas求解矩阵逆的方法,但是作者写的比较繁琐,其他观看学习的人会觉得比难懂。所以我 决定自己写一个。我采用的是LU分解法,cublas提供了相应的函数。代码如下: #include <stdio.h> #in 阅读全文
posted @ 2020-07-22 05:42 flyingswallow 阅读(3289) 评论(0) 推荐(1)
摘要:Thrust自定义函数非常灵活,给编写程序带来方便,上次的自定义函数没有带参数,这次 笔者写一个带参数的自定义函数。通过这次写带参数的自定义函数,我对如何用transformation 调用函数有了更深的理解。 代码: #include <thrust/device_vector.h> #inclu 阅读全文
posted @ 2020-07-22 05:12 flyingswallow 阅读(475) 评论(0) 推荐(0)
摘要:Thrust有一个Transformations. 这个方法为我们进行数学运算提供了方便其中 thrust/functional.h 包含大部分内建的算法和比较操作。代码如下: #include <thrust/device_vector.h> #include <thrust/transform. 阅读全文
posted @ 2020-07-22 04:29 flyingswallow 阅读(400) 评论(0) 推荐(0)
摘要:在编程中我们经常会合并某个矩阵,通常我们会使用循环来实现,然而循环有时候会降低程序运行的效率, 所以利用ArrayFire中的向量的平坦模式,我们可以利用空间来换取时间。主要的思路是: 1.我们将m*n的矩阵展开成一个1*(m*n)或者(m*n)*1的向量; 2.同理我们将p*q的矩阵展开成一个1* 阅读全文
posted @ 2020-07-12 05:10 flyingswallow 阅读(254) 评论(0) 推荐(0)
摘要:安装好ArrayFire后,我们可以使用该库进行GPU编程了,在thrust库中我们实现了无穷范数的程序编写。可以看出使用thrust我们需要定义很多的变量,还要实现GPU和host之间的数据传递,如果是用 ArrayFire来实现会容易一些。我用一个小例子来进行说明。 代码: #include " 阅读全文
posted @ 2020-07-12 04:51 flyingswallow 阅读(299) 评论(0) 推荐(0)
摘要:GPU的内核编程有时候让人十分头疼,尤其是调试的时候,因为用cuda语言编写GPU程序的时候它,没有友好的调试环境,断点调试根本无济于事,想要实现断点调试需要,两颗Nvida 公司的显卡,对于个人PC来说,很难实现。现在ArrayFire公司开源了一些库函数来辅助我们实现GPU编程。 ArrayFi 阅读全文
posted @ 2020-07-12 04:37 flyingswallow 阅读(1015) 评论(0) 推荐(0)
摘要:最近在学习Thrust库的时候,我发现Thrust可以自定义函数,所以笔者就想自己实现一个功能 通过自己写一个例程来加深对thrust的掌握。在向量的运算中我们会碰见各种范数,我打算以无穷 范数为例,实现这个功能。向量的无穷范数定义为:找出向量中绝对值最大的元素。 代码如下: #include "c 阅读全文
posted @ 2020-07-12 03:58 flyingswallow 阅读(169) 评论(0) 推荐(0)
摘要:CUDA List 实现: 尽管Thrust没有提供像C++中的List容器,但是Thrust却和C++兼容。 代码: #include "cuda_runtime.h" #include "device_launch_parameters.h" #include <stdio.h> #includ 阅读全文
posted @ 2020-06-24 10:54 flyingswallow 阅读(393) 评论(0) 推荐(0)
摘要:1.野指针: 前两篇博文定义的向量都是在device_vector和host_vector向量空间,如果我们定义一个 像int* raw_ptr的野指针,怎样实现数据间的传递呢?Thrust提供给我们一些函数帮助我们解决 这样的问题。thrust::raw_pointer_cast和thrust:: 阅读全文
posted @ 2020-06-24 10:30 flyingswallow 阅读(1152) 评论(0) 推荐(0)
摘要:1.元素初始化: 通常初始都会用具体的值和向量,但是Thrust 提供了一些其他的初始化方法。 2.代码: #include "cuda_runtime.h" #include "device_launch_parameters.h" #include <stdio.h> #include <thr 阅读全文
posted @ 2020-06-24 09:54 flyingswallow 阅读(387) 评论(0) 推荐(0)
摘要:1.Thrust library : Thrust library 和C++中的STL 十分类似,如果学过和了解STL学起来应该会感觉轻松一些。 2. 学习的初衷: 笔者很多的项目都是和CUDA GPU 相关的,刚开始的时候笔者都是自己写CUDA kernels, 然而,有些东西完全可以站在巨人的肩 阅读全文
posted @ 2020-06-24 09:31 flyingswallow 阅读(451) 评论(0) 推荐(0)
摘要:在GPU加速计算中,矩阵乘法是绕不开的话题,所以笔者就从简单的方阵乘法入手,进行cuda的入门学习 所以就写了一个简单cuda 方阵乘法的内核。 矩阵乘法的原理,我就不在这里赘述了,学过线性代数,都应该比较清楚。直接就上代码: 1 #include "cuda_runtime.h" 2 #inclu 阅读全文
posted @ 2020-03-14 01:24 flyingswallow 阅读(313) 评论(0) 推荐(0)
摘要:以前我用CUDA 写过简单的图形模糊的例子,时间长了就忘了,现在看的时候不得不再花时间学习, 所以就想要记录在博客园上,方便自己复习和记忆。一旦自己用到这放面的程序的时候就可以随时下载。 简单的均值模糊就是将像素点周围的像素值加起来求均值。具体的原理我就不在这里赘述了直接上 CUDA 代码: 1 # 阅读全文
posted @ 2020-03-13 06:46 flyingswallow 阅读(329) 评论(0) 推荐(0)
摘要:自从进入电气工程,阴差阳错的学习了cuda,在学习的过程中初步了解并行计算的一些思路, 由于我的电脑空间有限,所以我准备记录平时的一些cuda编程的练习,放到博客园上这样方便我 以后的学习,这样也可以为博客园的成长尽一下绵薄之力。接下来进入正题: 图像灰度转换cuda实现: 1 #include " 阅读全文
posted @ 2020-02-29 05:25 flyingswallow 阅读(649) 评论(0) 推荐(0)