自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

中东第一水比AI的博客

博主是个懒比,总是不想更新。

  • 博客(36)
  • 收藏
  • 关注

原创 CUDA学习——Chapter 3(7)归约问题(2)相邻归约及交错归约

第三章并行归约的分化及其优化在上一篇的并行归约里面,我们要注意这样一条语句:if ((tid % (2*stride))==0)我们之前曾经讲过线程束分化的问题——当一个线程束里面并不是全部线程都是活跃的时候,我们称这个线程束是分化的。而在上述并行归约中,在第一次计算的时候只有1/2(甚至更少)的线程是活跃的,第二次只有1/4,第三次只有1/8,以此类推。要改变这种情况,就必须让tid...

2019-05-19 22:52:23 425

原创 CUDA学习——Chapter 3(7)归约问题(1)相邻归约及并行归约

第三章归约问题首先来介绍一个并行计算的案例:有一个长度为n的数组L,求他们的和。如果按顺序叠加,那么时间复杂度就是O(n)。伪代码就是:count←0for i←1 to n count+=L[i]return count那还有一种在串行是O(n),在并行上可以是⌈log2n⌉\left \lceil log_2n \right \rceil⌈log2​n⌉的算法,称为并行归...

2019-05-19 17:45:40 784

原创 CUDA学习——Chapter 3(6)并行性实验(2)

第三章加载吞吐量实验上个实验介绍的是如何通过nvprof来检测SM上的占用率,现在我们来简述一下吞吐量是怎么检测的。命令:nvprof --metrics gld_throughput <program> [param1] [param2] …第一种情况:32*32的线程块大小:第二种情况:32*16的线程块大小:第三种情况:16*32的线程块大小:第四种情况:16...

2019-05-17 22:02:04 330

原创 CUDA学习——Chapter 3(6)并行性实验(1)

第三章我们来做个实验。还是两个二维矩阵的相加,在CUDA上执行。代码如下// 这段代码只能在Windows下运行,Linux请自行修改计时的模块#include <cuda_runtime.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include <str...

2019-05-16 20:22:16 306

原创 CUDA学习——Chapter 3(5)占用率、同步

第三章占用率我们从上篇推文知道,每个SM都有最大的线程束驻数,那么占用率就可以定义为:占用率=活跃线程束数量/最大线程束数量在前面的博文我们应该已经介绍过cudaGetDeviceProperties函数,这个函数返回一个cudaDeviceProp结构,这个结构存储了支持CUDA的英伟达显卡的各种信息。其中,最大线程束数量位于该结构的maxThreadsPerMultiProcesso...

2019-05-16 19:47:11 344

原创 CUDA学习——Chapter 3(4)SM中的资源分配及延迟优化

第三章资源分配欢迎回来我的朋友!在经过了春节的断更之后,CUDA学习日记将继续与大家见面。那么这一篇博文说的就是在处理器中非常重要的一种东西——资源。比如说,在CPU里面,寄存器,L1,L2,L3这些都是指令赖以执行的基础...

2019-03-03 20:19:13 1709 1

原创 CUDA学习——Chapter 3(3)线程束

第三章线程束和线程块我们知道,在SM中,线程块不是线程的最小集合。SM会把线程块划分为若干个线程束,每个线程束由32个连续的线程组成。在一个线程束中 ,所有的线程按照SIMT的方式执行。也就是说,在线程束里的所有线程都会执行相同的指令,每个线程都在该线程束上的私有数据进行操作。我们知道,线程块是拥有维度的。块最多可以有三维。我们之前又学过如何得到线程的全局索引,也就是在一个块中,线程的id...

2019-02-01 21:58:06 1578

原创 CUDA学习——Chapter 3(2)两种经典的GPU计算架构——Fermi和Kepler

第三章什么是Fermi架构Fermi架构是第一代完整的GPU计算架构,具有512个CUDA核心。每个CUDA核心都有一个整数算术逻辑单元(ALU)和一个浮点运算单元(FPU)。每个时钟周期可以执行一个整数或浮点数指令。512个CUDA核心被分到16个SM中,因此每个SM有32个CUDA核心。Fermi架构支持多达6GB的global memory,通过PCIe总线与CPU相连。GigaThre...

