![](https://img-blog.csdnimg.cn/20200403094450804.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并行计算
文章平均质量分 65
这里放一些并行计算的博客。
程序猿老甘
NTU博后,主要研究领域为图形学,计算机视觉,几何分析等。
展开
-
CUDA程序调试的一些经验
最近在做一个点云配准的项目,重新把之前就开始玩的CUDA重新拾起来。本来想着稍微改改代码就能够愉快的跑起来,结果改Bug改的我相当上头。结合我之前的帖子和我最近的一些调试经验,总结一个调CUDA程序的一个博客,以方便以后再次遇到类似项目的时候,能够有个参考。简单来说,整个调试可以按照四个步骤来进行,包括存储分配检查,变量名检查,核函数输出检查以及核函数局部存储空间回收。原创 2022-10-11 18:44:52 · 1609 阅读 · 0 评论 -
VS2019配置TBB(Intel)并行库
最近做代码复现,需要用到TBB这个并行计算的工具。资料缺失比较少,而且针对最新的版本也没有对应的教程。我参考了几个博客,然后一通乱搞,也算是折腾出来了。把配置步骤列出来,方便以后使用的时候,少走一点弯路。首先下载TBB库,链接如下:https://github.com/oneapi-src/oneTBB下载后,使用cmake完成配置:在输出目录,文件列表如下:使用VS进行编译:对ALL_BUILD文件进行编译,得到文件夹msvcXXX_debug这里有我们需要..原创 2022-04-10 18:57:29 · 3089 阅读 · 1 评论 -
CUDA编程系统性学习笔记(三):存储优化
对于GPU并行编程稍有了解的同学,应该知道存储优化是多么重要。减少主机端到设备端的数据传输次数,调用具有合适权限的不同种类的存储,优化数据结构与算法在存储中执行,直接决定了并行的效率。本章我们就来谈下如何针对存储的使用进行优化,来提升并行编程的效率。1. 端到端的数据传输最小化Host-Device之间的数据传输速度远低于global memory,因此需要减少数据传输的频率。一些基本的优化原则包括:中间数据直接在GPU分配,操作和释放;GPU更适合重复计算。如果数据传输没有减少,性能提升有原创 2021-11-04 19:35:29 · 748 阅读 · 0 评论 -
CUDA编程系统性学习笔记(二):基本优化
1. Shared Memory可以知道的是,我们在GPU中执行Cuda线程程序中,应该尽可能减少从Global Memory中进行访存操作。原因是,这会大大降低线程执行的效率。Global Memory数据是存储在公共显存中,但是每一个线程是在一个SP单元中执行,从公共显存到执行单元,这样数据的传输效率会比较低。如果在Block内的共有空间访问数据,即在Shared Memory中读取数据,就会快很多。因此,CUDA编程优化的一个重要点,就是要利用Shared Memory来在访存上提升效率。以矩原创 2021-11-03 19:14:55 · 288 阅读 · 0 评论 -
CUDA编程系统性学习笔记(一):存储,函数与线程概念
持续关注我的朋友可能知道,之前因为做一个点云配准的项目,重新又开始学习CUDA编程。以我浅薄的并行编程技术,对于一些对存储要求不是很高的小程序,还勉强能够应付。但是最近做的一个网格优化的并行项目,数据量大,动态存储要求高,对存储空间数据的更新频率频繁,自然对并行编程的存储使用有了更高的要求。因此,为了能够更进一步的提升并行编程技术,解决存储使用的一些问题,我最近学些了英伟达周斌老师的视频教程,做一个系统性的学习与提升。本篇博客分享一些我在并行编程中存储使用的一些心得体会,作为备忘,同时分享给大家。1.原创 2021-11-03 18:05:37 · 211 阅读 · 0 评论 -
我又一次跳进GPU并行的坑:Cuda编程的经验分享
最近做一个点云Registration的项目,需要用到并行计算。之前做点云简化的时候尝试过Cuda编程,由于数据量较大时,从内存往显存做数据传输比较费时,后来就放弃了。现在做的这个项目没有那么大的数据量,并且算法本身非常适合做并行,所以打算重新把Cuda编程拾起来。不试不知道,一试吓一跳,调试过程中遇到各种错误,各种奇奇怪怪的问题。花了两三天的时间才勉强把程序调好。辛苦不能白费,我决定写这篇博客,把一些调试过程中需要注意的问题记录下来,方便以后做Cuda编程时,能够避开一些坑,同时也作为一个经验分享,帮助那原创 2021-09-25 17:27:59 · 2028 阅读 · 1 评论 -
CUDA如何利用vector实现参数传递
在C++中,我十分喜欢使用vector作为数据结构来处理数据。使用vetor进行数据存储于参数传递十分方便。但是,在cuda中,是不支持在核函数中直接使用vector的。所以通常情况下是要使用动态数组将vector的数据提取,然后进行计算。这里我们来介绍下如何将vector的数据转换为动态数组,并传入到核函数进行计算的。一维vector:一维的vector相对容易理解,可以把他看作...原创 2020-04-21 20:12:51 · 5340 阅读 · 6 评论 -
CUDA异常处理篇——invalid argument 的解决方法
今天在编写cuda程序时,遇到一个很奇怪的问题, 就是在调用核函数时,返回cuda错误信息,报invalid argument 。cudaError_t error = cudaGetLastError();printf("CUDA error: %s\n", cudaGetErrorString(error));一般的理解是参数异常,有可能是参数过大,一种是非法参数。经过检查,参...原创 2020-04-19 15:24:14 · 29376 阅读 · 2 评论 -
CUDA编程之threadIdx, blockIdx, blockDim, gridDim的使用
资料取自:https://blog.csdn.net/TH_NUM/article/details/82983282主要是各种实例看着不舒服,重新编辑一下方便查看具体:threadIdx是一个uint3类型,表示一个线程的索引。blockIdx是一个uint3类型,表示一个线程块的索引,一个线程块中通常有多个线程。blockDim是一个dim3类型,表示线程块的大小。gridDim...原创 2020-04-03 20:21:23 · 5404 阅读 · 0 评论 -
CUDA编程之vector的存储分配与使用
最近的工程需要搞一下并行,打算用一下cuda。开这个系列希望能够把这个过程中学到的有关并行的知识以及一些问题。这一次主要介绍下如何在cuda并行中使用vector,包括空间分配与使用。vector其实是可以被看做一个动态数组的,其存储的分配也是可以参照动态数组分配的方法,具体方法如下:内容参考:https://blog.csdn.net/xhz1234/article/details/...原创 2020-04-03 12:05:23 · 2879 阅读 · 0 评论