- 博客(179)
- 收藏
- 关注
原创 Clipper2 Parallelism (OpenMP + CUDA) Study
2]Fig 1Fig 2Fig 3Fig 4Fig 5OpenMP:CUDA:OpenMPCUDA10 K8151 M814601M161490Table 110K13.318.7100K1311921M12601880Table 2H2D(ms)D2H(ms)10K2.812.6100K201341M1971260Table 3OpenMP:Fig 6Fig 7Fig 8Fig 9CUDA:
2024-04-30 02:01:35
1044
原创 24年第一篇:个人小记
在兴趣之外的努力只是拿现在的时间与未来的荣誉,物质以及肌肉记忆等做交换,只是在于每个人愿意不愿意做这样的交换而已,有的人会不断地获得正向反馈享受其中,有的人则是每次开始新的奋斗都会成为痛苦的回忆。最近学期快结束,反而开始闲下来了,突然想起来自己还有个博客已经好久没更新了,每次打开看到一些七零八落的私信提问,抱歉没能及时回复,如果没回的,也是由于时间久远记不清楚,找不到对应的数据文件所以就算了,希望理解。利他思维,其实所有人都是专注于自己的,所以你对别人的善意和为别人考虑的想法,别人也是真的能感受到的;
2024-04-25 12:04:40
1044
原创 Malloc动态内存分配
在C语言中我们会使用malloc来动态地分配内存,这样做的一个主要理由是有些数据结构的大小只有在运行时才能确定。例如,如果你正在编写一个程序,需要用户输入一些数据,但你不知道用户会输入多少数据,那么你就需要使用动态内存分配。而是一种用于动态内存分配的数据结构,当程序员使用malloc或其他动态内存分配函数请求内存时,这些函数会从堆中分配内存。:应用程序会分配和释放空间。例如,在C语言中,我们使用malloc来分配内存,然后在不再需要的时候使用free来释放内存。这种分配器需要程序员明确地管理内存。
2023-08-10 20:05:25
992
原创 计算机内存中的缓存Cache Memories
这篇写一下计算机系统中的缓存Cache应用场景和实现方式介绍。在讲缓存之前,首先要了解计算机中的内存结构层次Memory hierarchy。也就是下图金字塔形状的结构。
2023-07-24 00:17:41
1877
原创 Buffer Overflow缓冲区溢出和保护措施
缓冲区溢出是指当数据写入某个缓冲区(buffer)时,,从而导致覆盖了相邻内存区域的情况。这种现象可能导致程序崩溃、数据损坏,甚至引发安全漏洞,允许攻击者利用这一漏洞执行恶意代码。比如这个代码中,在内存中,a中的元素和d其实是挨着的,如果给a赋值了超过了它当前容量的数据,那么就会覆盖d的内容,导致d的值混乱。
2023-07-07 19:35:30
4316
1
原创 栈,栈帧Stack Frames和函数调用过程Control Flow
栈其实就是计算机系统内存中的一小块。栈是一块特殊的内存区域,栈在内存中的增长方向是向低地址扩展,%rsp寄存器存储栈的最低地址,即栈顶元素的地址。这种栈结构在程序中的应用有助于实现函数调用、局部变量的管理以及递归等功能。
2023-07-03 15:51:45
549
原创 machine code中的条件控制control flow和switch语句,循环Loop
上篇写了machine code基本知识概念,这篇再总结一下其中的流控制、条件判断,循环等实现。
2023-06-26 11:01:31
465
原创 Assembly code汇编代码,寄存器register,操作数operands与机器代码machine code
这篇文章写一下X86系统中的ISA(instruction set architecture)指令集架构,machine code以及汇编代码assembly code相关的内容。一个简单的overview:不用一下子全看得懂,先有个大致的概念,因为后面还会细讲其中一些部分。总的来说,程序执行时,CPU中存放了一些最重要的部分,如PC,是program counter,用来存储下一个指令,在 x86-64 中称为 "RIP"(instruction pointer);
2023-06-21 00:03:11
853
原创 Bits, Bytes and Integers——二进制unsigned以及Two-complement表示,十六进制
这篇文章梳理一下Bits, Bytes and Integers——二进制unsigned以及Two-complement表示,十六进制这些事儿。
2023-05-23 09:38:31
1501
1
原创 Git advanced高级操作
这篇文章是继之后的一些补充,学习总结一些额外Git操作中的比较常用的操作。所以这篇文章假设你已经有了前面的基础,我就直接说一些没有提到过的部分。
2023-05-13 08:24:53
794
1
原创 Test Doubles测试替身: Testing in Distributed Systems and Real World
"Test Doubles" 是一种用来辅助单元测试的技术,这个名字是由Gerard Meszaros首次提出的,他将其比喻为电影制作中的替身演员。当我们进行单元测试时,我们通常关注的是测试特定的函数或方法。然而,这些函数或方法常常依赖于其他的对象或系统。例如,一个函数可能需要从数据库中查询数据,或者需要调用另一个服务的API。在这种情况下,这些依赖关系可能会导致测试变得复杂或者不可预测。为了解决这个问题,我们可以使用"Test Doubles"来模拟这些依赖关系。
2023-05-12 09:14:34
529
原创 Git概念介绍,常用命令与工作流程整理 配图
Git是一个版本控制系统,换句话说,它可以在整个开发过程中对我们的代码库进行命名快照(即保存),并且在出现问题时,我们可以轻松地回滚到任何此类保存的状态。如果我们写了错误地代码,在没有Git的情况下,我们需要找出我们改变了什么并手动恢复,这既耗费时间又容易出错。有了Git,如果我们在代码运行正常的时候进行了保存,我们可以用一条命令就恢复到那个状态。我们也可以为彼此逐步记录我们的工作。
2023-05-11 12:37:30
685
原创 API Design principle 一些API设计原则
API(应用程序编程接口)是一种规范,定义了不同软件组件之间如何进行交互。API 描述了一组操作、输入和输出,这些操作独立于实现,使得开发人员可以访问其他程序、库或框架的功能,而无需了解其底层实现细节。API 是一种在软件系统中实现模块化和解耦的方式。通过定义清晰的边界和接口,API 使得各个组件或模块可以独立地开发、测试和维护,同时保证它们之间的互操作性。
2023-05-08 13:45:54
677
原创 Design principle: Immutability不可变性与对mutable变量的Synchronization方法
在设计模式中是指一个对象在创建后其状态就不能改变。这是一种编程思想和设计原则。在某些情况下,使用不变对象可以带来许多好处:简化代码 make things very simple:不可变对象在创建后状态不会改变,因此无需考虑对象状态的变化,这使得代码更简单,更容易理解和维护。线程安全 Inherently thread-safe:不可变对象是线程安全的,因为它们不会在多个线程之间共享可变状态。这消除了同步和锁定的需要,提高了性能和可靠性。
2023-05-06 12:26:02
561
原创 设计模式 Template Method Pattern(Inheritance) vs Strategy Pattern(Delegation)
继承(Inheritance)和组合+委托(Composition + Delegation)都是面向对象设计中的关键概念。继承在强耦合关系中可以实现大量代码重用,但使用时应谨慎。而良好的设计通常更倾向于使用组合和委托,因为它们支持编程接口的重用和封装,有助于信息隐藏,并产生更易于测试的代码(而使用继承的话因为需要重写父类的代码, 往往需要知道父类的具体实现信息,不利于信息隐藏)。虽然继承在某些情况下用起来更顺手,但在设计时应优先考虑delegation。
2023-05-06 08:03:32
772
原创 UML图中的domain model,object model,system sequence diagram以及interaction diagram
UML图(Unified Modeling Language,统一建模语言)是一种用于描述、可视化、构建和记录软件系统的标准化建模语言。在UML中,有很多类型的图,其中包括领域模型(Domain Model)、对象模型(Object Model)和系统顺序图(System Sequence Diagram)等。这些图都是用于描述不同层面和方面的系统。
2023-05-05 12:53:18
1572
原创 Java Test: Specification and Structure Testing(line, branch, path coverage)
这篇文章总结一下Java软件测试中的Secification test和Structure test。
2023-05-04 13:20:42
791
原创 JavaScript中的Concurrency并发:异步操作下的汉堡制作示例
在这篇博客中,我们比较了在JavaScript中实现同步和异步操作的三种方法:同步方法、回调函数和Promise与async/await。每种方法都有其优缺点。同步方法易于理解,但不支持异步操作;回调函数支持异步操作,但可读性差;而Promise与async/await既支持异步操作,又具有良好的可读性,因此我建议只学会最后一种方法就够用了。
2023-05-01 02:49:52
1177
原创 Symmetric crypto AES
Symmetric cryptography means that you use the same key for encryption and decryption. A commonly used algorithm today for symmetric cryptographyis AES, which means "Advanced Encryption Standard".
2022-11-30 12:23:38
1152
原创 C指针Pointers
C语言从初中就开始接触了,当时感觉劝退的东西就是指针了,这篇对指针进行一个整理和记录。之所以用英语是因为权威教材和指南(还有C语言本身)都是来自英文世界,用英文理解这些东西可以很大程度地减少误解,有利于直观理解。
2022-10-31 01:08:25
503
原创 记录:Git “could not resolve host: ××ד
最近使用git push的时候出现了“Could not resolve host:×××”的错误,这个错误的原因是你配置了错误的hhtp代理,所以解决方法是取消它
2022-10-17 10:48:54
11384
3
原创 (英文)零知识证明 Zero-Knowledge Proofs
(英文)零知识证明 Zero-Knowledge Proofs. Machine learning has become increasingly prominent and is widely used in various applications in practice.
2022-10-07 22:40:58
539
原创 (英文)不同版本井字棋的不败策略
好久没有更新博客了,昨天生日+收到了cmu的offer,打开csdn正直国庆节有一个发勋章的活动,就打算把之前在一个cmu线上项目里我写的报告搬运过来(翻译成中文实在是太麻烦了哈哈哈),这篇文章主要就是写了如果我们先手的情况下,在不同版本的井字棋规则中如何保持不败。三种版本分别是正常Normal版本(三连者胜),Misere版本(三连者败)以及reverse misere版本(三连者败,同时双方都用同一种棋子),英文写的比较多但其实策略还是很简单的,供大家参考~
2022-10-03 11:08:42
2962
原创 正规方程法(Normal Equation)原理以及与梯度下降法的区别
具体θ该怎么算呢,下面用一个具体的房价预测例子,来更加清晰地描述X和y以及θ的关系形式,并且引出另一种求正规方程法结论的方式。假设它只有一个参数θ1,我们通过下图中公式(梯度下降法)中的方法,就可以找到一个局部或者是全局最优解。中,我们已知要想得到theta,只需要左右两边都乘以X的逆矩阵即可,但大多数情况下X不一定是方阵,不一定有逆矩阵,于是我们先都同时乘以X的转置矩阵,让其成为方阵。这种思路的本质就是我们要求一个最优的θ,可以直接先假设Xθ=y,从而逆推出θ来。这样,正规方程法的思想就讲完了。.....
2022-07-25 10:03:27
1473
2
原创 Spark Hive实现基于协同过滤的电影推荐(MovieLens数据集)
这篇文章记录一下我之前做过的通过Spark与Hive实现的基于协调过滤的电影推荐。这篇文章只能提供算法、思路和过程记录,并没有完整的代码,仅尽量全面地记录过程细节方便参考。 数据集是从下面这个地址下载的,数据集主要内容是关于用户对电影的评分、评价等。免费数据集下载(很全面)_浅笑古今的博客-优快云博客_数据集下载网站图1.1 数据获取我选取的几个数据集表格如下:图1.2 数据表格图1.3 rating表图1.4 movies表图1.5 tags表图1.6 genome-tags表图1.7 genome-
2022-07-10 14:05:39
4402
2
原创 詹姆斯·格雷克《信息简史》读后感记录
格雷克(作者)不仅在书中细致还原了历史细节,通俗解释了各种理论,还生动刻画了几位不为大众所知的人物:可编程计算机先驱、超越时代的查尔斯·巴贝奇,第一位程序员、诗人拜伦之女爱达·拜伦,计算机科学之父、天妒英才的阿兰·图灵,以及全书的主人公、信息论之父克劳德·香农。 总的来说,《信息简史》就是一步历史书。信息完全是是抽象的、混乱的,从格雷克的书中我也只是觉得,信息贯穿了人类的发展史,今天的成果是过去一点点积累而来的。它从非洲原始部落的鼓声开始娓娓道来,在保持叙述性的同时加入逻辑与思考,将整个信息世界的发展紧密
2022-07-05 10:21:56
1717
原创 关于图灵测试和中文屋Chinese room的理解
今天想分享一个人工智能中的中文屋论证(也叫汉字屋,Chinese room)。什么是中文屋论证呢,我们知道图灵测试是判断是机器否是人工智能的公认标准。我先说图灵测试,知道了图灵测试就很好理解汉子屋论证了。 图灵测试非常简单,就是图灵提出来的,判断一个机器是不是具有智能,就是在你和机器对话以后(前提是你不知道他是机器),你分辨不出来他是真人还是机器——如果你无法判断,就说明这个机器可以算做人工智能。图灵测试得到了很多人的认可。所以往后很多人工智能领域的研究,都是朝着这个目标而努力。 后有个人,叫赛尔,他觉
2022-06-30 12:48:05
4922
原创 K-means聚类原理实现 优缺点 轮廓系数 调优Canopy算法
Kmeans聚类是我最早接触的,也是最简单的机器学习聚类算法了。它是一种无监督学习算法。 还是先简单过一下Kmeans聚类的过程吧。不像模像样地罗列个一二三四,直接口述一下过程就好:比如我们要对二维坐标下一堆散列的点进行Kmeans聚类,我们要提前指定K的值,然后随机选择k个点作为k个聚类中心。此时我们计算其他所有的点和这k个点的距离,这些点离哪个聚类中心近就被归为哪一类;当所有点都被归好类后,我们重新计算每个类的中心。然后再重复上面的操作(根据中心归类,计算新中心,根据中心归类,计算新中心……)当聚类中
2022-06-10 17:36:02
2444
1
原创 密度聚类(CFDP)原理与实现
密度聚类,也被称为CFDP(Clustering by fast search and find of density peaksd)。 密度聚类的作用和Kmeans聚类差不多,可以将一堆数据分成若干类。“密度聚类”,顾名思义其实就是根据点的密度进行归类,比如说某一处点特别密集,那么这一块会偏向归为一类。这篇文章就具体整理一下密度聚类的原理与实现。假设在一个二维平面中有若干个点,我们想要对这些点进行聚类,那么密度聚类的过程如下: 对于每一个点,我们需要计算这个点的“局部密度”与“局部距离”这两个变量。局
2022-06-01 11:18:49
4801
2
原创 PCA降维原理 操作步骤与优缺点
PCA全称是Principal Component Analysis,即主成分分析。它主要是以“提取出特征的主要成分”这一方式来实现降维的。 介绍PCA的大体思想,先抛开一些原理公式,如上图所示,原来是三维的数据,通过分析找出两个主成分PC1和PC2,那么直接在这两个主成分的方向上就可以形成一个平面,这样就可以把我们三位的样本点投射到这一个平面上(如右图)。那么此时的PC1和PC2都不单单是我们的其中某一维特征,而是各个特征通过某种线性变化的组合结果。这就是PCA降维宏观上的效果。...
2022-05-30 21:20:49
32071
6
原创 图像风格迁移 CycleGAN原理
CycleGAN是一种很方便使用的用于进行图像风格转换的模型。它的一大优势就在于不需要成对的数据集就可以进行训练。比如我们只需要随便一大堆真人图像和随便另一大堆动漫图像,就可以训练出这两类风格互相转换的模型。 CycleGAN进行风格转换的原理是这样的:在CycleGAN模型中有两个生成器和两个判别器。如下图所示,生成器G能够实现X域到Y域的转换,判别器Dy可以判断输入图像是否是符合Y域的图像;生成器F能实现Y域到X域的转换,判别器Dx可以判断输入图像是否是符合X域的图像。 Cycl....
2022-05-24 12:17:51
9476
1
原创 百度ai平台接口使用记录
前一段时间在做毕业设计,打算做一些风格转换相关的项目,想自己制作一份数据集用于训练,于是发现了百度ai平台提供的api接口可以实现“人脸动漫化”、“图像风格转换”等功能。按照一定步骤操作后,只要通过post请求就可以将本地的图片进行风格转换了。感觉还不错,比直接使用现有数据集好多了,起码数据质量上可以自己保证~ 当然按照教程来做也非常简单,不过还是做个记录,下次就不用研究教程了。记录一下操作步骤:打开百度ai的平台: 里面有很多功能,我使用的图像转换和人脸动漫化(其实都差不多)...
2022-04-30 00:15:00
4235
2
原创 StyleGAN生成模型
Stylegan的一个非常实用的人脸生成模型,它可以通过控制参数来控制人脸生成的样式,包括五官、发型乃至人种肤色。这篇文章大致总结一下Stylegan的一些原理和要点。 下图(右边)是stylegan生成器的模型结构:映射网络Mapping Network 从上图可以看到,传统的生成器的输入就是直接用高斯分布下512维的随机向量。而Stylegan中使用了8层全连接网络Mapping network来进一步处理输入,将它映射到另一个512维,并未改变其维度。此外,...
2022-04-15 16:14:24
2611
原创 图像风格迁移中的AdaIN,LIN,AdaLIN
在上篇(关于归一化BN IN LN GN相关梳理_TranSad的博客-优快云博客)整理过IN,LN,GN等归一化操作。但还有一些操作名词和它们密切相关,如AdaIN,LIN,AdaLIN等,因为它们主要是出现在图像风格迁移任务中,所以这篇单独拿出来讲一下这几个名词。AdaIN首先回顾一下IN: 通过上篇我们已经知道IN是对于特征图的每一个通道的H、W求均值和标准差,IN的示意图和公式回顾如下: 我们的IN在进行初步“减均值比标准差”操作过后,还需要通过γ和β来进行线...
2022-04-09 12:52:45
7649
1
原创 关于归一化BN IN LN GN相关梳理
原来写过BN(Batch-Normal)在全连接层当中的使用。在更多情况下,我们处理图像的特征图、特征层时也会用到归一化操作,其中就包括BN,也包括LN,IN以及它们的变式等。这篇来整理一下在卷积池化过程当中,对于特征图feature map的各类归一化方法。 关于BN的具体计算公式、优势和特点之类的还是参考上篇写过的(BN批量归一化操作_TranSad的博客-优快云博客_bn批量归一化),这篇我还是侧重于整理不同归一化方法在特征图上的计算方式——也就是每个方法到底是归一化哪部分,归一化时特征图...
2022-04-07 20:40:42
2124
5
原创 最长递增子序列的个数 动态规划
673. 最长递增子序列的个数给定一个未排序的整数数组nums,返回最长递增子序列的个数。注意这个数列必须是严格递增的。示例 1:输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。思路: 这道题和 最长递增子序列 同源,但是在求长度的基础上...
2022-04-04 15:17:12
516
原创 LeetCode连续数组 前缀和
525. 连续数组给定一个二进制数组nums, 找到含有相同数量的0和1的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。思路: 看到这一题,因为是连续子数组所以想尝试用滑动窗口来做,但仔细看题意给的条...
2022-04-04 11:15:02
507
原创 下一个更大元素III
556. 下一个更大元素 III给你一个正整数n,请你找出符合条件的最小整数,其由重新排列n中存在的每位数字组成,并且其值大于n。如果不存在这样的正整数,则返回-1。注意,返回的整数应当是一个32 位整数,如果存在满足题意的答案,但不是32 位整数,同样返回-1。示例 1:输入:n = 12输出:21示例 2:输入:n = 21输出:-1思路: 我们原来做过 下一个排列 那道题很类似。 从这道题是出题方式来看,我们似乎并...
2022-04-04 10:23:31
532
原创 下一个更大元素II 单调栈
503. 下一个更大元素 II给定一个循环数组nums(nums[nums.length - 1]的下一个元素是nums[0]),返回nums中每个元素的下一个更大元素。数字x的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1。示例 1:输入: nums = [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更...
2022-04-03 19:20:51
462
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人