9 木子超同学

尚未进行身份认证

暂无相关描述

等级
博文 95
排名 1w+

内联函数与宏的简单说明

1.c语言中的宏c语言使用预处理语句#define来实现宏定义,例如一个计算平方的宏:#definesquare_mine(x)x*x需要说明的是,宏并不是通过传递参数实现的,而是通过文本替换来实现。看下面的例子:#include<iostream>#include<Windows.h>usingnamespacestd;#definesquare(x)x*xintmain

2015-09-07 15:47:39

c++ 中 `++i` 与 `i++` 在运算表达式中的优先级

在算术表达式中,优先级高的运算符先运算,优先级低的运算符后运算,不同的优先级直接影响表达式的计算结果。1.说明gcc中gcc中的加法运算表达式中,是按照从左到右按顺序,如果运算符两边有++i操作数,就先进行++i操作,然后进行加法运算;vs中vs中的加法运算表达式中,则不一样,只要表达式中有++i操作数,就要先计算,最后才是进行加法运算。加法运算可以扩展到减法、乘法、除法运算和前置

2015-09-07 15:39:30

Ubuntu CUDA 环境配置

1.Ubuntu安装我有两个硬盘,一个SSD和一个HDD,SSD装win7,HDD装Ubuntu(使用的U盘安装)。显卡为GTX980。2.nVidia驱动和CUDAToolkit的安装本文使用的*.deb方式安装,有离线版的deb文件,安装十分方便。CUDARepository获取CUDA安装包,安装包请自行去NVidia官网下载。sudodpkg-icuda-repo-

2015-09-01 10:00:56

Ubuntu Python 环境配置

1.安装Python在Ubuntu下安装Python模块通常使用apt-get和pip命令。其中,apt-get是Ubuntu自带的包管理命令,apt-getinstallpackagename用于安装一个新的软件包,apt-getremovepackagename用于卸载一个已安装的软件包,apt-getautoremovepackagename删除包及其

2015-09-01 09:35:04

人脸识别(稀疏表示、人工神经网络)

1.稀疏表示对于一个信号x,如果x中大部分的元素都为0,只有少部分元素不为0,则称信号x为稀疏的。或者x中大部分元素都为较小值,接近于0,只有少部分元素为较大值,也可以称信号x为稀疏的(例如,图像傅立叶变换之后,或者小波变换之后)。信号稀疏表示问题可以通过求解稀疏正则优化问题实现:minα∈Ag(α)=Δf(α)+λΩ(α)\mathop{\min}\limits_

2015-08-31 12:05:03

块匹配算法GPU并行化

1.介绍在《块匹配算法》中介绍了块匹配算法及优化策略,但这些方法都是在CPU端执行,由于块匹配算法的计算量很大,因此会耗费很多时间。本文侧重于块匹配算法的并行实现。本文实验的平台为:CPU:i74790kGPU:NvidiaGTX980Matlab2014aCUDA6.52.提取图像块本文的实验以512x512x3的彩色lena图为例,每个图像块的大小为5x

2015-08-15 15:31:04

块匹配算法

