并行运算
Jackery_Shh
技术狂!
展开
-
opencv+cuda内存泄露错误
在编写的模版中,利用opencv进行拷贝图像data时,报错如下:Unhandled exception at 0x74dec42d in XXXX_CUDA.exe: Microsoft C++ exception: cv::Exception at memory location 0x0017f878.定位到错误在:cvReleaseImage( ©_y );也就是说释放图像数据是时候,发生内存非法读写;template<class T>void grad_y( const IplI原创 2015-08-31 11:36:54 · 1831 阅读 · 2 评论 -
机器学习中的算法-支持向量机(SVM)基础
前言: 又有很长的一段时间没有更新博客了,距离上次更新已经有两个月的时间了。其中一个很大的原因是,不知道写什么好-_-,最近一段时间看了看关于SVM(Support Vector Machine)的文章,觉得SVM是一个非常有趣,而且自成一派的方向,所以今天准备写一篇关于关于SVM的文章。 关于SVM的论文、书籍都非常的多,引用强哥的话“SVM是让应用数学家真正得到应用的一种算法”。S转载 2015-09-16 18:35:41 · 708 阅读 · 0 评论 -
Conjugate gradient method(共轭梯度算法)
Conjugate gradient methodIn mathematics, the conjugate gradient method is an algorithm for the numerical solution of particular systems of linear equations, namely those whose matrix is symmetric and转载 2015-09-15 15:17:55 · 5236 阅读 · 0 评论 -
GPU编程中的常用几何函数、纹理映射函数、偏导数函数
在GPU编程中,函数一般分为以下几种类型:数学函数、几何函数、纹理映射函数、偏导数函数、调试函数等。熟练利用好GPU自带函数,可以在一定程度上提高并行编程速度与效率。在上一部分已经介绍了数学函数, 数学函数用于执行数学上常用计算,比如:三角函数、幂函数。向量和矩阵函数,这些函数一般都被重载,用来支持标量数据和不同长度的向量作为输入参数。本部分介绍几何函数、纹理映射函数、偏导数函数、调试函数。几何函数(Geometric Functions) 几何函数,如表所示,用于执行和解析几何相关的计算,原创 2015-09-09 19:57:21 · 2476 阅读 · 1 评论 -
共享内存
共享内存实际上是可受用户控制的一级内存。每个SM中的一级内存与共享内存共享一个64KB的内存段。在开普勒架构的设备中,根据应用程序的需要,每一个线程块可以配置为16KB的一级内存或共享内存;而在费米架构的设备中,可以根据喜好选择16KB或48KB的一级内存或共享内存。早期的费米架构的硬件(计算能力为1.X)中只有固定的16KB共享内存而没有以及缓存。共享内存的延迟极低,大约有1.5TB/s的带宽,远远高于全局内存的190GB/s,但是它的速度只有寄存器的十分之一。 在实际的情况中,低端显卡全原创 2015-09-01 19:45:45 · 2639 阅读 · 3 评论 -
线程网格(grid)
一个线程网格是由若干个线程块组成的,每个线程块是二维的,分为X轴与Y轴。此时,每次最多能开启Y*X*T个线程。现在,我们用一个实例进行深入理解。为简单期间,我们限制Y轴方向只有一行线程。 假设我们现在正在看一张标准高清图片、这张图片的分辨率为1920 x 1 080。通常线程块中线程数量最好是一个线程束大小的整数倍,即32的整数倍。由于设备是以整个线程束为单位进行调度,如果我们不把线程块上的线程数目设成32的整数倍,则最后一个线程束中有一部分线程是没有用的。因此我们必须设置一个条件进行限制,防止处理原创 2015-09-04 01:57:31 · 2500 阅读 · 1 评论 -
GPU编程中的常用数学函数
在GPU编程中,函数一般分为以下几种类型:数学函数、几何函数、纹理映射函数、偏导数函数、调试函数等。熟练利用好GPU自带函数,可以在一定程度上提高并行编程速度与效率。数学函数(Mathematical Functions)数学函数用于执行数学上常用计算,比如:三角函数、幂函数。向量和矩阵函数,这些函数一般都被重载,用来支持标量数据和不同长度的向量作为输入参数。列表如下:原创 2015-09-09 19:38:49 · 6428 阅读 · 3 评论 -
数值分析--矩阵QR分解的三种方法
QR分解法是目前求一般矩阵全部特征值的最有效并广泛应用的方法,一般矩阵先经过正交相似变化成为Hessenberg矩阵,然后再应用QR方法求特征值和特征向量。它是将矩阵分解成一个正规正交矩阵Q与上三角形矩阵R,所以称为QR分解法,与此正规正交矩阵的通用符号Q有关。原创 2015-08-27 10:33:26 · 24503 阅读 · 0 评论 -
professional cuda c programming--CUDA库简介
CUDA Libraries简介 技术分享上图是CUDA 库的位置,本文简要介绍cuSPARSE、cuBLAS、cuFFT和cuRAND,之后会介绍OpenACC。cuSPARSE线性代数库,主要针对稀疏矩阵之类的。cuBLAS是CUDA标准的线代库,不过没有专门针对稀疏矩阵的操作。cuFFT傅里叶变换cuRAND随机数CUDA库和CPU编程所用到的库没有什么区别,都是一系列接口的集合,主要好处是,只需要编写host代码,调用相应API即可,可以节约很多开发时间。而且我们完全可以信任这些库能原创 2015-06-24 12:05:01 · 2792 阅读 · 0 评论 -
显卡的相关性能参数含义(struct cudaDeviceProp)
struct cudaDeviceProp {char name[256]; //器件的名字size_t totalGlobalMem; //Global Memory 的byte大小size_t sharedMemPerBlock; //线程块可以使用的共用记忆体的最大值。byte为单位,多处理器上的所有线程块可以同时共用这些记忆体int regsPerBlock; //线程块可以使用的32位寄存器的最大值,多处理器上的所有线程快可以同时实原创 2015-08-31 10:41:43 · 4848 阅读 · 1 评论 -
关于CUDA两种API:Runtime API 和 Driver API
CUDA 目前有两种不同的 API:Runtime API 和 Driver API,两种 API 各有其适用的范围。高级API(cuda_runtime.h)是一种C++风格的接口,构建于低级API之上。由于 runtime API 较容易使用,一开始我们会以 runetime API 为主;原创 2015-07-09 18:45:02 · 7319 阅读 · 1 评论 -
如何高效存储稀疏矩阵?
为了节省存储空间并且加快并行程序处理速度,需要对稀疏矩阵进行压缩存储,压缩存储的原则是:不重复存储相同元素;不存储零值元素。常用的几种矩阵的存储格式如下:COO,CSR,DIA,ELL,HYB等;稀疏矩阵是指矩阵中的元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上都是稀疏矩阵,很多稀疏度在90%甚至99%以上。因此我们需要有高效的稀疏矩阵存储格式。本文总结几种典型的格式:COO,CSR,D原创 2015-08-12 01:04:15 · 9131 阅读 · 1 评论 -
《GPU高性能编程CUDA实战》中代码整理
转自:点击打开链接CUDA架构专门为GPU计算设计了一种全新的模块,目的是减轻早期GPU计算中存在的一些限制,而正是这些限制使得之前的GPU在通用计算中没有得到广泛的应用。 使用CUDA C来编写代码的前提条件包括:(1)、支持CUDA的图形处理器,即由NVIDIA推出的GPU显卡,要求显存超过256MB;(2)、NVIDIA设备驱动程序,用于实现应用程序与支持CUDA的硬件之间的转载 2015-08-31 10:38:16 · 1560 阅读 · 0 评论 -
CUDA: 程序优化的15个策略
在《CUDA程序优化策略》这篇文章中,我们介绍过CUDA优化的常见策略。今天我们会对CUDA优化策略进行详细讲解。具体策略如下: 1. memory coalescing,保证内存融合。因为global memory在CC为1.x上是按照half wrap进行访问读写的,而在2.x上是按照wrap进行访问读写的。在显存中,有多个存储器控制器,负责对显存的读写,因此,一定要注意存储器控制器的负载均转载 2016-11-24 15:22:00 · 2445 阅读 · 0 评论