自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 编写自定义的LLVM Pass

今晚反思了一下,自己最近看的东西太发散了,只有一个模糊的主题——LLVM,然后看了很多作者的一系列文章,但是这些文章比较多而杂,大多数都是一个系列,且较为发散,近来又喜欢发现一个作者便将该作者的一系列文章进行阅读,然后其中引用了另一个作者的文章,又要读一大箩筐,这样铺的太开而没有线,今后还是以一个较为固定且细致的主题发布博文,这样也方便读者查找和掌握重点,用到的资料以链接的形式附在文中,如果某天的资料没有看完,仍可以将链接附在文中,以飨读者。本文主要是阅读LLVM的。

2024-01-06 23:13:36 520

原创 【微信小程序】wx.navigateTo传参时不能使用const定义的数据类型

如题,笔者测试了好久才找到这个bug,想传递的数据是this.data中的一个变量,结果通过const定义的时候发现一直传递的数据都是undefined,最后查看网上的文档发现使用的都是let,不知道是什么情况,猜测是因为const定义时对于wx.navigateTo是同步的,而let是异步的,因此会发生const定义方式失效的情况。

2024-07-21 14:31:41 71

原创 【活法科技】如何使用活法平台

笔者在使用活法科技时,发现网上介绍相关内容的文章比较少,因此特意写一篇博文记录一下。

2024-07-16 18:23:06 87

原创 【CUDA】thrust进行前缀和的操作

可以看到,此处thrust调用了cub的Dispatchscan操作,而cub中是使用全局内存的,因此造成了效率还不如手动编写使用共享内存的算法。,可以发现使用CUDA提供的API进行前缀和扫描时,第一次运行的时间不如共享内存访问,猜测是使用到了全局内存。:路径可能与实际有偏差,可以在/usr/local/下使用。将操作指定为plus,

2024-07-15 16:17:18 290

原创 【CUDA】CUDA中缓存机制对计时的影响

观察每次的运行时间,发现第三种方法首次运行的时间大约是后续运行时间的7倍,而第二种方法的每次运行时间基本一致,因此造成了结果的不一致,笔者将文中的代码进行修改,展示两个版本,其中version1是前20次的结果(即原文结果),version2是第1次到第21次的运行结果(即后20次的结果,不包括第一次),可以看到,此时第三种方法的结果比第二种方法的结果快,且三种方法的结果差距不大,那么可以说在计算层面,对该程序的优化提升不大,而在访存方面,thrust使用的方法效率要比共享内存低。

2024-07-14 15:31:01 362

原创 【CUDA】shuffle算法的一个优化

猜测是shuffle内部的某些机制造成了延迟,不过这个只有在看到源码时才能具体分析。还差0.05ms(不同评测机上结果可能不同)

2024-07-08 21:11:39 179

原创 【CUDA】

ReduceMax:找到每一行的最大值以进行数值稳定性处理。:将每个元素减去所在行的最大值。Exp:对每个元素计算指数函数。ReduceSum:计算每一行的元素和。:将每个元素除以所在行的和,形成概率分布。每个步骤的内存访问模式和计算方式都是为了确保整个 softmax 计算过程的数值稳定性和准确性,同时在尽量减少全局内存访问次数以优化性能。

2024-07-07 20:10:30 796

原创 【CUDA】CUDA将RGB图像转成灰度图并统计并行直方图

试了之后发现这篇文章中的代码没有任何输出,连最基本的灰度图都输不出来,遂参考GPT写了一个输出脚本,这么看opencv封装的函数还是很好用的,比如这里面的cv:imgwrite函数。遂安装了opencv库准备一试,结果不管怎么弄都报错找不到文件,最后发现,竟然是作者将头文件中的。贴一下可以用的基础版本代码吧~笔者在阅读网上的文章时,看到。

2024-07-06 13:30:13 167

原创 【vscode插件】多行注释

最近在编写C++程序的过程中,笔者发现,vscode默认的多行注释是使用单行注释拼起来的,对于笔者想要突出多行注释,同时便于后续修改的需求无法满足,随体验一下自己开发VSCODE插件。效果就是选中多行文本时,使用Ctrl+/可以使用C++中的多行注释。可以说,整个插件的开发和上线过程非常流畅,基本按照。

2024-07-03 15:04:18 234

原创 【LLVM】LTO学习

文中的代码都是错的,给出的命令行也是错的。但是,上述的文件中的指令也存在报错,还是。真不如参考文献中也是华为的外国员工写的。

2024-06-29 17:50:11 199

原创 【LLVM】PGO学习(2)

