自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 GO语言写Prometheus自定义node-exporter的Docker容器测试

执行以下命令,安装docker-compose到CentOS7.9环境中:安装完成后输入命令验证docker-compose安装成功:2. 使用go语言编写node-exporter创建文件夹04_prometheus_test,执行以下命令初始化go环境:由于需要用到prometheus的go语言sdk,所以需要下载包:执行完成后写代码:这个程序暴露:8080/metrics给prometheus获取数据,:8080/hello可以增加计数。执行编译生成可执行文件:3. d

2024-04-25 09:53:17 470 3

原创 汇编——SSE打包整数

以上代码展现了两个整数向量的相加操作,并且将结果向量反向写进一个向量,然后输出。

2024-04-07 22:00:31 287

原创 汇编——SSE对齐

这是一篇简单的介绍文章。

2024-04-01 22:28:24 389

原创 libco——源码分析(一)

总体的网络服务器操作流程是这样的:fill:#333;co_pollother增加epoll_fd监听文件描述符将自己的协程增加到计时队列中发送网络消息或者其他被激活的文件描述符放到激活队列loop取出超时队列中超时的任务放到超时队列将超时队列黏贴到激活队列末尾激活元素的回调函数处理resume挂起的协程loop写入收到消息的数据并返回上层loopco_pollother。

2024-01-23 18:00:19 971 1

原创 shared_ptr多线程安全性

shared_ptr的计数对象是原子的,但是有一个问题,就是在析构之前shared_ptr调用父类__shared_ptr的析构,__shared_ptr有一个__shared_count成员,这个成员的析构里面调用了其指针成员_Sp_counted_base的方法_M_release,而这个_M_release里面则调用__gnu_cxx::__exchange_and_add_dispatch方法对计数进行-1操作,如果原来的计数为1那么就调用_M_dispose方法将对象执行删除了。

2024-01-12 14:56:43 448

翻译 memory_order——概念及定义说明

在相同的线程,求值A可能sequenced-before求值B,就像求值顺序中描述的一样。

2024-01-11 10:09:02 105

原创 8086CPU汇编语言基础知识入门

在8086CPU下,栈段地址放在SS寄存器中,地址(SS)*16+(SP)为栈顶指针。可以看出,栈底应该地址是小于栈顶的。所以SP+=2表示出栈,而SP-=2表示入栈。由于16为2的4次方,因此其可以空出4位的偏移地址,段地址是16位的地址,总共加起来是20位的物理地址空间。的方式来确定物理地址,地址的计算方式是。存储器芯片按读写属性分类。8086CPU使用的是。装有BIOS的ROM。

2024-01-04 19:57:47 895

原创 C++元编程与内联性能对比测试

这个图中可以看出,模板元编程实现同样的10*10矩阵点积运算竟然需要516ns,而内联的函数只需要0.747ns。模板函数,作用是计算两个函数的行列对应元素相乘之和,这个也是在编译期能够确定对应关系的,缺点是调用了递归以实现循环,但是增加了inline关键字,以期望其能内联。,因此循环需要依靠递归来实现,这种递归如果不能进行内联,那么函数入栈和退栈都是比较消耗时间的。函数,由于都是编译期确定的值,如果编译器不进行优化,那么应该是模板的。模板函数,这个函数的作用是针对指定的行列,调用。函数,可以看到模板的。

2024-01-03 10:51:40 407

原创 金融知识——OMS、EMS和PMS分别是什么意思

EMS独具的一个特征是其能够为交易者提供特定交易自定义算法的能力。如果你想通过DMA(direct market access)并执行交易组中的一小部分以进行价格发现,然后再执行剩下的交易,那么EMS就是你需要的。在交易管理方面,OMS提供交易组合,交易指令,与执行目标的FIX连接,算法交易选项,账户分配以及日终的经纪商及委托商的提醒。如果你是一个活跃的交易参与者、套保基金(避险基金)或者长期资产管理者,并且你很关注实现大订单的价格而不是每个账户的一系列分配,那么EMS就是适合你的系统。

2023-12-22 14:45:58 2012

原创 读书笔记——labuladong算法笔记

所以在写二分算法的时候要先想清楚是要用闭区间还是开区间,另外要明白“中点”这个概念是一个开区间的边界,因为在每次判断必然会判断这个点,因此如果你要用开区间,那么这个点可以直接使用,否则就需要跳过该点。双指针比较灵活,需要注意的就是你可以设计双指针的迭代方式,可以是快慢指针,也可以从起点像两边扩展的指针(对于回文子串有效)。另外,回溯算法和动态规划算法不一样的一点就是,回溯算法没有重叠子问题,没有办法通过字典来进行优化,就是纯的暴力搜索。2、连接:将一个域的父节点的父节点指向另外一个域的父节点;

2023-11-02 09:25:28 339

