爨爨爨好

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2018年1月14日

摘要: ▶ 有关数独的两个问题。 ▶ 36. 检测当前盘面是否有矛盾(同一行、同一列或 3 × 3 的小框内数字重复),而不关心该盘面是否有解。 ● 初版代码,24 ms,没有将格子检测函数独立出去,行检测、列检测、框检测是否合并为一个循环对速度的影响不明显。最快的解法算法与之相同,蜜汁优化 static 阅读全文
posted @ 2018-01-14 15:32 爨爨爨好 阅读(170) 评论(0) 推荐(0) 编辑

2018年1月12日

摘要: ▶ 问题:给定正整数 n,求由 n 对小括号组成的所有合法表达式,显然所求表达式的个数为卡塔兰数 C(2n,n) / (n+1) 。 ● 暴力枚举,超时。回溯法添加字符,添加够了以后进行检查,时间复杂度 O(22n)。 ● 单边加项,3 ms,随时记录当前的 '(' 和 ')' 的数量,其中一个超过 阅读全文
posted @ 2018-01-12 00:35 爨爨爨好 阅读(142) 评论(0) 推荐(0) 编辑

2018年1月11日

摘要: ▶ 问题:字典序生成有关的问题。 ▶ 31. 由当前序列生成字典序里的下一个序列。 ● 初版代码,19 ms ● 改进代码,15 ms,第二次查找时使用二分法改进,引入原数组长度的常量,引入内置交换函数 std::swap()。 ● 大佬的代码,13 ms,使用了排序函数 ● 偷懒的代码,14 ms 阅读全文
posted @ 2018-01-11 21:40 爨爨爨好 阅读(166) 评论(0) 推荐(0) 编辑

2018年1月7日

摘要: ▶ 问题:单链表中的元素进行交换或轮换。 ▶ 24. 每两个元素进行翻转。如 [1 → 2 → 3 → 4 → 5] 变换为 [2 → 1 → 4 → 3 → 5] ● 初版代码,4 ms ● 改良版代码,3 ms 。减少了结点计数,改变了操作顺序,后面 k 元轮换的算法与此类似。 ▶ 25. 每 阅读全文
posted @ 2018-01-07 11:23 爨爨爨好 阅读(170) 评论(0) 推荐(0) 编辑

2018年1月3日

摘要: ▶ 问题:给定一个数组 nums 及一个目标值 target,求数组中是否存在 n 项的和恰好等于目标值 ▶ 第 1题,n = 2,要求返回解 ● 代码,160 ms,穷举法,时间复杂度 O(n2),空间复杂度 O(1) ● 代码,9 ms,排序后夹逼,需要构造一个结构来保存下标,连着下标一起排序。 阅读全文
posted @ 2018-01-03 23:02 爨爨爨好 阅读(257) 评论(0) 推荐(0) 编辑

2017年12月27日