接上篇,发现了一个很有趣的点,当只运行了一次true分支,不运行false分支时,编译器不会将两个分支合并,当两个分支都运行时,编译器会将两个分支合并,具体见上一篇文章。也可以在我的代码库,运行make run,输入1 0之后查看只运行一次true分支,不运行false分支的结果。比较好奇如果运行了一次false分支,不运行true分支,会将两条分支的内容进行交换吗?

2024-06-26 16:44:02 108

原创 【LLVM】学习使用PGO优化

笔者在查看PGO优化时看到了本站的,其中代码和命令行部分贴上了序号,且命令行带上了$符号,不便于读者调试。遂将代码重新整理到gitee,在此。

2024-06-26 00:58:45 672 3

原创 【LLVM】‘ffast-math’ and ‘ffp-contract’

看起来关键就是判断-ffp-contract会将contract的值设为最后一个此选项的值,否则的话,如果只指定了-ffast-math但是没有通过-ffp-contract设置值,就会将FPContract设置成。,修改的核心代码部分并不多,可以参考。

2024-06-22 14:34:43 185

原创 【应用开发】uni-app链接mumu模拟器

可以查看当前已经连接的设备。

2024-06-14 17:41:33 121

原创 【LLVM】LLVM out-of-tree方式

我有时间的话,可能会修一下本文提到的第一篇文章,适配NewPassManager,第二篇文章不再修了,笔者以前写过一篇文章,介绍过一位博主写的博客,博主的名字应该是叫“赶走幺蛾子”,需要的读者可以自行搜索阅读。时,发现了一种新的out-of-tree,遗憾的是作者文中的代码已经无法成功编译运行了,遂在网上搜索同类型文章,看到了本站有一篇。我想如果中国的开源生态能够如此发展,真是一件幸事了。,虽然作者是做安全相关的,并不是直接做LLVM,但是我仍然惊讶于作者文笔之流畅清晰,且在作者第三个参考。

2024-06-04 18:08:43 175

原创 【Binaryen】partiallyPrecompute函数梳理

所以是一个任务栈,用来记录需要执行的任务,你可以理解为栈中的内容都是函数指针。Task的定义如下,一个TaskFunc记录需要执行的函数,currp指向当前的Expression,可以理解为AST的一个结点。其实就是新建一个select,true分支变为新的true分支,false分支变为新的false分支,condition不变,然后将其放入stack中,同时添加到modified中。然后是一系列的判断条件,例如是否该select指令发生了修改,其parent结点是否不满足某些情况。

2024-06-04 13:04:20 275

原创 安装LLVM后无法使用FileCheck工具

经查找,原因是笔者安装过多个版本的LLVM,因此LLVM在安装时为工具添加了对应的版本号,因此filecheck命令要切换为FileCheck-19。如题,笔者在使用LLVM提供的FileCheck工具时,报错无法找到命令。

2024-06-03 21:00:09 474

原创 基于飞书机器人跨账号消息提醒

