爨爨爨好

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

摘要: 关于cuBLAS库中矩阵乘法相关的函数及其输入输出进行详细讨论。 ▶ 涨姿势: ● cuBLAS中能用于运算矩阵乘法的函数有4个,分别是 cublasSgemm(单精度实数)、cublasDgemm(双精度实数)、cublasCgemm(单精度复数)、cublasZgemm(双精度复数),它们的定义 阅读全文
posted @ 2017-10-31 22:33 爨爨爨好 阅读(12730) 评论(2) 推荐(6) 编辑

2019年2月24日

摘要: ● nvcc 编译流程图 ● sm 是向前兼容的,高的版本号是在低版本号的基础上添加了新功能得到的,同一 compute_XY 编译的 .cu 文件仅能向后 sm_ZW 的实 GPU 版本(Z > X) ● 虚拟 GPU 完全由它提供给应用程序的一组功能或特征来定义 ● PTX 可以视为虚拟 GPU 阅读全文
posted @ 2019-02-24 23:53 爨爨爨好 阅读(521) 评论(0) 推荐(0) 编辑

2019年2月15日

摘要: ▶ 参考【https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html】 ▶ nvcc 预定义的宏 __NVCC__ // 编译 C/C++/CUDA 源文件时有定义 __CUDACC__ // 编译 CUDA 源文件时有定义 _ 阅读全文
posted @ 2019-02-15 23:38 爨爨爨好 阅读(1212) 评论(0) 推荐(0) 编辑

2018年8月27日

摘要: ▶ Driver API 阅读全文
posted @ 2018-08-27 16:17 爨爨爨好 阅读(266) 评论(0) 推荐(0) 编辑

摘要: ▶ 统一内存编址 阅读全文
posted @ 2018-08-27 16:17 爨爨爨好 阅读(287) 评论(0) 推荐(0) 编辑

摘要: ▶ 动态并行。 ● 动态并行直接从 GPU 上创建工作,可以减少主机和设备间数据传输,在设备线程中调整配置。有数据依赖的并行工作可以在内核运行时生成,并利用 GPU 的硬件调度和负载均衡。动态并行要求算法和程序要提前改进,消除递归、不规则的循环、结构或其他不适合并行的情况。 ● 动态并行的经典图 ● 阅读全文
posted @ 2018-08-27 16:16 爨爨爨好 阅读(543) 评论(0) 推荐(0) 编辑

摘要: ▶ C/C++ 扩展 阅读全文
posted @ 2018-08-27 16:16 爨爨爨好 阅读(254) 评论(0) 推荐(0) 编辑

2018年5月8日

