- 博客(17)
- 资源 (2)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 CUDA学习--矩阵乘法的并行运算
1. CUDA学习步骤CPU实现 a*b = c 的矩阵乘法(矩阵尺寸是n*m的,n和m大于1000)下载 https://developer.nvidia.com/cuda-downloads,安装好cuda将cpu代码移植到cuda。将CPU值传入GPU,使用cuda计算,与cpu结果对比。优化思路1:将矩阵分块进行计算优化思路2:使用share memory进行优化优化思路3:将数
2016-08-24 22:28:26
18791
6
原创 Actors 介绍
Actor 模型为编写实时分布式系统提供了一个更高级别的抽象。开发者不再需要处理锁和线程的管理,能够更轻松的实现正确的实时并发系统。它包装了状态和动作,相互之间通过将消息放在接收者的 mailbox 中进行信息交换处理。某种程度上,actor 可以说是要求严格的一种面向对象编程模式,但使用起来其实很方便:当用actors建模一种解决方案时,想象这是一群人被赋予了子任务,在组织架构中安排他们工作方法...
2018-12-23 14:25:54
1114
原创 CUDA学习--内存处理之全局内存(5)
1. 全局内存GPU的全局内存之所以是全局的,主要是因为GPU与CPU都可以对它进行写操作。CPU主机端处理器可以通过以下三种方式对GPU上的内存进行访问:显示地阻塞传输;显示地非阻塞传输;隐式地使用零内存复制。通常的执行模型是CPU将一个数据块传输到GPU,GPU内核对其进行处理,然后再由CPU将数据块传输回主机端内存中。比较高级的模型是使用流(参考CUDA学习–CUDA流)将数据传输和内
2016-10-03 22:27:13
7556
原创 CUDA学习--内存处理之常量内存(4)
1.常量内存常量内存,顾名思义,它是只读内存。这种类型的内存要么是在编译时声明为只读内存,要么是在运行时通过主机端定义为只读内存。常量只是从GPU内存的角度而言。在编译时声明一块常量内存,需要用到const关键字。 常量内存其实只是全局内存的一种虚拟地址形式,并没有特殊保留的常量内存块。常量内存有两个特性,一个是高速缓存,另一个是它支持将单个值广播到线程束中的每个线程。但要注意的是,对于那些数据不
2016-10-03 18:58:08
5203
原创 CUDA学习--内存处理之寄存器(2)
1. 寄存器GPU上一个SM可以看成一个多线程的CPU核。一般CPU拥有二、四、八个核。但一个GPU却有N个SM核。但这里需要注意的是,所有的工作都是有SM上的SP(流处理器)处理的。每个核上SP数目不同,因此每个核支持的线程数目也会有很大的不同。事实上,一个GPU设备上的所有SM中活跃的线程数目通常数以万计。与CPU不同,GPU的每个SM(流多处理器)有上千个寄存器。CPU与GPU架构的一个主要区
2016-09-24 11:16:04
4110
原创 CUDA学习--内存处理之概述(1)
1. 高速缓存高速缓存的最大速度与缓存的大小成反比关系。一级缓存是最快的,但他的大小一般限制在16k、32k或者64k。通常每个CPU核会分配一个单独的一级缓存。二级缓存相对而言慢一些,但他更大,通常有256k~512k。二级缓存或者三级缓存一般在处理器的核之间是共享的,或者作为连接于特定处理器核的独立缓存来维护。与CPU不同,GPU主要依赖基于程序员托管的缓存或者共享内存区。在费米架构的GPU实现
2016-09-23 21:18:46
1302
原创 CUDA学习--CUDA流
1. CUDA流介绍CUDA流在加速应用程序方面起着重要的作用。CUDA流表示一个GPU操作队列,并且该队列中的操作将以指定的顺序执行。我们可以在流中添加一些操作,如核函数启动,内存复制等。将这些操作添加到流的顺序也就是他们的执行顺序。你可以将每个流视为GPU上的一个任务,并且这些任务可以并行执行。2. CUDA流的使用我们先通过在应用程序中使用单个流来说明流的用法。1) 首先,选
2016-09-06 20:59:21
19000
13
原创 CUDA学习--页锁定主机内存
1. 页锁定主机内存除了通过cudaMalloc()在GPU上分配内存,以及通过标准的C函数malloc()在主机上分配内存,CUDA运行时还提供了自己独有的机制来分配主机内存:cudaHostAlloc()。C函数malloc()将分配标准的,可分页的主机内存。而cudaHostAlloc()将分配页锁定的主机内存。页锁定的主机内存也称为固定内存或不可分页内存,它的重要属性就是:操作系统
2016-09-06 19:04:26
3298
原创 CUDA学习--图形互操作(CUDA与OpenGL的交互)
1. 为了说明OpenGL与CUDA C之间的互操作机制,我们将编写一个包含两个步骤的应用程序。第一个步骤是使用CUDA C核函数来生成图像数据。在第二步骤中,应用程序将这个数据传递给OpenGL驱动程序进行渲染。2.首先,我们要包含OpenGL和CUDA的头文件从而确保定义了正确的函数和枚举类型。我们还定义了渲染窗口的大小。#include "cuda_runtime.h"#inc
2016-08-31 20:22:47
4994
1
原创 glut与glew的配置
1. glut配置:Windows环境下的GLUT下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip解压得到五个文件, 将glut.h放置在VC目录include下,即 【Microsoft Visual Studio安装路径\VC\includ
2016-08-29 22:24:02
3984
原创 二叉搜索树
1. 什么是二叉搜索树一棵二叉搜索树是以一棵二叉树来组织的。每个结点包括关键字key及其卫星数据,左孩子left, 右孩子right, 父节点p。二叉搜索树中的关键字key总是以满足二叉搜索树性质的方式来存储: 设x是二叉搜索树的一个结点。如果y是x左子树中的一个结点,则y.key <= x.key。如果y是x右子树中的一个结点,则y.key >= x.key。 如图,根节点的关键字为12,在其左
2016-08-12 19:35:41
342
原创 选择算法
1.问题描述在一个由n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素。例如:在一个元素集合中,最小值是第1个顺序统计量,最大值是第n个顺序统计量。用非形式化的描述来说,一个中位数是它所属集合的“中点元素”。当n为奇数时,中位数是唯一的,位于i = (n + 1) / 2处。当n为偶数时,存在两个中位数,分别位于i=n/2和i = n/2+1处。输入:一个包含n个(互异的)数的集合A和一个
2016-08-07 21:48:14
449
原创 计数排序
1.计数排序思想假设n个输入元素中的每一个都是在0到k 区间内的一个整数。对每一个输入元素x 确定小于x 的元素个数。利用这一信息,就可以直接把x 放到它在输出数组中的正确的位置上。2.计数排序实现计数排序-伪代码:FUNCTION Counting_Sort(A, B, k)let C[0, .., k] be a new arrayfor i = 0 to k C[i] = 0fo
2016-08-07 16:18:33
283
原创 快速排序
1. 快排思想快排也使用了分治的思想,分为三个过程: 1) 分解:数组A[q, ... , r]被划分为两个子数组A[p, ... , q-1] 和 A[q+1, ..., r],使得A[p, ... , q-1] 中的每一个元素都小于等于A[q] ,而A[q] 也小于等于A[q+1, ..., r] 中的每一个元素。 2) 解决:通过递归调用快排,对子数组A[p, ... , q-1] 和 A
2016-08-06 12:16:36
230
原创 堆排序
1. 堆堆是一个数组,又近似于一个完全二叉树。 如图,树上的每一个结点对应数组中的一个元素。除了最底层外,该树是完全充满的,而且是从左向右填充的。 树的根节点是A[1],给定一个下标i,我们很容易得到它的父节点,左右孩子结点的下标。PARENT(i)return i / 2LEFT(i)return 2 * iRIGHT(i)return 2 * i + 1(在计算机中,通过将i 的值左移
2016-08-03 21:17:44
412
原创 最大子数组问题
分治策略中,我们递归的求解一个问题,在每个问题中应用如下三个步骤:1. **分解** 将问题划分为一些子问题,子问题的形式与原问题一样,只是问题规模更小。
2016-08-01 10:11:45
405
原创 欢迎使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2016-08-01 09:59:25
208
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人