摘要: ▶ 问题:求两个已经排好序的数组的中位数。 ▶ 简单的归并版。现将两个数组一趟归并到一个数组中(O(m+n)),再利用新数组长度的奇偶性计算新数组的中位数(O(1)),总体时间复杂度 O(m+n),空间复杂度 O(m+n)。 ● 代码,79 ms ▶ 高端的分组分段法,时间复杂度 O(log(min 阅读全文
posted @ 2017-12-27 22:49 爨爨爨好 阅读(303) 评论(0) 推荐(0) 编辑

摘要: ▶ 问题:判断一个字符串是否能通过删除至多一个字符来变成回文串。 ▶ 算法: ● 使用两个指针,开始时分别指向字符串的首元素和末元素,进行回文检查。若检查到两指针重叠或交换,则说明输入字符串已经是回文,返回正确。 ● 若检查到中间某一位置时发现两指针指向的元素不相等,则假设这两个元素之一是多余的元素 阅读全文
posted @ 2017-12-27 21:10 爨爨爨好 阅读(134) 评论(0) 推荐(0) 编辑

摘要: ▶ 问题:给定数组 { ai,i = D1n },求 ( j - i ) * | aj - ai | 的最大值。 ▶ 算法:考虑 ai 和 ai+1,若 ai ≥ ai+1 则显然选 ai 比选 ai+1 更好;若 ai < ai+1,则我们需要比较 ( j - i ) * | aj - ai | 阅读全文
posted @ 2017-12-27 21:02 爨爨爨好 阅读(159) 评论(0) 推荐(0) 编辑

2017年12月14日

摘要: 使用 Runtime API 和 Driver API 检测设备相关属性。并检测了设备之间的拓扑以及主机与设备之间的拓扑(是否支持跨设备原子操作)。 ▶ 源代码:Runtime API ▶ 输出结果: ▶ 源代码:Driver API ▶ 输出结果: ▶ 源代码:topologyQuery ▶ 输出 阅读全文
posted @ 2017-12-14 21:19 爨爨爨好 阅读(728) 评论(0) 推荐(0) 编辑

摘要: 使用三种模式(QUICK_MODE,RANGE_MODE,SHMOO_MODE),测试三种拷贝情况下的显存带宽(HostToDevice,DeviceToHost,DeviceToDevice) ▶ 源代码 ▶ 输出结果:QUICK_MODE,是否写入合并都尝试了。 ▶ 输出结果:SHMOO_MOD 阅读全文
posted @ 2017-12-14 19:59 爨爨爨好 阅读(1002) 评论(0) 推荐(0) 编辑

2017年12月11日

摘要: ▶ 数学函数 ● 舍入函数,考虑被舍入参数有双精度浮点和单精度浮点,舍入方式有区别,舍入结果有整形、长整形和长长整形,所以共有以下舍入函数。 ● 推荐单精度浮点使用函数 rint() 系列(单指令计算),而不用函数 round() 系列(8 指令计算)。其他几个用于单精度浮点的舍入函数也是单指令计算 阅读全文
posted @ 2017-12-11 00:32 爨爨爨好 阅读(443) 评论(0) 推荐(0) 编辑

摘要: ▶ 协作组,要求 cuda ≥ 9.0,一个简单的例子见 http://www.cnblogs.com/cuancuancuanhao/p/7881093.html ● 灵活调节需要进行通讯的线程组合(不一定是线程块或是线程束)的尺寸,在更多粒度上进行线程协作。 ● 协作组功能支持 CUDA 的各种 阅读全文
posted @ 2017-12-11 00:24 爨爨爨好 阅读(936) 评论(0) 推荐(0) 编辑

2017年12月9日

摘要: ▶ 简单的将纯 C/C++ 函数放到另一个文件中,利用头文件引用到主体 .cu 中来,编译时共同编译。 ▶ 源代码,把 C++ 的部分去掉了 ● 输出结果: ▶ 涨姿势 阅读全文
posted @ 2017-12-09 23:24 爨爨爨好 阅读(258) 评论(0) 推荐(0) 编辑

摘要: ▶ 使用 CUDA Runtime API,运行时编译,Driver API 三种接口计算向量加法 ▶ 源代码,CUDA Runtime API ● 输出结果: ▶ 源代码,运行时编译 ● 输出结果: ▶ 源代码,Driver API,也需要上面的 vectorAdd_kernel.cu,调用核函数 阅读全文
posted @ 2017-12-09 19:51 爨爨爨好 阅读(416) 评论(0) 推荐(0) 编辑

摘要: 使用 OpenMP 和 pthreads 两种环境,利用实现统一内存编址,计算基本的矩阵乘法 result = α * A * x + β * result 。 ▶ 源代码 ▶ 输出结果:OpenMP ▶ 输出结果:pthreads ▶ 涨姿势: ● 使用 C++ 结构体完成了类似类的方法。即在结构 阅读全文
posted @ 2017-12-09 19:21 爨爨爨好 阅读(515) 评论(0) 推荐(0) 编辑

摘要: 简单的 CUDA 应用模板,白送的 Sample。 ▶ 源代码 ▶ 输出结果: ▶ 涨姿势:没有 阅读全文
posted @ 2017-12-09 12:44 爨爨爨好 阅读(270) 评论(0) 推荐(0) 编辑

摘要: 两种方法使用零拷贝内存做简单的向量加和,并评估 GPU 计算结果与 CPU 计算结果的差。 ▶ 源代码 ▶ 输出结果: ▶ 涨姿势 ● 两种使用零拷贝内存的方法,在代码的逻辑部分进行了说明 ● 向上取整的宏函数,只对分母(size)为 2 的整数次幂的情况有效。 e.g. size == 4096, 阅读全文
posted @ 2017-12-09 12:20 爨爨爨好 阅读(454) 评论(0) 推荐(0) 编辑

摘要: 介绍了线程束表决函数的实例(其概念介绍见 http://www.cnblogs.com/cuancuancuanhao/p/7841512.html),并在静态和运行时编译两种条件下进行使用。 ▶ 源代码:静态 ▶ 输出结果: ▶ 源代码:运行时编译(删掉了相同的注释) ▶ 输出结果: ▶ 涨姿势 阅读全文
posted @ 2017-12-09 00:51 爨爨爨好 阅读(390) 评论(0) 推荐(0) 编辑

2017年12月3日

摘要: 使用纹理引用来旋转图片,并在使用了静态编译和运行时编译两种环境。 ▶ 源代码:静态编译 ▶ 输出结果 ▶ 源代码:运行时编译 ▶ 输出结果: ▶ 涨姿势 ● 一般,与 0_Simple__simpleSurfaceWrite 类似。 阅读全文
posted @ 2017-12-03 01:16 爨爨爨好 阅读(437) 评论(0) 推荐(0) 编辑

2017年12月2日

摘要: 使用 C++ 的模板 ▶ 源代码:静态使用 ▶ 输出结果: ▶ 源代码:使用运行时编译 ▶ 输出结果: ▶ 涨姿势 ● 封装了 SharedMemory,ArrayComparator,ArrayFileWriter 三个模板,并定义了其在不同的数据类型下的实现。 阅读全文
posted @ 2017-12-02 22:59 爨爨爨好 阅读(234) 评论(0) 推荐(0) 编辑

2017年12月1日

摘要: 使用表面写入函数,结合纹理引用实现图片的旋转▶ 源代码 ▶ 输出结果 ▶ 涨姿势 ● 使用函数 sdkLoadPGM() 读取图片数据 ● 使用到的表面写入函数原型 阅读全文
posted @ 2017-12-01 00:42 爨爨爨好 阅读(507) 评论(0) 推荐(0) 编辑

2017年11月30日

摘要: 对比使用单流和多流(4条)情况下数据拷贝,以及数据拷贝加内核调用的效率差别。▶ 源代码 ▶ 输出结果 ▶ 涨姿势 ● 涉及的宏和内部函数原型 ● 使用原生页对齐锁定内存的步骤 ● 使用函数 cudaEventCreateWithFlags() 相关来计时,与之前的函数 cudaEventCreate 阅读全文
posted @ 2017-11-30 23:16 爨爨爨好 阅读(596) 评论(0) 推荐(0) 编辑

2017年11月25日

摘要: 把代码文件和主程序文件分开编译,使用头文件的形式进行引用。 ▶ 源代码 ▶ 输出结果 未测试 ▶ 涨姿势 ●写在其他 .cpp 文件中的设备函数,需要用函数 cudaMemcpyFromSymbol() 放入设备常量内存才能使用。 阅读全文
posted @ 2017-11-25 16:06 爨爨爨好 阅读(203) 评论(0) 推荐(0) 编辑

摘要: 在设备代码中使用函数 printf(),没有新的认识。 ▶ 源代码 ▶ 输出结果 阅读全文
posted @ 2017-11-25 15:08 爨爨爨好 阅读(215) 评论(0) 推荐(0) 编辑

摘要: 对比设备线性二维数组和 CUDA 二维数组在纹理引用中的效率 ▶ 源代码。分别绑定相同大小的设备线性二维数组和 CUDA 二维数组为纹理引用,做简单的平移操作,重复若干次计算带宽和访问速度。 ▶ 输出结果 ▶ 涨姿势 ● 用到的函数都在以前的,有关线性二维数组和纹理内存使用方法的博客汇总讨论过了。 阅读全文
posted @ 2017-11-25 13:06 爨爨爨好 阅读(374) 评论(0) 推荐(0) 编辑

摘要: 使用 P2P 特性在 GPU 之间传输、读写数据。 ▶ 源代码。包括 P2P 使用前的各项检查,设备之间的数据互拷,主机和设备之间数据传输和相互访问。 ▶ 输出结果 只有一台设备,暂无法进行测试 ▶ 涨姿势: ● P2P 要求:至少两台计算能力不低于 2.0 的设备,并支持同一可视内存空间特性;计算 阅读全文
posted @ 2017-11-25 12:01 爨爨爨好 阅读(688) 评论(0) 推荐(0) 编辑

摘要: 计算核函数调用使得占用率,并尝试使用 runtime 函数自动优化线程块尺寸,以便提高占用率。 ▶ 源代码。 ▶ 输出结果 ▶ 涨姿势 ● 用到的几个 runtime 函数及其相互关系。 阅读全文
posted @ 2017-11-25 10:30 爨爨爨好 阅读(679) 评论(0) 推荐(0) 编辑

2017年11月23日

摘要: 使用多台 GPU 进行计算▶ 源代码。使用不同的流来控制不同 GPU 上的运算任务。 ▶ 输出结果 ▶ 涨姿势 ● 在使用不同的设备执行相关函数(包括 cudaFree 等主机函数)时要注意,使用函数 cudaSetDevice() 来切换设备。 阅读全文
posted @ 2017-11-23 12:30 爨爨爨好 阅读(338) 评论(0) 推荐(0) 编辑

摘要: 利用 CUDA 的 Overlap 特性同时进行运算和数据拷贝来实现加速。 ▶ 源代码。使用 4 个流一共执行 10 次 “数据上传 - 内核计算 - 数据下载” 过程,记录使用时间。 ▶ 输出结果 ▶ 涨姿势 ● 没有 阅读全文
posted @ 2017-11-23 11:12 爨爨爨好 阅读(630) 评论(0) 推荐(0) 编辑

摘要: MPI 的简单使用▶ 源代码。主机根结点生成随机数组,发布副本到各结点(例子用孩子使用了一个结点),分别使用 GPU 求平方根并求和,然后根结点使用 MPI 回收各节点的计算结果,规约求和后除以数组大小(相当于球随机数组中所有元素的平方根的平均值)。 ▶ 输出结果 ▶ 涨姿势 ● 集中在 MPI 的 阅读全文
posted @ 2017-11-23 10:01 爨爨爨好 阅读(505) 评论(0) 推荐(0) 编辑

2017年11月22日

摘要: 二维分层纹理 ▶ 源代码。用纹理方法把元素按原顺序从 CUDA3D 数组中取出来,求个相反数再加上层数放入全局内存,输出。 ▶ 输出结果 ▶ 涨姿势 ● 与前面立方体贴图纹理不同的地方:申请 CUDA3D 数组的时候使用标志 cudaArrayLayered 而不是 cudaArrayCubemap 阅读全文
posted @ 2017-11-22 23:49 爨爨爨好 阅读(259) 评论(0) 推荐(0) 编辑

摘要: 立方体纹理贴图 ▶ 源代码。用纹理方法把元素按原顺序从 CUDA3D 数组中取出来,求个相反数放入全局内存,输出。 ▶ 输出结果 ▶ 涨姿势 ● helper_time.h 中新定义的计时函数 ● 立方体纹理贴图。六个面分别为 x = 1 正面、x = -1 轴负面、y = 1 正面、y = -1 阅读全文
posted @ 2017-11-22 22:45 爨爨爨好 阅读(332) 评论(0) 推荐(0) 编辑

摘要: ▶ 协作组,CUDA9.0 的新特性 挂白痴:https://blog.csdn.net/bruce_0712/article/details/79116013 ▶ 源代码,如何获得协作组的编号? 1 #include <stdio.h> 2 #include "cuda_runtime.h" 3 阅读全文
posted @ 2017-11-22 20:21 爨爨爨好 阅读(778) 评论(0) 推荐(0) 编辑

2017年11月15日

摘要: ▶ 线程束表决函数(Warp Vote Functions) ● 用于同一线程束内各线程通信和计算规约指标。 ● 在设备代码的一个线程中调用 _all(predicate),__any(mask, predicate),__ballot(mask, predicate) 时,该线程所在的线程束中所有 阅读全文
posted @ 2017-11-15 23:09 爨爨爨好 阅读(3952) 评论(0) 推荐(0) 编辑

摘要: ▶ 可缓存只读操作(Read-Only Data Cache Load Function),定义在 sm_32_intrinsics.hpp 中。从地址 adress 读取类型为 T 的函数返回,T 可以是 char,short,int,long longunsigned char,unsigned 阅读全文
posted @ 2017-11-15 21:16 爨爨爨好 阅读(881) 评论(0) 推荐(0) 编辑

2017年11月12日

摘要: ▶ 纹理内存读取函数 ▶ 表面内存读写函数 阅读全文
posted @ 2017-11-12 00:32 爨爨爨好 阅读(714) 评论(0) 推荐(0) 编辑

2017年11月11日

摘要: 附录 A,CUDA计算设备 附录 B,C语言扩展 ▶ 函数的标识符 ● __device__,__global__ 和 __host__ ● 宏 __CUDA_ARCH__ 可用于区分代码的运行位置. ● __noinline__ 和 __forceinlie__ ■ __device__ 函数由便 阅读全文
posted @ 2017-11-11 17:49 爨爨爨好 阅读(1051) 评论(0) 推荐(0) 编辑

摘要: ▶ 图形互操作性,OpenGL 与 Direct3D 相关。(没学过,等待填坑) ▶ 版本号与计算能力 ● 计算能力(Compute Capability)表征了硬件规格,CUDA版本号表征了驱动接口和运行时接口的(软件)规格。 ● Driver API 的版本号定义在在驱动头文件中的宏 CUDA_ 阅读全文
posted @ 2017-11-11 02:34 爨爨爨好 阅读(1295) 评论(0) 推荐(0) 编辑

2017年11月10日

摘要: ▶ 表面内存使用 ● 创建 cuda 数组时使用标志 cudaArraySurfaceLoadStore 来创建表面内存,可以用表面对象(surface object)或表面引用(surface reference)来对其进行读写。 ● 使用 Surface Object API ■ 涉及的结构定义 阅读全文
posted @ 2017-11-10 23:20 爨爨爨好 阅读(1601) 评论(0) 推荐(0) 编辑

摘要: ▶ 纹理内存使用 ● 纹理内存使用有两套 API,称为 Object API 和 Reference API 。纹理对象(texture object)在运行时被 Object API 创建,同时指定了纹理单元。纹理引用(Tezture Reference)在编译时被 Reference API 创 阅读全文
posted @ 2017-11-10 21:27 爨爨爨好 阅读(1871) 评论(0) 推荐(0) 编辑