2015年6月24日

【CUDA并行编程之八】Cuda实现Kmeans算法

摘要: 本文主要介绍如何使用CUDA并行计算框架编程实现机器学习中的Kmeans算法,Kmeans算法的详细介绍在这里,本文重点在并行实现的过程。当然还是简单的回顾一下kmeans算法的串行过程:伪代码:[cpp]view plaincopy创建k个点作为起始质心(经常是随机选择)当任意一个点的簇分配结果发... 阅读全文

posted @ 2015-06-24 09:27 moffis 阅读(1723) 评论(0) 推荐(0) 编辑

【CUDA并行编程之七】数组元素之和

摘要: 现在需要求得一个数组的所有元素之和,之前感觉似乎不太可能,因为每个线程只处理一个元素,无法将所有元素联系起来,但是最近学习了一段代码可以实现,同时也对shared memory有了进一步的理解。一、C++串行实现串行实现的方法非常之简单,只要将所有元素依次相加就能够得到相应的结果,实际上我们注重的不... 阅读全文

posted @ 2015-06-24 09:26 moffis 阅读(534) 评论(0) 推荐(0) 编辑

【CUDA并行编程之六】KNN算法的并行实现

摘要: 之前写了两篇文章一个是KNN算法的C++串行实现,另一个是CUDA计算向量的欧氏距离。那么这篇文章就可以说是前两篇文章的一个简单的整合。在看这篇文章之前可以先阅读前两篇文章。一、生成数据集现在需要生成一个N个D维的数据,没在一组数据都有一个类标,这个类标根据第一维的正负来进行标识样本数据的类标:Po... 阅读全文

posted @ 2015-06-24 09:23 moffis 阅读(773) 评论(0) 推荐(0) 编辑

【CUDA并行编程之五】计算向量的欧式距离

摘要: 本文将介绍如何用cuda来计算两个向量之间的欧式距离,其中涉及到了如果将二维矩阵传入到核函数进行计算的问题,并且介绍两个内存分配和拷贝的API:cudaMallocPitch以及cudaMemcpy2D。一、需求分析现在我们要解决这么一个问题:计算一个D维的向量A[D]到二维矩阵B[N][D]的每一... 阅读全文

posted @ 2015-06-24 09:21 moffis 阅读(487) 评论(0) 推荐(0) 编辑

【CUDA并行编程之四】矩阵相乘

摘要: 前面介绍了基本的Cuda编程的相关知识,那么这一篇在此基础之上来看看GPU在处理数据计算上的高效能,我们拿矩阵相乘来作为例子。1.CPU上执行矩阵相乘以及性能。在CPU上进行矩阵相乘运算的代码:mat_mul.cc:[cpp]view plaincopy//a[i]*b[i]+c[i]=d[i]#i... 阅读全文

posted @ 2015-06-24 09:18 moffis 阅读(350) 评论(0) 推荐(0) 编辑

【CUDA并行编程之三】Cuda矢量求和运算

摘要: 本文将通过矢量求和运算来说明基本的Cuda并行编程的基本概念。所谓矢量求和运算,就是两个数组数据中对应的元素两两相加,并将结果保存在第三个数组中。如下图所示:1.基于CPU的矢量求和:代码非常简单:[cpp]view plaincopy#includeusingnamespacestd;consti... 阅读全文

posted @ 2015-06-24 09:15 moffis 阅读(1142) 评论(0) 推荐(0) 编辑

【Cuda并行编程之二】Cuda Memory Hierarchy_Cuda内存层次结构

摘要: 要想编写高效的程序,那么一定要对内存结构有比较深刻的认识,就像C/C++里面的堆内存,栈内存,全局存储区,静态存储区,常量区等。Cuda是并行计算框架,而GPU的内存有限,那么如果想编写高效的Cuda程序,首先要对其内存结构有一个简单的认识。首先我们先上一张图,然后通过解释一些名词和代码来进行解释。... 阅读全文

posted @ 2015-06-24 09:13 moffis 阅读(397) 评论(0) 推荐(0) 编辑

【Cuda并行编程之一】二分查找的探究以及Cuda的简单实现&&相关面试题介绍

摘要: 最近开始复习基础找工作,二分查找算是最基本而且十分重要的算法了,现在完整的解析一下,作为后面复习只用。内容分为几个部分:一、二分查找的基本过程折半查找技术,又称为二分查找。它的前提条件是线性表中的记录必须是关键码有序(通常从小到大排序),线性表必须采用顺序存储。折半查找的基本思想是:在有序表中,取中... 阅读全文

posted @ 2015-06-24 09:11 moffis 阅读(1021) 评论(0) 推荐(0) 编辑

导航