原创 C++——无锁链表的探索

从MPSC到MPMC的无锁链表的实现。

2023-10-20 20:32:28 288

原创 读书笔记——C++高性能编程(六)

此时如果调用exchange,则需要各个线程再锁定cache-line,如果有多个等待线程,则所有等待线程的访问不是并行的,而load是读,是可以多个等待线程并行的访问的。操作系统更偏好于将CPU调度给占用大量CPU的线程,而自旋锁会占用大量的CPU,因此操作系统会更偏向于将CPU调度给正在等待的线程,从而导致等待释放自旋锁的线程没有CPU来执行释放。上面这个是一个wait-free的代码,仅仅是从代码层面看是不需要等待的(wait-free),但是如上所述,在机器的层面其还是会存在硬件层面的锁定。

2023-10-14 14:02:31 1078 1

原创 读书笔记——C++高性能编程(四、五)

对于缓存而言,如果多个线程没有使用到L3级缓存,那么多个线程可以和平的共处,因为不存在寄存器的竞争(虽然依然存在L1级缓存的竞争),但是如果使用到L3级缓存,由于L3级缓存是共享的,在线程太多的情况下就会发现L3级的缓存受到带宽限制,读取速度会变慢,从而拉低了所有线程的速度。第二点,由于缓存的加载会有预缓存的特性,因此,访问连续的内存速度要远快于随机访问。在判断失败的时候CPU虽然会冲刷流水线,但是缓存中的预加载还在,因此在访问缓存中预加载的索引,测量其速度就可以知道对应的被访问值的确切数值。

2023-10-09 09:57:46 97

原创 读书笔记——C++高性能编程(一至三)

介绍了两个性能分析器:perf,gperftools(https://github.com/gperftools/gperftools);以及一个微基准测试工具:google-benchmark(https://github.com/google/benchmark)。其中编译example可执行程序的时候要增加链接库-lprofiler才能使用pprof,编译完成后要使用CPUPROFILER环境变量制定生成的文件名。从这章中我们了解到,不同的整形的计算速度也是不一样的。

2023-10-08 13:03:58 273

原创 C++深度优化——无锁队列实现及测试

当然,这种实现确实是违背了lock-free的原则,因为自旋锁的存在会导致全局的阻塞,虽然这种情况只有在弹出最后一个元素的时候才会存在。总结了一下这些实现的最根本问题:在队列中只有一个元素的时候,在弹出该元素的同时,push可能正在修改该元素的next成员。如果涉及到共享内存的多线程代码在多线程执行下不可能互相影响导致被hang住,不管OS如何调度线程,至少有一个线程在做有用的事,那么就是lock-free。网上有很多无锁队列的实现,看了几个,发现都是有BUG的,也包括我之前写的关于无锁队列的实现。

2023-09-18 11:48:36 370

原创 C++深度优化——cacheline测试

这个地方可以发现,在没有填充的情况下,1秒内访问的速度是3.5*10^8;注意,我在struct c中的a和b都增加了volatile关键字,这个关键字的作用在于将缓存和主存硬绑定,有点同步打开文件描述符的意思。这里可以看到我的这台机器的cacheline大小是64B。cacheline是内存调度的基本结构,其大小一般为32B或者64B。所谓“伪共享”实际上是主存中的一个cacheline中的内容,在同一时刻只能被多核中的一个捕获处理。可以看到,两次的情况,不填充的速度总是要远远逊色于填充的情况。

2023-09-16 09:18:38 212

原创 算法——组合程序算法解析

这个算法的本质实际是一种状态机的保存和状态变化,从1个数的状态到n各数的状态,然后再逐一更换n个数的值。如何遍历这棵树,这里使用的是深度遍历,先遍历到最末叶子节点,然后再遍历其子节点,如此循环往复。放到这个算法,状态机的推进转换实际是通过C++函数栈的形式进行保存的。实际我们用自己创建的栈也可以同样实现,只要记录每个遍历到的节点的当前状态(循环到哪个数字)、求值域(循环到哪个数值结束)。当前状态保存在各递归的栈中,通过循环进行推动,获得各种组合。高清算法的最核心原理,将其关联到最基础的几个简单的认知。

2023-09-07 10:17:59 677

原创 C++元编程——深度双向RNN实验

只使用C++17标准及stl标准库实现了DRNN,并且做实验验证其正确性。

2023-08-25 09:43:38 549

原创 C++元编程——模拟javascript异步执行

javascript有一个期约调用,就是利用内部的一种协程机制实现的类似并行的操作。可以看到,这个里面用了asyncTask创建了一个期约,然后调用期约执行程序。在期约执行的期间主线程会继续执行。当然,我觉得这个就是有点脱裤子放屁,直接创建一个线程,然后依次调用这些then函数就可以了。

2023-08-14 18:38:21 227

原创 股票指数——RSI指数

也就意味着RSI指数的取值是[0,100]之间,其中0表示周期内没有上涨的,100表示周期内没有下跌的。RSI的直观意义是它表示了一段周期内的上涨力占总量的比例,值越高上涨力越强。超过70表示的是进入了超买阶段、低于30表示进入超卖阶段。可见之前一日的成交量略大于之前下跌的成交量,这个是符合头肩底图形规则的,今天半日的成交量观察应该会超过上一个下跌的第二阶段的下跌,但是由于已经是超卖状态,其维持下跌趋势的可能性较低,因此不太可能形成头肩底,目前观察这是一个错误的信号,近期内不太可能形成强势的上涨状态。

2023-08-14 11:47:50 146

原创 SSL握手协议相关概念

下面梳理一下SSL协议中的一些细节。首先是相关名词:证书、签名、非对称加密、预主秘钥。

2023-08-12 22:14:57 776

原创 TCP网络服务器设计

最近设计了一个网络服务器程序,对于4C8G的机器配置,TPS可以达到5W。业务处理逻辑是简单的字符串处理。服务器接收请求后对下游进行类似广播的发送。在此分享一下设计方式,如果有改进思路欢迎大家交流分享。程序运行在CentOS7.9操作系统上,GCC使用4.8.5版本,网络是千兆网。

2023-08-07 11:11:15 504

原创 决策树——CART

CART分类回归树主要是通过灵活的分类方式,而不是死板的维度,对样本集进行划分,使用基尼系数计算分类后的信息增益,然后找到最大的增益方向并进行分类。

2023-05-31 18:12:13 228

原创 决策树——ID3和C4.5

1)输入数据集S,对各个参数进行分类,分别求出当前数据集的信息熵和分类后的期望熵,用当前数据集的信息熵减去期望熵得到信息增益;ID3决策树原理是使用使信息熵下降速度最快(也即不确定性降低速度最快)的参数逐次进行分类的方法。2)在所有参数中找到信息增益最大的那个参数,用那个参数将数据集分成子集;3)如果子集为同一类别,则为叶子节点,函数返回;4)否则针对子集,使用步骤1和2递归进行分类;