2019-02-01 15:31:21 2010

原创 CUDA学习——Chapter 3(1)流式多处理器(SM)介绍

第三章上一章我们讨论了不同内存布局对核函数性能的影响,这一章我们就从硬件的角度,去探究为什么布局会导致核函数运行的不同。SM简介上一节我们说到deviceProp的时候,不知道会不会有读者有疑惑,为什么突然会提到multiprocessor(多处理器)这个概念,这个概念又是什么?其实这个multiprocessor,就是我们这一篇推文要介绍的SM。先来给大家看看SM的结构:这是Ferm...

2019-02-01 14:52:03 5194

原创 CUDA学习——Chapter 0 综述

文章目录第零章什么是并行计算?什么是CUDA?CUDA在现实生活中的用处?我们为什么要学习CUDA?CUDA有什么已经装备上的应用了吗 ?第零章其实书上并没有第0章啦,这篇东西是我自己写的,谈谈CUDA到底是什么,以及CUDA的基本使用和C之间的同异。什么是并行计算?并行计算,是一种和串行计算有着本质区别的运算。根据传统的计算机计算的理论,计算机处理的数据分为两种,指令流和数据流,因此就有...

2019-01-30 14:29:47 391 1

原创 CUDA学习——Chapter 2(5)GPU信息的查看

第二章讲了这么多又复杂又恶心的东西,我们来讲点轻松的。我们在之前的例子中,有这么三句代码不知道有没有引起你的注意:int dev = 0;cudaDeviceProp deviceProp;CHECK(cudaGetDeviceProperties(&amp;deviceProp, 0));这个cudaDeviceProp是个什么东西呢?根据运行结果,我们可以发现这个结构体里面的某个...

2019-01-30 13:53:38 764

原创 CUDA学习——Chapter 2(4)内存空间布局对核函数性能的影响(3)

第二章3.使用二维网格和一维块对矩阵求和那么刚才使用了一维网格一维块的结构来对矩阵进行求和,现在我们来尝试着用二维网格一维块的结构来进行矩阵求和的运算。二维网格一维块的结构如下:那么也就是一个线程处理一个对应的矩阵元素。线程的内存索引依然满足:idx=iy*nx+ix;依葫芦画瓢嘛,我们可以写出使用二维网格一维块的核函数__global__ void sumMatrixOnGPUM...

2019-01-30 13:20:06 285

原创 CUDA学习——Chapter 2(4)内存空间布局对核函数性能的影响(2)

第二章3.使用一维网格和一维块对矩阵求和前面我们使用了二维网格和二维块对矩阵求和,这种分割是非常直观的。那么现在我们就要使用抽象一点的概念,以稍复杂的编程来获得可能能取得的更高的性能。这就需要我们对映射有比较好的深入了解。首先,我们再复习一下一维网格和一维块的结构:其中,nx是x方向上最大的线程数,ny是一个线程需要处理的数据元素个数(因为这个块是一维的,照理来说是不应该有ny的)。所以...

2019-01-29 22:10:47 368 1

原创 CUDA学习——Chapter 2(4)内存空间布局对核函数性能的影响(1)

第二章从前面的博文我们可以知道,global memory是可以划分成网格(一个程序对应一个网格),网格由块组成,块由线程组成。一个块内的线程可以相互访问,相互等待。通过对前面并行向量加法的分析,我们知道,网格和块的大小会影响核函数的性能,这一篇博文将随着书本来探究如何组织网格和块从而获得更高效的性能。还是以矩阵加法为例,在矩阵加法中,传统的是使用二维网格和二维块的布局来分配线程的归属,但这...

2019-01-29 20:39:53 508 1

原创 CUDA学习——Chapter 2(3)核函数的性能

第二章并行计算,本质上来说,就是为了提升工作效率。使得一些工作可以更快地完成。那么如何衡量完成工作的快慢,自然是核函数花费时间的多少。这一篇文章将会给大家介绍,如何对核函数计时,以及通过改变global memory的分割方式,进一步提升核函数的效率。本文介绍两种计时的方法:CPU时钟计时和nvprof计时CPU时钟计时在Linux中,sys/time.h头文件提供了一系列关于时钟的方法。...

