- 博客(25)
- 收藏
- 关注
原创 纯c++实现transformer 训练+推理
该项目自主开发了自动求导框架,仅依赖 C++ 标准库,旨在助力用户理解 Transformer 的底层原理。该项目仅依赖 C++ 标准库。在main.cpp train函数中,逻辑和pytorch类似,都是要将模型的所有parameters引用/指针传递给优化器,然后依次清理grad,反向传播,裁剪梯度,执行权重调整。以矩阵乘法为例,在node.h node.cpp中,乘法会生成一个结果节点,关联两条边倒两个乘数。这是一个无需依赖特殊库的 Transformer 的 C++ 实现,涵盖了训练与推理功能。
2025-04-03 18:41:01
352
原创 Flink Source 详解
FLIP-27 介绍了新版本Source 接口定义及架构相比于SourceFunction,新版本的Source更具灵活性,原因是将“splits数据获取”与真“正数据获取”逻辑进行了分离。
2024-11-12 17:10:29
1057
原创 FlinkPipelineComposer 详解
flink-cdc 3.0 提供的pipeline模式,通过定义yaml,自动构建了一条cdc pipeline,避免手动调用datastream api,并且支持schema evolution构建的主要逻辑集中在 FlinkPipelineComposer。
2024-11-11 15:25:26
1231
1
原创 Flink CDC Schema Evolution 详解
flink-cdc 3.0 通过加入了SchemaOperator和MetadataApplier,监控链路上所有消息,当发生schema变更时,同步上下游hang住上游flush下游修改下游schema恢复运行这样实现了自动schema变更多并发会加速存量数据的同步,增量数据的读取还是只能通过一个并发。
2024-10-23 19:06:49
1657
2
原创 java getLocalHost 速度慢的问题分析
在跑es压测的时候发现,有很多线程卡在java.net.InetAddress$NameServiceAddresses.get的一个锁上面,本文记录一下整个问题的分析过程和根因
2022-12-24 18:13:38
1932
原创 优雅动态关闭一个运行中进程的fd
如果一个进程莫名其妙的继承了一个父进程的fd是很令人不爽的,这可能会造成依某些资源被不需要它的进程占用。如果这个运行中的进程是敏感业务,不允许重启,那么问题会更为棘手。本文描述了一种动态关闭运行中进程fd的方法,并探究其实现原理--如何使用ptrace去动态改变进程行为。
2022-12-24 17:58:45
1224
原创 uprobe的使用浅析
uprobe是linux内核提供的一种trace用户态函数的机制,可以在不对二进制重新编译的情况下进行trace特定函数,本文描述了uprobe的基本使用方法
2022-10-15 00:52:08
2193
原创 trace_noschedule 实现解析
在日常运维过程中,偶尔会碰到内核线程调度不及时的场景,针对“单个任务陷入内核台执行时间过长”这个case,字节跳动的同学开发了trace_noschedule模块,用来定位占用时间过长的任务和栈信息,本文就是要分析trace_noschedule模块的使用方法和实现原理。..................
2022-07-27 21:16:06
771
原创 dpdk rte_eth_dev_count_avail()返回0 问题解决记录
在学习dpdk 官方example的过程中,遇到了找不到可用网卡的问题,发现是因为没有官方指定的网卡,最终靠安装libpcap并使用官方提供的纯软件pmd绕开
2022-06-22 22:54:48
3647
原创 如何在ubuntu22.04上使用微软精英手柄
运行环境Linux wangli-System-Product-Name 5.15.0-25-generic #25-Ubuntu SMP Wed Mar 30 15:54:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux1. 安装xonegit clone https://github.com/medusalix/xone按照官方说明一步一步做注意,安装好驱动之后,手柄的usb接收器可以亮起来,但是这时还无法配对,需要执行一下echo 0 |
2022-05-09 21:29:01
1630
原创 使用tee命令获取不到输出的解决方案
当我们想一边监控一个程序的输出,一边又想将输出记录到一个文件当中的时候,tee命令就是一个非常好的选择./buffer_demo | tee a.txt比如上面的命令,将buffer_demo程序的输出打印到屏幕上,同时写入a.txt文件当buffer_demo持续输出比较多的文本的时候,上面的命令运行的没有什么问题。但是如果buffer_demo使用的是printf这样的标准io库的函数,并且输出文本速度很慢的时候,我们可能半天也看不到屏幕上有输出。这是因为当你使用管道的时候,标准io库
2022-04-07 16:16:58
2948
原创 linux seq_file机制学习
linux内核驱动模块经常要将一些信息通过/proc文件树暴露给用户,以方便用户直接能从文件系统中读取到驱动程序或者内核的一些状态信息,当这些信息比较短的时候编程比较容易,一旦过长并且用户有lseek相关的操作,那么在内核中编程就就会变得比较困难,需要维护很多状态。为了解决这个问题,linux内核提供了一种seq_file机制来简化编程的复杂性。本文实验环境:Linux VM-0-13-ubuntu 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:
2022-03-19 02:23:34
2555
原创 关于linux字符驱动中read函数filp->f_pos 和 loff_t *ppos的关系
在学习linux 字符驱动的时候会有这样的困惑比如我们实现一个字符驱动的读函数,如下static ssize_t globalmem_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos) { unsigned long p = *ppos; unsigned int count = size; int ret = 0; struct globalmem_dev *dev = filp
2022-03-05 21:07:28
2205
原创 梳理linux0.12知识点系列 之 8259A的初始化和时钟中断
梳理linux0.12知识点系列之8259A的初始化和时钟中断背景cpu和设备协同工作的高效方式是使用中断机制,本例子基于之前的打开了A20地址线的demo,进一步初始化了8259A终端控制芯片,并且屏蔽了除了时钟中断以外的所有硬件中断。当始终中断发生时,在屏幕上打印'T' 'I' 'M' 'E' 'R'五个字符额外修改除了加入初始化8259A芯片和增加中断处理函数的逻辑之外,...
2020-01-21 20:32:42
1872
5
原创 梳理linux0.12知识点系列 之 A20地址线的打开
梳理linux0.12知识点系列之A20地址线的打开背景关于A20地址线的历史问题维基百科上有详细的描述总体来说就是如果不开启A20地址线我们只能访问1M内存也就是说这时能访问的最大内存地址是0xfffff当我们想要访问0x100000的时候,cpu帮我们环绕到0x0处linux 0.12的打开和检查方案linux 0.12在setup.S中进行了打开A20地址线的操作 ....
2020-01-20 21:41:46
597
原创 梳理linux0.12知识点系列 之 让汇编到C不再遥远
梳理linux0.12知识点系列之让汇编到C不再遥远背景在读《Linux内核完全剖析》这本书的时候,你是否有过这样的困境前期的基础知识沉浸在大量的汇编代码中,从16位实模式到32位保护模式,有要经历各种其他知识的冲击,比如8259A编程,A20地址线页表,等等。这些都在干扰我们有一条清晰的路线去观察系统是如何从汇编真正跳转到C代码中,于是让初学者感觉自己离真正的内核代码还好遥远,...
2020-01-17 20:38:21
459
原创 X86下的8259A子系统
#X86下的8259A子系统##声明本文会用尽量朴素非术语的语言整体介绍x86架构下中断处理的大概过程,希望能够帮助读者对PC的工作模式有一个简单的形象化的认识。为了帮助理解,示意图经过简化后不能保证完全正确。##背景在描述8259A的工作方式之前,我们先明确几个基础的前提cpu的工作方式是“取址->执行”,每执行一条指令,IP(Instruction Pointer)指令寄...
2020-01-07 15:36:28
728
原创 操作系统原理与实践-信号量的实现和应用
include/linux/sys.h 下增加extern int sys_sem_open();extern int sys_sem_close();extern int sys_sem_wait();extern int sys_sem_post();extern int sys_sem_count();fn_ptr sys_call_table[] = { sys_set...
2019-11-06 19:36:49
405
原创 一种在nodejs中调用c++的简单方法
背景: 目前nodejs调用c++主流的有两种方法,分别是addons和ffi addons是nodejs官方的c++扩展实现方案,但是由于需要使用模版,并且要对v8引擎有一定的了解,入门门槛较高。 ffi是nodejs直接调用so库的一种实现,可以调用纯c的接口。 以上两种方法有一个共同的缺陷,就是当nodejs调用的时候,如果不能立即返回的话,c++代码会卡住单线程的j...
2018-04-21 21:56:44
13483
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人