2023-05-29 20:05:39 234

原创 C++元编程——EM算法求解高斯混合模型

EM算法跟K-means差不多,步骤就是:1)首先随机固定个数类的均值和方差矩阵;2)将数据集按照目前的分类计算概率,分派到每个类上;3)对各类中的数据计算其均值和方差;4)误差达标则退出,未达标则返回第2步继续执行。下面是实现代码,模拟的是多高斯分布使用EM算法进行优化。20次迭代就收敛了,结果也正确,识别出3类的均值和方差差别不大。

2023-05-16 15:20:22 348 2

原创 C++元编程——线性回归

由于并非平面,所以展现出来的就是最后两个值线性拟合在中间位置。

2023-05-11 18:24:51 246

原创 C++元编程——矩阵运算(带有逆矩阵)

【代码】C++元编程——矩阵运算(带有逆矩阵)

2023-05-09 19:43:23 184

原创 关于人工智能的想法

理由如下:1、人工智能缺乏自主性,人工智能起始的学习数据来自于人类加过标签的数据,无论多么复杂高深的技术,目前尚不能让机器学会自己归纳吸取自然界的信息。目前人工智能的种群(如果存在的话),其物理实体完全控制于人类的物理创造(硬盘和CPU);目前人工智能不能正确认识到物理世界的规律,也不能进行物理世界规律的自主发觉也枉谈有指导的改造(这一点更需要依赖于低成本的假象实验)。人工智能发展成“生物”需要人类社会的运算力及存储力3到4个数量级的提升才有可能发生(想像一下,一万个个体的种群才有可能较长久存活下来)。

2023-05-04 18:38:15 224

原创 C++元编程——SVM实现

支持向量机也叫最大间隔机,主要的想法是找到样本集两类中距离最近样本的距离最大的超平面。在寻找超平面的时候涉及到一个样本权重的计算。目前比较流行的方法是使用SMO算法进行优化。因为优化过程及计算过程中使用到的都是样本的乘积,因此引入核函数,将二维的相乘改造成其他坐标系中的类似计算,从而能够实现非线性的分类功能。支持向量机的优点就是这个算法涉及到的只是支持向量,所以计算量不是很大。可见SVM确实正确分类了非线性的数据。

2023-05-04 15:40:15 437

原创 C++元编程——CNN进行Minist手写数字识别

【代码】C++元编程——CNN进行Minist手写数字识别。

2023-04-10 09:46:35 689

原创 SSL-RSA加密算法实践

这个程序显然不能用于实际使用,其主要原因是求幂,只要一个3位数对3位数的求幂就可以让Python程序报错。一个数据可加密的最大数值是n(毕竟要对n求余)。RSA算法分三部分:1)密码生成;RSA的算法很简单,但是数学原理比较深入。