2019-01-24 12:27:43 815

原创 CUDA学习——Chapter 2(2)核函数的讨论

第二章前面我们说了GPU中的global memory的布局,分为网格、块和线程。这一篇文章将会对核函数进行重点介绍。核函数的声明通用格式:__global__ void kernel_name(argument list);核函数不允许返回任何值,因此返回类型总是为void前面的__global__是一种declspec,在CUDA里面定义的declspec还有以下三种:__gl...

2019-01-24 11:42:14 505

原创 CUDA学习——Chapter 2(1)GPU内存(global memory)的讨论

第二章代码分为两类,一类叫作主机代码(host code),而一类叫做设备代码(device code)。前者在CPU上运行,后者在GPU上运行。访问的内存也是不一样的。本书代码主机内存中的变量名以h_为前缀,设备内存的变量名以d_为前缀。从CUDA 6.0开始,可以使用一个指针访问CPU或GPU内存,不用担心无法寻址而崩溃的事情。在核函数执行的时候,控制权马上交回给CPU。也就是说CPU和...

2019-01-24 11:21:38 1151

原创 CUDA学习——Chapter 1 CUDA的Hello,world!

本文若无特殊情况,全部在Visual Studio 2017+CUDA 9.0+Nsight 6.0环境下编译、调试。第一章主要描述了CUDA平台,其性能的一些指标,以及如何写出第一个CUDA程序。Example 1-1//用GPU输出Hello,world!#include &amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;lt;cuda_runtime.h&amp;a

2019-01-24 10:29:01 565 1

原创 OpenCV学习日记(4)

绪言人脸识别Haar级联Haar特征的概念Haar级联的概念detectMultiScale()静态Haar级联的实现动态Haar级联的实现绪言本篇主要介绍OpenCV中的人脸识别,初步探究人脸识别中的技术原理。人脸识别人脸识别是目前计算机视觉中最重要的部分之一。人脸识别又分两种:静态识别和动态识别,即图片的人脸识别和视频动态的人脸识别,也就是...

2018-08-12 18:02:48 1793 3

原创 OpenCV学习日记(3)

绪言边缘检测模糊处理blur()medianBlur()GaussianBlur()边缘检测函数Laplacian()Laplace算子详解Sobel()Sobel算子详解代码示例Canny边缘检测绪言本篇主要介绍边缘、轮廓检测,以加深大家对滤波器的初步理解。边缘检测边缘检测是图像处理中的老问题了,很多时候我们并不关心什么颜色...

2018-08-05 20:56:23 432

原创 OpenCV学习日记(2)

绪言图像基本要素简介1.灰度色彩空间2.BGR色彩空间3.HSV色彩空间数学知识简介图像处理中的数学连续傅里叶变换离散时间傅里叶变换离散傅里叶变换傅里叶逆变换卷积滤波器简介高通滤波器绪言大家好哇,这里是第二篇的OpenCV学习日记,和上一篇是一脉相承的。图像基本要素简介图像有几个要素,像素、通道(色彩空间)是我们要研究最基...

2018-08-04 22:59:08 348

原创 OpenCV函数库查询手册(python)(持续更新)

cv2.imread原型:imread(filename,flags=None) 作用:读取图像 参数:filename,读取的图片文件名。flags,读取标志位。 参数名称 作用 IMREAD_ANYCOLOR 按原图像颜色格式读取 IMREAD_ANYDEPTH 按原图像深度信息读取,非16位或32位的则转化为8位 IMREAD_COL...

2018-08-02 18:01:44 29439 3

原创 openCV 学习日记(1)

绪言OpenCV3简介计算机视觉图片存储简介图像处理初步通道图像的读与写绪言咩哈哈哈哈哈,大家好呀,这里是一名已经放弃了ACM的中山大学大二学生。随着对智科的学习,对计算机视觉这一块也是越来越有兴趣了,目前学习的是基于Python的opencv3的计算机视觉学习,这一篇属于一个总览吧。基于的书为《OpenCV3计算机视觉Python语言实现》第二版,但是不...