1.介绍块匹配是图像去噪,运动估计中常用的一种方法。通过将查询块与相邻的图像块进行匹配,从这些相邻块中找出距离查询块距离最近的K个块。所谓的相邻也并不是绝对的位置上的相邻,也由此可以引出局部搜索(local)和全局搜索(non-local)。如上图所示:+ViV_i是一个以ii(红色)为中心的窗(搜索窗),最大的灰色矩阵区域;+NiN_i是以ii为中心的矩阵邻域(一个图

2015-08-15 10:51:18

神经网络-并行BP算法

1.说明如果对神经网络中的BP算法已经十分熟悉,可以直接阅读此文,否则可以参考之前的两篇文章:1.神经网络(NeuralNetworks,NN)推导2.神经网络-文本识别本文的主要工作是将上述两篇文章中的BP(后向传播算法)并行化,以提高计算效率。平台:1.CPU:i74790k2.GPU:NvidiaGTX9803.Matlab2014a4.C

2015-07-31 23:11:19

CUDA 中解决 critical section 的一些策略

1.问题陈述原子操作是多线程编程中经常遇到的问题,对此CUDA中也提供了一些基本的函数,例如atomicAdd()可以完成对一个元素的原子操作,例如常见的累加,比如统计直方图中对每一个灰度值的累加,如下所示,CPU端执行的统计直方图,array是一个图像数组,max是图像中像素个数,bin是一个256个元素的数组,分别统计灰度值为0-255的元素个数。for(unsign

2015-07-29 20:03:24

Kmeans 的 CUDA 并行实现

1.Kmeans步骤常规的Kmeans步骤:1.初始化聚类中心2.迭代1.计算每个样本与聚类中心的欧式距离2.根据样本与聚类中心的欧式距离更新每个样本的类标签3.根据类标签更新聚类中心本文中并行化的Kmeans的步骤:初始化每个样本的类标签迭代统计每一类的样本和统计每一类的样本个数计算每一类的聚类中心:样本和/样本个数

2015-07-26 21:48:18

CUDA 共享内存 bank conflict

1.bankconflict本文所有的实验针对GTX980显卡,Maxwell架构,计算能力5.2。GPU共享内存是基于存储体切换的架构(bank-switched-architecture)。在Femi,Kepler,Maxwell架构的设备上有32个存储体(也就是常说的共享内存分成32个bank),而在G200与G80的硬件上只有16个存储体。每个存

2015-07-24 16:24:29

神经网络-文本识别

1.数据集说明本次所用的数据集有5000个样本,每个样本对应于20x20大小的灰度图像。对应9-0共十个数字的手写图像。样本中每个像素都用浮点数表示。在样本数据中,每幅图像都被展开为一个400维的向量,构成了样本数据矩阵中的一行。完整的训练数据是一个5000x400的矩阵,其每一行为一个样本。另外一个数据用来表示上述样本的标号,为5000x1的矩阵,数据中,对应于数字”0”

2015-07-19 15:54:59

神经网络(Neural Networks,NN)

1.介绍神经网络在一定程度上受到生物学的启发,由一系列相互链接的神经单元组成,每一个单元都有一定数量的实值输入(可能由其他神经单元输出),并产生单一的实数值输出(可能成为其他很多单元的输入)。如下图所示:其中,g1,g2,...,gTg_1,g_2,...,g_T的输入都为:X0,X1,...,XdX_0,X_1,...,X_d,而g1,g2,...,gTg_1,g_2,...

2015-07-17 22:43:39

CUDA Thrust 规约求和

1.使用ThrustThrust是一个开源的C++库,用于开发高性能并行应用程序,以C++标准模板库为蓝本实现。官方文档见这里:CUDAThrust/*...*/float*fMatrix_Device;//指向设备显存intiMatrixSize=iRow*iCol;//矩阵元素个数cudaMalloc((void**)&fMatrix_Device,

2015-07-16 12:50:23

CUDA分支优化

在CUDA中,分支会极大的减弱性能,因为SM没有分支预测,因此只能让束内线程在每个分支上都执行一遍,当然如果某个分支没有线程执行,就可以忽略,因此要减少分支的数目。可以简单的说:1.同一个warp中的所有线程执行相同的命令。2.并不是所有线程都会执行。产生分支的一个常见场景就是if,else语句的使用,比如常用的边界判定。下面从一个实力说起。看如下代码:inttid=t

2015-07-16 10:24:02

SVM - 手写数字识别

1.流程收集数据:此处使用给定的文本文件准备数据:基于二值图像构造数据分析数据:对图像向量进行目测训练算法:采用三种不同的方法,不同的参数线性分类器二次多项式核函数径向基核函数测试并计算错误率2.实验本实验使用的训练数据如下图所示,为若干个手写的0和9的数字图像。本实验使用的测试数据如下图所示,为若干个手写的0和9的数字图像。实验的主函数如下所示:%功能:演

2015-07-14 09:09:47

Kernel SVM (核函数支持向量机)

1.SVM目标函数及约束条件SVM的介绍及数学推导参考:我的CSDN,此处直接跳过,直接给出SVM的目标函数和约束条件:minw,b12wTws.t.yn(wTxn+b)≥1,n=1,..N\begin{array}{l}\mathop{{\bf{min}}}\limits_{\bf{w,b}}\;\;\frac{{\bf{1}}}{{\bf{2}}}{{\bf{w}}^{\bf{

2015-07-13 17:49:47

Dual SVM (对偶支持向量机)

1.SVM目标函数及约束条件SVM的介绍及数学推导参考:我的CSDN,此处直接跳过,直接给出SVM的目标函数和约束条件:minw,b12wTws.t.yn(wTxn+b)≥1,n=1,..N\begin{array}{l}\mathop{{\bf{min}}}\limits_{\bf{w,b}}\;\;\frac{{\bf{1}}}{{\bf{2}}}{{\bf{w}}^{\bf{

2015-07-12 16:50:02

SVM (支持向量机)

1.介绍SVM(SupportVectorMachine,支持向量机)是一种有监督的统计学习方法,能最小化经验误差和最大化几何边缘,被称为最大间隔分类器,可用于分类与回归分析。如上图所述的线性分类问题可以使用PLA或pocket方法求解。得到下式的线性分类器:h(x)=sign(wTx){\bf{h(x)=sign(}}{{\bf{w}}^{\bf{T}}}{\bf{x)}}

2015-07-11 19:10:42

CUDA 中 FFT 的使用

1.流程使用cufftHandle创建句柄使用cufftPlan1d(),cufftPlan3d(),cufftPlan3d(),cufftPlanMany()对句柄进行配置,主要是配置句柄对应的信号长度,信号类型,在内存中的存储形式等信息。cufftPlan1d():针对单个1维信号cufftPlan2d():针对单个2维信号cufftPlan3d():针对单个3维信号

2015-07-02 11:55:56
奖章
  • Github
    Github
    绑定github第三方账户获取
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!