摘要: ▶ 纹理内存访问补充(见纹理内存博客 http://www.cnblogs.com/cuancuancuanhao/p/7809713.html) ▶ 计算能力 ● 不同计算能力的硬件对计算特性的支持。 ● 不同计算能力的硬件技术特性(重要)。 ● 浮点运算技术标准描述(原文) ■ All comp 阅读全文
posted @ 2018-05-08 16:49 爨爨爨好 阅读(414) 评论(0) 推荐(0) 编辑

2018年5月1日

摘要: ▶ 升级到 Visual Studio 2017 和 CUDA 9.1 之后,直接编译以前的 CUDA C 程序出现了如下报错: ● 那两个“应输入表达式”是读不了 <<< 和 >>> 操作符; ● 最后那个错很直接,在 host_config.h 中有下列对 Visual Studio 的版本筛选 阅读全文
posted @ 2018-05-01 11:20 爨爨爨好 阅读(8494) 评论(1) 推荐(1) 编辑

2018年2月5日

摘要: ▶ 给定方阵 grid,其元素的值为 D0n-1,代表网格中该点处的高度。现在网格中开始积水,时刻 t 的时候所有值不大于 t 的格点被水淹没,当两个相邻格点(上下左右四个方向)的值都不超过 t 的时候我们称他们连通,即可以通过游泳到达,请问能将主对角两顶点((0, 0) 和 (n-1, n-1)) 阅读全文
posted @ 2018-02-05 22:54 爨爨爨好 阅读(601) 评论(0) 推荐(0) 编辑

2018年2月4日

摘要: ▶ 给出四个整数,求他们是否能加减乘除括号拼凑成 24 ● 代码,11 ms,正向枚举,推广性很强(nums 可以改为任意长度,也不限于拼凑 24 这个和),缺点是只能判定是否有解,不方便输出不重复的解 ● 分情况讨论,3 ms,代码非常暴力,仅适用于4元情况,不过可以通过添加新的函数 valid( 阅读全文
posted @ 2018-02-04 22:48 爨爨爨好 阅读(400) 评论(0) 推荐(0) 编辑

摘要: ▶ 指数取模运算 ab % m ▶ 参考维基 https://en.wikipedia.org/wiki/Modular_exponentiation,给了几种计算方法:暴力计算法,保存中间结果法(分为左到右的二进制法和右到左的二进制法),矩阵法,优先群法,量子计算法。 ● 代码,18 ms,令 a 阅读全文
posted @ 2018-02-04 11:39 爨爨爨好 阅读(167) 评论(0) 推荐(0) 编辑

2018年2月3日

摘要: ▶ 有关将一棵二叉树转化为二位表的题目,一模一样的套路出了四道题 ▶ 第 102 题,简单的转化,[ 3, 9, 20, null, null, 15, 7 ] 转为 [ [ 15, 7 ] , [ 9, 20 ] , [ 3 ] ] ● 自己的代码,6 ms,先根序遍历,最快的解法算法与之相同 ▶ 阅读全文
posted @ 2018-02-03 23:19 爨爨爨好 阅读(166) 评论(0) 推荐(0) 编辑

摘要: ▶ 将一个单链表拆分为长度尽量接近的 k 段 ● 自己的代码,12 ms ■ 记链表长度为 count,目标段数为 k,quo = count / k,mod = count % k,part = mod * (quo + 1) ■ 前半截(长半截)共有 mod 组,每组 quo + 1 个元素,共 阅读全文
posted @ 2018-02-03 22:59 爨爨爨好 阅读(139) 评论(0) 推荐(0) 编辑

摘要: ▶ 扫雷的扩展判定。已知棋盘上所有点的情况(雷区 'M',已翻开空白区 'B',未翻开空白区 'E',数字区 '1' ~ '8'),现在给定一个点击位置(一定在空白区域),若命中雷区则将被命中的 M 改为 X,若命中空白区则将点击位置扩展为带有数字边界的安全区。 ● 自己的解法,28 ms,深度优先 阅读全文
posted @ 2018-02-03 22:54 爨爨爨好 阅读(176) 评论(0) 推荐(0) 编辑

摘要: ▶ 给定一个数组与它的一个子列,对于数组中的一个元素,定义它右边第一个比他大的元素称为他的后继,求所给子列的后继构成的数组 ▶ 第 496 题,规定数组最后一个元素即数组最大元素的后继均为 -1 ● 自己的版本,12 ms,最快的解法算法与之相同 ▶ 第 503 题,数组换成环状,只有数组最大元素的 阅读全文
posted @ 2018-02-03 22:47 爨爨爨好 阅读(123) 评论(0) 推荐(0) 编辑

2018年2月2日

摘要: ▶ 指数模运算。求 c 使得 c ≡ ab (mod m),其中 b 用 vector<int> 的形式保存(长整数),m = 1337 ● 代码,18 ms,令 b=10c+d,则 ab % m == ((ac % m)10 % m) * (ad % m) % m,递归,每次将指数的个位拆出来 ● 阅读全文
posted @ 2018-02-02 14:49 爨爨爨好 阅读(205) 评论(0) 推荐(0) 编辑

摘要: ▶ 两个四则表达式运算的题目,第 770 题 Basic Calculator IV 带符号计算不会做 Orz,第 772 题 Basic Calculator III 要收费 Orz。 ▶ 自己的全能版代码,28 ms,采用表达式中缀转后缀,然后利用栈来计算。支持加减乘除幂模,一模一样的代码刷掉了 阅读全文
posted @ 2018-02-02 11:48 爨爨爨好 阅读(346) 评论(0) 推荐(0) 编辑

2018年2月1日

摘要: ▶ 三个与丑数相关的问题 ▶ 第 263题,判定一个数字是否是丑数,即其素因子是否仅由 2,3,5 构成。 ● 常规消除判别,4 ms ● 递归方法,6 ms ▶ 第 264 题,计算第 n 个丑数。第 263 题就是个坑,不能用逐个判断的方法来找,否则超时 ● 用第 263 题的方法逐个检查,计算 阅读全文
posted @ 2018-02-01 16:51 爨爨爨好 阅读(227) 评论(0) 推荐(0) 编辑

2018年1月31日

摘要: ▶ 整数数组中有一个数出现的频数超过了数组长度的一半,求这个数 ● 自己的代码,27 ms,使用散列表,最快的解法算法与之相同,但是用的数据结构是 map ● 大佬的解法,16 ms,摩尔投票算法(Boyer-Moore Voting Algorithm),时间复杂度 O(n) 空间复杂度 O(1) 阅读全文
posted @ 2018-01-31 23:25 爨爨爨好 阅读(142) 评论(0) 推荐(0) 编辑

摘要: ▶ 栈和队列的相互表示。发现内置的队列和栈结构都十分高效,相互表示后性能损失都很小。 ▶ 第 225 题,用队列实现栈 ● 自己的代码,3 ms,单队列实现,入栈 O(1),读取栈顶元素 O(n),出栈 O(n) 。 ● 大佬的代码,3 ms,队列 queue 具有成员函数 back(),可以用于读 阅读全文
posted @ 2018-01-31 22:50 爨爨爨好 阅读(159) 评论(0) 推荐(0) 编辑

2018年1月30日

摘要: ▶ 一个学生的考勤状况是一个字符串,其中各字符的含义是:A 缺勤,L 迟到,P 正常。如果一个学生考勤状况中 A 不超过一个,且没有连续两个 L(L 可以有多个,但是不能连续),则称该学生达标(原文表述:A student could be rewarded if his attendance re 阅读全文
posted @ 2018-01-30 22:27 爨爨爨好 阅读(246) 评论(0) 推荐(0) 编辑

摘要: ▶ n 对夫妻共 2n 个人随机坐成一排,“交换其中某两人的位置” 称为一次操作,求最少的操作此次数,使 n 对夫妻两人都相邻。初始座位为非负整数列 D1n-1,其中值为 2k 和 2k+1 的两个元素为一对夫妻。(本体尚未有 Discuss或 Solution) ● 代码,2 ms,顺着梳理 ● 阅读全文
posted @ 2018-01-30 20:13 爨爨爨好 阅读(452) 评论(0) 推荐(0) 编辑

摘要: ▶ 将一群人的关系网络划分为几个连通子图,且子图之间两两不连通,求这种连通子图的数量 ● 代码,22 ms,深度优先遍历 ● 代码,21 ms,建立森林,并且定义了专用于这类合并问题的类 UnionFind,本问题中可以完全去掉节点等级变量 rank ● 广度优先遍历,24 ms ● 收录两个 py 阅读全文
posted @ 2018-01-30 19:50 爨爨爨好 阅读(175) 评论(0) 推荐(0) 编辑

摘要: ▶ 要求给出一种对 URL 网址进行压缩和解压的算法,例如 https://leetcode.com/problems/design-tinyurl ←→ http://tinyurl.com/4e9iAk,在不允许打表的情况下应该无法压缩的。 ● 代码,6 ms,完全不压缩,just for fu 阅读全文
posted @ 2018-01-30 17:30 爨爨爨好 阅读(148) 评论(0) 推荐(0) 编辑

摘要: ▶ 将一个单词 W1 以字母为最小单位拆成一棵二叉树,旋转其中的某几个结点的左右子树,再拼装回去得到单词 W2,我们称 W1 与 W2 等价。现在给出两个单词,判定他们是否等价。 ● 代码,4 ms,递归,最快的解法算法与之相同。有方法利用 unordered_map 缓存了各子串的判定结果,但由于 阅读全文
posted @ 2018-01-30 15:21 爨爨爨好 阅读(170) 评论(0) 推荐(0) 编辑

摘要: ▶ 求一个整数数列的和最大子串 ● 代码,12 ms,动态规划,时间复杂度 O(n),最快的解法算法与之相同。记 f( i ) 为 “数组 num 中以第 i 位作为结尾的子串的最大和”,那么有 f(i) = nums[i] + (f(i - 1) > 0 ? f(i - 1) : 0); ● 代码 阅读全文
posted @ 2018-01-30 12:18 爨爨爨好 阅读(137) 评论(0) 推荐(0) 编辑

摘要: ▶ 有两个单链表,从中间某个节点开始结点完全相同,找出该节点。 ● 神奇的双指针法,34 ms,,详细步骤见代码注释(设两个单链表结点个数分别为 m 和 n,公共部分长为 k),时间复杂度 O(n),空间复杂度 O(1) ● 双指针法高压版,36 ms ● 代码,55 ms,便于理解的一个双指针法, 阅读全文
posted @ 2018-01-30 11:30 爨爨爨好 阅读(146) 评论(0) 推荐(0) 编辑

2018年1月29日

摘要: ▶ 给定长为 n 的整数列,其元素是从 D0n 中取的,且两两不等,求没有被取到的元素。 ● 异或骚操作,24 ms,利用了性质 i ^ i = 0,当某个 k 仅出现了一次时 k 可以留下来。 ● 其他还有排序后查找的,排序后逐位作差找跨度的等。 阅读全文
posted @ 2018-01-29 23:47 爨爨爨好 阅读(166) 评论(0) 推荐(0) 编辑

摘要: ▶ 合并 k 个已经排好序的单链表 ● 代码,28 ms,二路归并递归版,时间复杂度 O(k n log k) ● 代码,30 ms,二路归并非递归版,时间复杂度 O(k n log k) ● 代码,29 ms,优先队列,最快的解法算法与之相同,时间复杂度 O(N log k) ● 代码,29 ms 阅读全文
posted @ 2018-01-29 23:11 爨爨爨好 阅读(154) 评论(0) 推荐(0) 编辑

摘要: ▶ 超级洗碗机。给定一个有 n 元素的整数数组,我们把 “将指定位置上元素的值减 1,同时其左侧或者右侧相邻元素的值加 1” 称为一次操作,每个回合内,可以选定任意 1 至 n 个位置进行独立的操作,求最少的回合数,使得该数组中的搜有元素调整为相等的值。若不存在(所有元素的和不能被元素个数整除),返 阅读全文
posted @ 2018-01-29 21:16 爨爨爨好 阅读(199) 评论(0) 推荐(0) 编辑

摘要: ▶ 给出一个数组,要求给出每个元素在排序以后的下标,并且给前三名金银铜牌。如输入 [ 4, 5, 1, 3, 0 ],则输出 [ 2, 1, 4, 3, 5 ],(得 5 分的第一名,的 4 分的第二名,以此类推) 。题目本身比较简单,但是思想比较重要。 ● 代码,10 ms,使用数对记录下标,类似 阅读全文
posted @ 2018-01-29 20:20 爨爨爨好 阅读(135) 评论(0) 推荐(0) 编辑

摘要: ▶ 倒水问题。我们有两个容积分别为 a 和 b 的桶,请问是否能通过相互倾倒的方式量出体积为 c 的水。 ▶ 断言:若 c 满足 0 < c ≤ a + b 且 c = k · (a, b)(k为正整数,()为取最大公约数),则体积为 c 的水可以量出。 ● 一个优美的证明,原视频 https:// 阅读全文
posted @ 2018-01-29 19:46 爨爨爨好 阅读(168) 评论(0) 推荐(0) 编辑

2018年1月27日

摘要: ▶ LeetCode 上目前回答最短的问题,just for fun 。两个玩家轮流从 n 个石头中取走若干颗,每人每次可以取 1 ~ 3 颗,取走最后一颗的人获胜,求先手玩家是否能必胜。 ● 代码,2 ms,最快的解法算法与之相同。 阅读全文
posted @ 2018-01-27 22:25 爨爨爨好 阅读(91) 评论(0) 推荐(0) 编辑

2018年1月21日

摘要: ▶ 删除单链表中的重复元素。 ▶ 83. 把重复元素删得只剩一个,如 1 → 1 → 2 → 3 → 3 → 3 → 4 → 5 → 5 变成 1 → 2 → 3 → 4 → 5。注意要点:第一个元素就可能重复,最后一个元素可能是重复,多个连续重复。 ● 自己的代码,18 ms,记录了发生重复的第一 阅读全文
posted @ 2018-01-21 11:32 爨爨爨好 阅读(165) 评论(0) 推荐(0) 编辑

摘要: ▶ 关于单链表翻转的两个问题。 ▶ 206. 翻转整个单链表。 ● 自己的代码,9 ms,使用了递归。 ● 大佬的代码,9 ms,逐格移动。 ▶ 92. 要求翻转单链表中第 m 到第 n(两端包含,且 m 可以等于 n)之间的所有元。 ● 自己的代码,4 ms,使用了第 206 题的结果。 ● 大佬 阅读全文
posted @ 2018-01-21 11:14 爨爨爨好 阅读(160) 评论(0) 推荐(0) 编辑

摘要: ▶ LeetCode 上最费神的题目之一,检查一个字符串是否是一个数字,需要考虑前后空格,数字符,小数点,指数符(e),其他杂质字符等情况。 ● 代码,8 ms,直白的逐位遍历和分析。 ● 代码,10 ms,比较系统的分情况讨论,思想值得精读和学习 阅读全文
posted @ 2018-01-21 10:55 爨爨爨好 阅读(149) 评论(0) 推荐(0) 编辑

摘要: ▶ 一个有趣的算法题。给定一个非负数数组,把数组中各元素看做是宽度为 1,高度为其值的砖块,求这些砖块最大能盛多少水。如给定数组 [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1],则水量为 6。参考原题答案 https://leetcode.com/problems/trap 阅读全文
posted @ 2018-01-21 00:20 爨爨爨好 阅读(209) 评论(0) 推荐(0) 编辑

摘要: ▶ 与 Hamming 距离相关的两道题。 ▶ 461. 求两个数 x 与 y 的哈夫曼距离。 ● 代码,4 ms,对 x 和 y 使用异或,然后求值为 1 的位的个数。 ● 代码,7 ms,转化为 bitset 来逐位比较。 ▶ 477. 求数组 nums 中,所有数字之间两两哈夫曼距离的和。 ● 阅读全文
posted @ 2018-01-21 00:00 爨爨爨好 阅读(150) 评论(0) 推荐(0) 编辑

2018年1月17日

摘要: ▶ 给定一个数组 和一个目标值。从该数组中选出若干项(项数不定),使他们的和等于目标值。 ▶ 36. 数组元素无重复 ● 代码,初版,19 ms 。从底向上的动态规划,但是转移方程比较智障(将待求数分解为左右两个半段,分别找解,拼在一起,再在接缝上检查是否是重复解)。 ● 代码,成套方法系列,13 阅读全文
posted @ 2018-01-17 16:25 爨爨爨好 阅读(135) 评论(0) 推荐(0) 编辑

2018年1月14日

摘要: ▶ 在一串 '(' 和 ')' 组成的字符串中寻找最长的匹配的子串,如 ()),(()),()(),()(()) 等都算合法。 ● 代码,暴力搜索,超时。使用两个变量枚举原字符串的 O(n2) 个子串,每个子串用 O(n) 的时间去验证是否匹配,时间复杂度 O(n3),以下为稍微改进的版本,没有本质 阅读全文
posted @ 2018-01-14 19:55 爨爨爨好 阅读(141) 评论(0) 推荐(0) 编辑