(注意此处是需要添加消息的账号,例如我有一个账号A,但是常用账号是B,这样最终效果就是在保持B账号登录的情况下如果账号A收到了新消息,账号B就会收到机器人的消息提醒。事情的起因是飞书中不同的账号不能同时登录,虽然可以在飞书的账号切换页面看到其他账号下是否有消息提醒(小红点),但是无法实现提醒功能,很不优雅,因此本文尝试提出一种新的方式实现不同账号之间的提醒功能共享。经过调查发现,飞书中可以通过自定义机器人助手编写脚本,不需要写代码,使用流程图和表单,类似于苹果的快捷指令,就可以快速完成脚本的搭建。

2024-05-27 19:55:44 502

原创 【开发总结】WebAssembly计算性能测试(JIT和非JIT版)(2024运行配置方案)

源自这篇,测试时发现有些改动。贴一下。

2024-05-17 12:36:30 361

原创 【LLVM】使用openEuler的LLVM编译并测试Git项目

最近笔者遇到了一个问题,想看一下在大规模软件应用中有多少情况,想使用clang去探测这种情况,这就需要指定自定义的编译器。

2024-05-17 12:28:29 162

原创 【笔记分享】2024年5月7日

硬件功能软件化其实是后摩尔时代的重要趋向,很多东西在硬件上如果不能做的复杂,就通过软件的方式弥补之,这样便于兼容,同时可以提高复杂度。学到了tail recursion的概念,之前在编译器的优化中听过tail recursion的优化概念,今天终于理解了,也就是可以通过对tail recursion这种递归方式直接实现对递归的快速返回。继续看邓博士的课,跳过了RISC-V CPU的两节,一是自己本科的时候已经做过,二是目前对硬件知识不是特别感兴趣。CSCPP,多次听到这个名字,是时候找机会学习一下了。

2024-05-07 14:25:26 259

原创 【开发总结】如何用局域网的设备控制linux的电脑音量

这个问题源于很无聊的一个习惯,如果我想躺在床上玩手机时,我一般会在桌子上摆放我的笔记本电脑,上面播放一部电视剧(通常是大明王朝1566),此时如果我想控制电脑的音量,那么我需要站起来,走到电脑前面,按下键盘上的控制按钮,这很不优雅,于是我在想,能否通过手机控制电脑音量的调节。也就有了此项目。首先,我的电脑环境是linux和windows双系统,常用linux。版本为Ubuntu22.04。这会将音量设置为 50%。你可以更改 50% 的值来设置不同的音量。这会将音频静音或取消静音。

2024-05-05 02:04:05 1016 2

原创 【开发记录】青龙面板设置飞书机器人

现有版本(v2.17.4)存在一个问题,点击保存按钮之后只会发送一条测试消息,但此时青龙面板中部署的代码仍然不能正确发送通知,查询代码之后发现需要通过配置名为FSKEY的环境变量,才能正确启动发送逻辑。生成的webhook可以通过post请求将内容转发到对应的群聊中,这一点与直接使用飞书创建机器人编写Event的方法不同,不需要一台可以公网访问的服务器,也即将服务器部署在局域网中即可。接上篇文章,笔者在写上篇文章时对青龙面板的消息通知功能感兴趣,遂实验之,于是有了这篇文章。

2024-05-04 20:25:15 744

原创 【开发技巧】青龙面板cookie过期

原理其实相当于我最先在手机App上登录JD,然后在浏览器上登录,二者是不冲突的,因此可以共存,相当于两个账号同时登录,而青龙面板使用的是后者,但是当系统发现App账号和网页账号长期共存且网页账号一直高效工作,就会强制将其下线,此时网页端账号仍然是有效的,但是如果你在手机上重新登录就会造成网页端账号失效。(获取教程有很多,在此笔者就不赘述了)但是,在使用过程中笔者发现,很容易出现手机端APP登录的JD账号被退出的情况(大约两天左右),这与代挂的初心就是不相匹配的,因此需要解决之。

2024-05-04 12:56:21 541

原创 【开发工具】pythontutor——在线内存可视化工具

笔者在学习RISC-V时,希望找到一款可视化的内存工具,遗憾目前还未找到。发现了pythontutor这个网站,可以对C++、python等多种语言进行内存可视化。结果似乎是x86架构的,符合小端存储。在Github上找到了一个古早的版本(2018年最终改动),准备添加RISC-V后端,不知道能否成功。,原准备依据开源版本进行RISC-V后端开发,根据网站上的。,似乎该网站所用的当前版本不再开源了。

2024-04-29 10:27:14 528 2

原创 组合设计拉丁方阵部分(Lec04-Lec11)

本学习在上组合设计和组合优化,对拉丁方和仿射平面部分没听懂,在B站找到了一个台湾的老师讲的组合设计课程,本文记录在听此部分课程时的一些笔记。

2024-04-29 10:18:57 576

原创 【开发记录】arm v7配置青龙面板

【代码】【开发记录】arm v7配置青龙面板。

2024-04-27 02:51:22 151

原创 【知识总结】WASI

是讲解WASI的一篇文章,其中的插图非常精彩,存档以备后看。

2024-04-14 12:51:04 171

原创 【代码碎片】WebAssembly实战第八章

运行了一下作者在上述链接中贴出的例子,似乎可以运行,看起来是在主模块中调用了副模块造成的无法正确链接的问题,但是对于这种情况,不知道多个主模块能否适用,已提交Github,蹲个后续。来说明这个问题,看起来似乎没有得到准确的回复。仍然无法通过编译正确运行。作者在Github上也提交了一个。这一章,作者提供的最新。

2024-04-12 17:37:49 224

原创 【代码碎片】《WebAssembly实战》WebAssembly in action第三章作业二

在阅读《WebAssembly实战》时,笔者发现第三章中作者使用的副模块的例子只能通过作者提供的模块运行成功,无法根据现有版本(2024年4月,emcc 3.1.56)编译运行成功,根据浏览器反馈的提示可知,是指定的importObjec的内容缺少,笔者猜测是在WebAssembly的后续更新中增加了某些必填的字段。另外还有一个问题就是使用.c文件中编写的函数时,不需要’_'开头,这也可以通过打印result.instance.exports查看。在英文版的官方论坛中也有类似的问题,贴一下。

2024-04-10 10:31:34 129

原创 【编译分析】MSVC编译器函数修饰的返回值问题

开头,a表示函数名,第一个@表示函数名的结束,第二个@表示命名空间的结束,YA表示调用方式为__cdecl,H表示返回值类型为int,D表示参数类型为char。详细信息可以参考这篇。这也是笔者比较疑惑的一点,既然函数重载不需要考虑返回值类型,那么为什么还要记录这个类型呢?(参数相同且函数名相同但返回值类型不同的函数重载不成立,具体可以参考这个。可以看到,MSVC不仅记录了函数的参数,同时记录了函数的返回值。时,作者提到了MSVC进行函数修饰的结果比较gcc更加复杂。在结果中查看@@可以找到修饰后的函数名。

2024-04-01 21:05:12 252

原创 【开发工具】Ubuntu复制CSDN代码多余符号的去除

通过搜索找到了一种替换为空的删除方式,笔者编写了一个适用于Rust的shell脚本,需要放到Rust的根目录,会自动将src/main.rs中的\u200删除。在Ubuntu中使用CSDN复制的代码时,可能会出现\u200的符号,这个符号会影响代码的编译和运行,因此需要找到一种快速删除这种符号的方法。

2024-03-31 22:09:21 257

原创 【开发总结】Rust的命令行库clap

需要把str转成String,但是在形参部分却不支持.to_string()转换方法,又无法在结构体内部定义变量,查阅GPT发现,可以使用default_value类型直接处理此种情况,因为此时需要传入的是字符串(下一部分将会看到为什么只有字符串才能如此处理)可以看到,default_value默认支持的是OsStr类型的,也即字符串,因此需要将其改为default_value = "1"才能通过编译。最后一段例子3 自定义验证逻辑中有两个->接中文注释的部分,此部分为注释,应该以//开头。

2024-03-31 19:56:35 750

原创 【开发总结】springboot项目创建

时,发现文中创建SpringBoot项目的部分是基于旧的IDEA版本,有些内容已经过时,按照原作者的介绍已经不能正确创建项目,在网上搜索之后发现了。

2024-03-29 11:46:38 184

原创 【开发总结】electron浏览器打开踩坑

遂按照文章中的过程进行复现,原作者的开发环境时mac系统,笔者用的是windows系统,在开发过程中遇到了在浏览器中输入scheme打开应用程序的场景,这个场景在日常生活中也经常用到,例如百度网盘或腾讯会议会从网页跳转到应用。在复现时,笔者的系统发生了报错,遂以为是操作系统的差异性,后来经过测试发现,是由于应用尚未打包并安装到应用程序中,可以理解为一个是Debug版本,一个是Release版本。构建中出现的第二个问题是没有通过编译的问题,采用换源的方法可以解决,具体可以参考。

2024-03-29 11:04:11 817

原创 【语言学习】std::transform函数

如果不理解std::transform的三个参数的关系,就会对第三个参数的lambda表达式理解不了。其实,第三个参数的作用是提供给了一种对第一个参数(std::transform中是前两个参数,分别是begin和end)的一种处理操作。所以第三个参数的lambda表达式的输入对象是第一个参数。时,发现了其中使用了一个函数std::transform(原文对其进行了一层封装)可以看到,对每个元素进行了除2处理。

2024-03-05 21:37:43 329

原创 【语言学习】C++algorithm库的命名空间问题

algorithm中的函数不需要显式地使用std命名空间是因为这些函数通常在标准库头文件中声明。这意味着它们已经位于std命名空间中,因此你可以直接调用它们而无需前缀"std::"。这种设计有助于简化代码并提高可读性,但请注意,这仅适用于标准库中的函数。在定义copy函数的stl_algobase.h中,发现了_GLIBCXX_STD_C::这个宏,其定义在c++config.h中,时,发现一个很有趣的点,原来使用copy和back_inserter时不需要使用std::。可以看到,此处将其定义为std。

2024-03-05 21:20:11 281

原创 学Cuda的一个网站和资源

可以用于对一些cuda的问题进行可视化。

2024-03-05 12:20:36 412

原创 编写LLVM Pass的一个小问题

但是我在使用自己编译的ll文件时,我发现该pass无法正常使用。最后经过测试发现是利用-O0编译产生的ll文件有optnone的flag,需要将其删除,或使用-O1等flag。时发现一个很有趣的细节,官方给出了一个测试用例,此处有一个小问题(%无法复制)。

2024-02-23 20:32:34 239

原创 【LLVM】SCCP设置nuw和nsw的逻辑

可以看到,首先获取两个操作数对应的Range,分别为RangeA和RangeB,然后使用ConstantRange::makeGuaranteedNoWrapRegion方法获取不会溢出的区间范围,判断RangeA是否在该范围内,如果在,则说明不会溢出,可以设置对应的flag。此处注意A的R和L是和直觉相反的,这是因为对于溢出的情况,Upper是比Lower小的,也即Upper反而是左边的。如果第一个是Full或者第二个是empty,直接返回true,这很好理解,同样的,反之返回false。

2024-02-20 19:47:00 638

空空如也

空空如也

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

TA关注的人

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