2018-08-02 17:21:06 548 2

原创 swap字符串浅谈

strcpy浅谈

2017-12-22 17:56:58 996

原创 SYSU Matrix上的选做题——多柱汉诺塔

对于多柱汉诺塔问题的浅要分析和通俗解法。

2017-12-11 16:26:16 2055 1

原创 军事机密

军事机密

2017-12-04 15:49:25 1655

原创 众数

众数

2017-12-04 15:15:08 1338

原创 车厢重组

车厢重组

2017-12-04 15:10:28 767

原创 NOIP2006 明明的随机数

NOIP2006 明明的随机数

2017-12-04 15:01:13 383

原创 算法浅谈:DFS

今天我想给大家说一下DFS算法,DFS(Depth First Searching)是一种基于递归的算法,其中文名为深度优先搜索算法,那么我们先来通过一个简单的例子了解一下DFS算法的工作原理。 我们假定如下一个无向图: 我让你求一条A1到A4的路径。 这很好求吧,我们从A1出发,考虑它的邻接点A2(注意这是一个无向图),那么从A2下去就可以到达A4,因此我们得出一条路径A1->A2->A

2017-10-14 11:14:46 1122

转载 Markdown Editor's user guide

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2017-10-14 10:27:40 160

原创 T0005 N皇后问题

题目描述在参加完某俱乐部的面试后,JK垂头丧气地回到机房。 这个时候EZ进来机房,见到JK之后,默默地拿出了一个棋盘。 “不!我再也不做五子棋问题了!”JK咆哮道。 “哦,放轻松。这个棋盘是用来给你解决N皇后问题的。” “N皇后问题?” “国际象棋中,皇后可以直线,竖线,斜线攻击,我要求你在N*N的棋盘上摆N个皇后,使她们不会互相攻击。我现在给定你N=8。” EZ收起了电脑,默默地离开。

2017-10-11 20:22:56 348

原创 T0004 Fibonacci问题

题目描述:斐波那契数列,是一个数学上著名的数列,这个数列{An}是这样的:1 1 2 3 5 8… 除了第一、二项之外,以后每项都是前两项的和 现给定n,请输出An。由于结果可能比较大,请输出An对19999999取余之后的结果输入示例:5输出示例:5数据范围:对于50%的数据,1≤n≤10^5 对于80%的数据,1≤n≤10^8 对于100%的数据,1≤n≤10^10时间限制:1s空间限制

2017-10-01 18:09:46 361

原创 T00003 Hanoi塔问题

2017.09.28题目描述:某一天茂青正在网络中心值班,正当无聊之际,陈曦经过网络中心并给了茂青一个汉诺塔以来解闷。汉诺塔的规则如下: 假定有三根柱子,从左到右称为A柱、B柱、C柱,A柱上有n个从上到下尺寸依次增大的盘子,现在要将A柱上的n个盘子以同样的次序移到C柱,移动的规则为:小的盘子不能在大的盘子的下面,每次移动只能移动一个盘子。 茂青有点懵,突然间他看到了旁边的计算机,决定写一个程序来

2017-09-28 13:16:39 359

原创 T00002 逆序数问题

2017.09.28题目描述:萌新JK刚上大学,对线性代数很好奇,某一天EZ大佬说我给你一个序列你把它的逆序数算出来,萌新JK瑟瑟发抖并不知道怎么做,需要群里的各位帮忙。 输入: 第一行为序列的元素个数n 后面的n个数分别为序列中的元素输出:仅输出一个数t,t为该序列的逆序数 时间限制:1s 内存限制:128000KB数据要求:对于100%的数据来说,1≤n≤100输入示例:5 1 2

2017-09-28 11:59:14 601

原创 T00001 A+B问题

A+B问题是一个比较基础的问题,笔者这里对这个问题进行简要的分析。 输入流中接受两个数A,B,输出流输出一个数C,则C=A+B 则具体的C++实现代码如下。#include <iostream>using namespace std;int main(){ int a,b,c; cin>>a>>b;//从输入流中读取两个数 c=a+b;

2017-09-28 11:44:40 167

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除