2023-03-29 17:39:35 168

原创 信息聚合整理理论研究

首先,每个人对于每条信息的时间窗口应该有一个模糊的明确时间窗口,其次能进行时间窗口的设置。我觉得应该对一段时间内依然有效的信息进行可视化的展示,并能够提供信息的概要,这样在图表展示的同时也能明确这些事情到底是哪些。针对目的已经明确的属性,我们可以通过贴标签的方式,给对应的信息集合贴上数个标签,在需要的时候根据标签进行索引。针对潜在的属性,我们如果无法分析数据则不可能提供这种标签,机器学习的方法也无法针对每个人的模糊目的进行匹配,匹配出的结果也可能过多或者缺漏,会导致聚合意义降低,失去使用价值。

2023-03-29 10:20:36 95

原创 股票指标之波浪理论——直观理解

股票投资中的启发式(拍脑袋)指标——波浪理论的一些浅层次理解。

2023-03-06 18:26:05 392

原创 动态链接问题及linux多进程调试

最近遇到一个问题,服务器上的程序一直起不来,gdb调试也会在中间“正常退出”。这个程序实际是一个主线程fork出一个守护进程。

2023-02-20 18:27:16 136

原创 BOLL线——C++函数式编程实现

BOLL线由上线、中线、下线组成。中线是R_N日内的股票收盘价均值,上线是均值加上2个标准差,下线是均值减去2个标准差。上线是按照估计最大概率的价格区间,下线是按照高斯分布的最大下线的分布区间。

2023-02-16 16:52:56 341

原创 卡尔曼滤波算法

使用计算链的方法描述了卡尔曼滤波方法的计算过程,并且给出了一些改进思路。

2023-02-13 11:35:47 346

原创 KM算法——一场渣男和渣女的盛宴

使用简单通俗而不粗俗的方式解释了KM算法的运算过程。

2023-02-06 17:28:13 153

原创 无锁队列效率试验测试

多线程同步存在的大部分问题是由于其对访问对象的观测和操作不是同时发生的,在观测后操作前其他线程可能会插入并修改访问对象。可以看出,无锁队列相对于有锁的队列,速度大概能快个2-4倍。如果把有锁队列设计成每次最多弹出10个,那么按照理论上讲有锁队列的速度还要快于无锁的队列。无锁队列不需要进行内核协调,所以可以认为,无锁队列相对于有锁队列节省的时间即是上锁和去锁的时间。为了试验无锁队列和有锁队列的性能差异,特别设计试验进行测算。结论就是,无锁队列实际上并没有什么实践上的卵用,老老实实用有锁队列吧。

2023-02-01 11:51:34 280

原创 boost asio——基于协程的TCP服务器

另外一个缺点是由于无锁队列没有唤醒机制,且没有设计无锁唤醒机制,因此需要定时查看写队列中是否有数据,这样做的缺点就是如果原来无数据的队列突然有数据要发送并不能立刻发送出去,而是要等待一段时间才会发送出去,另外,如果一直有数据要发送的时候发送协程会一直占用当前线程使得其他协程无法进行处理。这里有两个线程,一个是主线程,作为协程运行的线程;这里定义了两个实现,分别对应于监听建立的会话以及主动连接建立的会话,内部使用了无锁队列进行跨线程访问,因为在很多情况下可能是在协程运行的线程外进行数据的读和写。

2022-12-16 15:05:34 560

原创 C++元编程——双向RNN

可以看到,训练只要训练6000次结果就稳定了,但是问题在于出来的结果和期望结果有一定的差距。可以看出输出结果是各个输入数据的均值,这个就非常尴尬了。我觉得这和我的训练方式不当可能有关系,下次可以试验每个输入都进行多次训练,直到结果稳定再进行下一个输入的训练。这个试验代码定义了一个3层的DRNN,输入输出分别是3->8->16->2。第二层输入是8*1矩阵;一层包含两个方向的横向节点,最终输出是根据两个节点的输出加权得到。搞了一个双向的RNN,按照网上介绍的双向RNN实现出来的,但是试验结果确非常奇葩。

2022-12-08 17:30:23 152

C++和BOOST实现CNN的Linux版本

C++和BOOST实现CNN的Linux版本

2023-03-29

cnn的C++测试程序

包含MINIST数据,编译很慢,跑起来也很慢。可能因为是CPU计算的,但是好像还是有点用的。

2023-02-27

net-tool-linux

net_tool_linux是linux版本下的网络服务器程序

2022-12-24

net-tool网络库

net_tool网络库

2022-12-23

Linux版本rnn和其他一些东西

Linux版本rnn和其他一些东西

2022-12-10

空空如也

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

TA关注的人

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