title: [CUDA 基础]3.2 理解线程束执行的本质(Part I) categories: CUDA Freshman tags: 线程束分化 CUDA分支 toc: true date: 2018-03-14 21:31:16 Abstract: 本文介绍CUDA执行模型最核心的部分,线程束的执行实质第一部分 Keywords: CUDA分支,线程束分化 开篇废话 我们前面已经大概的介绍了CUDA执行模型的大概过程,包括线程网格,线程束,线程间的关系,以及硬件的大概结构,例如SM的大…
title: [CUDA 基础]5.6 线程束洗牌指令 categories: - CUDA - Freshman tags: - 线程束洗牌指令 toc: true date: 2018-06-06 19:53:12 Abstract: 本文介绍线程束洗牌指令的用法 Keywords: 线程束洗牌指令 开篇废话 赶紧写博客,少说废话. 前面介绍了共享内存,常量内存,只读内存的使用,今天我们来研究一个比较特殊的机制,名字也很特殊,叫做线程束洗牌指令. 支持线程束洗牌指令的设备最低也要3.0以上,…
title: [CUDA 基础]6.2 并发内核执行 categories: - CUDA - Freshman tags: - 流 - 事件 - 深度优先 - 广度优先 - 硬件工作队列 - 默认流阻塞行为 toc: true date: 2018-06-18 22:04:08 Abstract: 本文介绍内核的并发执行,以及相关的知识 Keywords: 流,事件,深度优先,广度优先,硬件工作队列,默认流阻塞行为 开篇废话 没有废话,继续前面的内容,上文中我们说到了流,事件和同步等的概念,以…
title: [CUDA 基础]3.3 并行性表现 categories: - CUDA - Freshman tags: - nvprof toc: true date: 2018-04-15 21:17:52 Abstract: 本文主要通过nvprof工具来分析核函数的执行效率(资源利用率) Keywords: nvprof 开篇废话 继续更新CUDA,前面为了加速概率论的学习停了一段CUDA,从今天开始继续CUDA和数学分析的更新,每一篇都写一点废话就相当于自己的日记了,之前很佩服那些写…
GPU的硬件结构,也不是具体的硬件结构,就是与CUDA相关的几个概念:thread,block,grid,warp,sp,sm. sp: 最基本的处理单元,streaming processor  最后具体的指令和任务都是在sp上处理的.GPU进行并行计算,也就是很多个sp同时做处理 sm:多个sp加上其他的一些资源组成一个sm,  streaming multiprocessor. 其他资源也就是存储资源,共享内存,寄储器等. warp:GPU执行程序时的调度单位,目前cuda的warp的大小…
title: [CUDA 基础]3.1 CUDA执行模型概述 categories: CUDA Freshman tags: CUDA SM SIMT SIMD Fermi Kepler toc: true date: 2018-03-12 23:20:41 Abstract: 本文介绍CUDA执行模型,只比硬件高一层的抽象 Keywords: CUDA SM,SIMT,SIMD,Fermi,Kepler 开篇废话 今天晚上本来都该睡觉了,但是还是决定把这篇文章写出来,毕竟昨天就没写. 这一篇开…
title: [CUDA 基础]2.3 组织并行线程 categories: CUDA Freshman tags: Thread Block Grid toc: true date: 2018-03-09 21:00:38 Abstract: 本文介绍CUDA模型中的线程组织模式 Keywords: Thread,Block,Grid 开篇废话 一天写两段废话也是有点累了,天天写废话,后面可以开个系列叫做废话.写一句吧,做研究别有民科精神就好,用自己的理论A证明自己的理论B,在用理论B证明理论…
理解JavaScript的执行上下文栈,可以应用堆栈信息快速定位问题(原文文档) 1.什么是执行上下文: 简而言之,执行上下文就是当前JavaScript代码被解析和执行时所在环境的抽象概念,JavaScript中运行任何的代码都是在执行上下文中运行. 2.执行上下文类型: 执行上下文总共有三种类型: 1)全局执行上下文 这是默认的.最基础的执行上下文.不在任何函数中的代码都位于全局执行上下文中.它做了两件事:1.  创建一个全局对象,在浏览器中这个对象就是window对象.2. 将this指针…
title: [CUDA 基础]6.3 重叠内和执行和数据传输 categories: - CUDA - Freshman tags: - 深度优先 - 广度优先 toc: true date: 2018-06-20 20:10:09 Abstract: 本文介绍如何利用流的重叠来隐藏主机到设备的数据传输延迟 Keywords: 深度优先,广度优先 开篇废话 热烈庆祝上证跌破3000点.如果股市是一个国家经济最好的衡量标准之一的话,我们的中国梦该醒醒了. 前面一节我们主要研究多个内核在不同流中的…
title: [CUDA 基础]5.2 共享内存的数据布局 categories: - CUDA - Freshman tags: - 行主序 - 列主序 toc: true date: 2018-06-02 21:01:03 Abstract: 本文主要研究几个关于共享内存的例子,以此来了解共享内存的性质,为我们的核函数加速 Keywords: 行主序,列主序,填充与无填充,从线程索引体映射数据元素 开篇废话 同一个东西,A花大工夫做到极致,成本100,售价200:C模仿A的做法快速的通过仿制…
title: [CUDA 基础]4.3 内存访问模式 categories: - CUDA - Freshman tags: - 内存访问模式 - 对齐 - 合并 - 缓存 - 结构体数组 - 数组结构体 toc: true date: 2018-05-03 22:08:07 Abstract: 本文介绍内存的访问过程,也就是从应用发起请求到硬件实现的完整操作过程,这里是优化内存瓶颈的关键之处,也是CUDA程序优化的基础. Keywords: 内存访问模式,对齐,合并,缓存,结构体数组,数组结构…
一.GPU简介 1985年8月20日ATi公司成立,同年10月ATi使用ASIC技术开发出了第一款图形芯片和图形卡,1992年4月ATi发布了Mach32图形卡集成了图形加速功能,1998年4月ATi被IDC评选为图形芯片工业的市场领导者,但那时候这种芯片还没有GPU的称号,很长的一段时间ATi都是把图形处理器称为VPU,直到AMD收购ATi之后其图形芯片才正式采用GPU的名字. NVIDIA公司在1999年发布GeForce 256图形处理芯片时首先提出GPU的概念.GPU使显卡削减了对CPU…
title: [CUDA 基础]5.1 CUDA共享内存概述 categories: - CUDA - Freshman tags: - CUDA共享内存模型 - CUDA共享内存分配 - CUDA共享内存访问 - CUDA共享内存配置 - CUDA共享内存同步 toc: true date: 2018-06-01 17:46:23 Abstract: 本文为CUDA内存的概述,介绍共享内存的模型,分配,访问,配置,同步等内容 Keywords: 模型,分配,访问,配置,同步 开篇废话 这里首先…
title: [CUDA 基础]4.4 核函数可达到的带宽 categories: - CUDA - Freshman tags: - 带宽 - 吞吐量 - 矩阵转置 toc: true date: 2018-05-13 12:08:02 Abstract: 本文通过矩阵转置这一个例子,调整,优化核函数,使其达到最优的内存带宽 Keywords: 带宽,吞吐量,矩阵转置 开篇废话 下面是废话,与本文知识无关,可以直接跳到下面红字处开始本文知识的学习. 废话继续,这两天没更新博客了,上一篇是转发的…
title: [CUDA 基础]4.0 全局内存 categories: - CUDA - Freshman tags: - 全局内存 - CUDA内存模型 - CUDA内存管理 - 全局内存编程 - 全局内存访问模式 - 全局内存数据布局 - 统一内存编程 - 提高内存吞吐量 toc: true date: 2018-04-28 09:43:50 Abstract: 本文为学习CUDA编程的第四章的概要,主要介绍第四章研究的对象 Keywords: 全局内存,CUDA内存模型,CUDA内存管理…
title: [CUDA 基础]3.6 动态并行 categories: - CUDA - Freshman tags: - 动态并行 - 嵌套执行 - 隐式同步 toc: true date: 2018-04-24 20:57:48 Abstract: 本文介绍CUDA动态并行--在设备上运行时的网格启动新的子网格 Keywords: 动态并行,嵌套执行 动态并行 本文作为第三章CUDA执行模型的最后一篇介绍动态并行,书中关于动态并行有一部分嵌套归约的例子,但是我认为,这个例子应该对我们用途不…
title: [CUDA 基础]3.5 展开循环 categories: - CUDA - Freshman tags: - 展开归约 - 归约 - 模板函数 toc: true date: 2018-04-19 21:02:08 Abstract: 本文介绍循环展开技术,在归约的基础上继续加速. Keywords: 展开归约,归约,模板函数 开篇废话 博客从CSDN那边截流了一些流量,现在网站访问突然增多到让我有点不适应,于是,想想还是别总盯着流量看吧,注意文章质量,同时保证一定的更新,从数学…
- title: [CUDA 基础]3.4 避免分支分化 categories: - CUDA - Freshman tags: - 规约问题 - 分支分化 toc: true date: 2018-04-17 23:32:55 Abstract: 介绍规约问题中的分支分化问题 Keywords: 规约问题,分支分化 此篇有些结果和参考书中结果相反,需要更深入的技术才能解决 开篇废话 我坚持写博客是因为我上次最困惑最难过的那段时间通过写博客改变了我的非常不好的情况,所以我认为写些东西梳理自己的思…
转载: Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通使用的,需要在实践中不断积累.由于并发肯定涉及到多线程,因此在进入并发编程主题之前,我们先来了解一下进程和线程的由来,这对后面对并发编程的理解将会有很大的帮助. 一.操作系统中为什么会出现进程? 说起进程的由来,我们需要从操作系统的发展历史谈起. 也许在今天,我们无法想象在很多年以前计算机是…
线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public class Thread implements Runnable { /* What will be run. */ private Runnable target; ...... /** * Causes this thread to begin execution; the Java Virtu…
首先明确两点: 1.JS 执行机制是单线程. 2.JS的Event loop是JS的执行机制,深入了解Event loop,就等于深入了解JS引擎的执行. 单线程执行带来什么问题? 在JS执行中都是单线程执行,所以代码的执行可以说是自上而下,如果前一段的代码出现问题,就会导致下一段代码无法执行,对于用户而言就是卡死现象,所以在JS执行机制引出了异步执行操作. 那异步能解决什么呢问题,又会带来什么问题? 异步操作能够很好的解决上面单线程执行出现的卡死现象,但是也会产生问题,比如同时对一件事情操作,…
Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通使用的,需要在实践中不断积累.由于并发肯定涉及到多线程,因此在进入并发编程主题之前,我们先来了解一下进程和线程的由来,这对后面对并发编程的理解将会有很大的帮助. 下面是本文的目录大纲: 一.操作系统中为什么会出现进程? 二.为什么会出现线程? 三.多线程并发 若有不正之处,请多多谅解并欢迎指正. 请…
并发数,线程数,吞吐量,每秒事务数(TPS)都是性能测试领域非常关键的数据和指标. 那么他们之间究竟是怎样的一个对应关系和内在联系? 测试时,我们经常容易将线程数等同于表述为并发数,这一表述正确吗? 本文就将对性能领域的这些关键概念做一次探讨. 文章可能会比较长,希望您保持耐心看完. 1. 走进开封菜,了解性能 ①老王开了家餐厅 我们的主角老王,在M市投资新开业了一家,前来用餐的顾客络绎不绝: 餐厅里有4种不同身份的人员: 用户一次完整的用餐流程如下: 顾客到店小二处付款点餐 => 小二将订单转…
title: [CUDA 基础]6.0 流和并发 categories: - CUDA - Freshman tags: - 流 - 事件 - 网格级并行 - 同步机制 - NVVP toc: true date: 2018-06-10 20:21:37 Abstract: 本文是第六章的概述,本章也是Freshman的最后一个章节. Keywords: 流,事件,网格级并行,同步机制,NVVP 开篇废话 本文是Freshman系列的最后一篇,考虑到接下来要说的是比较高级的内容,所以把其划分到下…
title: [CUDA 基础]5.3 减少全局内存访问 categories: - CUDA - Freshman tags: - 共享内存 - 归约 toc: true date: 2018-06-04 19:47:29 Abstract: 本文介绍使用共享内存进行归约,并比较全局内存归约与共享内存归约之间的性能差距 Keywords: 共享内存,归约 开篇废话 逻辑是非常重要的,一旦你学会了逻辑,很多假的东西你可以轻松的识别出来,这会使你更加强大而不会被任何人或者组织洗脑. 废话少说,开始…
title: [CUDA 基础]5.0 共享内存和常量内存 categories: - CUDA - Freshman tags: - 共享内存 - 常量内存 toc: true date: 2018-06-01 16:46:49 Abstract: 本文是第五章关于CUDA共享内存和常量内存的概述 Keywords: 共享内存,常量内存 开篇废话 本文是CUDA第五章的概论,来给出本章的大概思路,文章短小,不说废话. 共享内存和常量内存 在本章中,我们要学习: 数据在共享内存中的安排 二维共享…
Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专…
一:cuda编程模型 1:主机与设备 主机---CPU 设备/处理器---GPU CUDA编程模型如下: GPU多层存储空间结构如图: 2:Kernel函数的定义与调用 A:运行在GPU上,必须通过__global__函数类型限定符定义且只能在主机端代码中调用: B:在调用时必须声明内核函数的执行参数----<<<>>>. C:先为内核函数中用到的变量分配好足够空间再调用kernel函数 D:每个线程都有自己对应的id----由设备端的寄存器提供的内建变量保存,且是只读…
Java 多线程基础(四)线程安全 在多线程环境下,如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 在了解线程安全之前,先来说一下Java的内存模型 JMM ,先了解多线程是如何工作的. 一.JMM(Java Memory Model) JMM是一种基于计算机内存模型(定义了共享内存系统中多线程程序读写操作行为的规范),屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台…
Java 多线程基础(五)线程同步 当我们使用多个线程访问同一资源的时候,且多个线程中对资源有写的操作,就容易出现线程安全问题. 要解决上述多线程并发访问一个资源的安全性问题,Java中提供了同步机制(synchronized)来解决. 一.线程同步 当线程A进入操作的时候,线程B和线程C只能在外等着,线程A操作结束,线程B和线程C才有机会进入代码去执行.也就是说在某个线程修改共享资源的时候,其他线程不能修改该资源,等待修改完毕,数据同步之后,才能去抢夺CPU资源,完成对应的操作,保证了数据的同…