diff --git a/YaeBlog/source/posts/2021-final.md b/YaeBlog/source/posts/2021-final.md index 619d73a..b80dd36 100644 --- a/YaeBlog/source/posts/2021-final.md +++ b/YaeBlog/source/posts/2021-final.md @@ -23,7 +23,7 @@ tags: 在前12年的学生生涯中,我们都在期待着这一次的暑假,以为在这个没有作业的假期里,我们就可以充分的享受人间的美好。可是,当时我们不知道,这人间的烦恼,可不止作业这一种,无论是突如其来的疫情导致开学延期,还是等待录取时的不安。 虽说在暑假时,拥有了自己的笔记本电脑,可是在高中三年屯下的游戏还是没有玩几个,看来我也是“喜加一”的受害者。虽然在高考后入坑了原神,但是假期间我并没有太过投入的玩。 暑假下定决心要好好的学一学,可是看着我gitee上暑假期间那稀疏的提交,我就知道我又摸了一个暑假的鱼。 - + 即使我想写的很多项目都没有被扎实的推进下来,但是学习的一些的C语言还是让我受益匪浅。 现在看来,这个假期真是,**学也没有学好,耍也没有耍好**的典型。 diff --git a/YaeBlog/source/posts/2021-final/1.png b/YaeBlog/source/posts/2021-final/1.png deleted file mode 100644 index 81022e2..0000000 --- a/YaeBlog/source/posts/2021-final/1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6c35d649045aeb7b80a4d1b18290feabb367a3841d87b727d550dd06566801b6 -size 8340 diff --git a/YaeBlog/source/posts/2021-final/1.webp b/YaeBlog/source/posts/2021-final/1.webp new file mode 100644 index 0000000..d3c2d8b Binary files /dev/null and b/YaeBlog/source/posts/2021-final/1.webp differ diff --git a/YaeBlog/source/posts/2022-final.md b/YaeBlog/source/posts/2022-final.md index 91637e6..5383cfc 100644 --- a/YaeBlog/source/posts/2022-final.md +++ b/YaeBlog/source/posts/2022-final.md @@ -57,11 +57,11 @@ date: 2022-12-30 14:58:12 小小的总结一下:2022年可以算得上是一事无成的一年,还搞砸了不少的事情。在写代码上进展有限,成绩上大幅倒退,说好的六级英语和大学物理竞赛都没有参加,在年末应对疫情进展的时候更是把“不知所措”这个成语诠释的淋漓尽致。 - + 关于今年的人际交往和社会关系,我愿意用QQ2022年年终总结中的一张截屏来总结,这张图片透漏出一种无可救药的悲伤。 - + ## 展望 diff --git a/YaeBlog/source/posts/2022-final/2022-12-30-14-26-19-QQ_Image_1672381538441.jpg b/YaeBlog/source/posts/2022-final/2022-12-30-14-26-19-QQ_Image_1672381538441.jpg deleted file mode 100644 index cc4461f..0000000 --- a/YaeBlog/source/posts/2022-final/2022-12-30-14-26-19-QQ_Image_1672381538441.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a8ba878ab36ef4d9e540be7e8ee83e5c5d980e3968f5c7bea2917fded6ff83d -size 83539 diff --git a/YaeBlog/source/posts/2022-final/2022-12-30-14-26-19-QQ_Image_1672381538441.webp b/YaeBlog/source/posts/2022-final/2022-12-30-14-26-19-QQ_Image_1672381538441.webp new file mode 100644 index 0000000..18f3d35 Binary files /dev/null and b/YaeBlog/source/posts/2022-final/2022-12-30-14-26-19-QQ_Image_1672381538441.webp differ diff --git a/YaeBlog/source/posts/2022-final/2022-12-30-14-28-12-QQ_Image_1672381543836.jpg b/YaeBlog/source/posts/2022-final/2022-12-30-14-28-12-QQ_Image_1672381543836.jpg deleted file mode 100644 index af7e125..0000000 --- a/YaeBlog/source/posts/2022-final/2022-12-30-14-28-12-QQ_Image_1672381543836.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7249babd4c5bdf499db30f92c20f18d4ff4fb4f0f7c2eff3afbf33bf8a37abe2 -size 122345 diff --git a/YaeBlog/source/posts/2022-final/2022-12-30-14-28-12-QQ_Image_1672381543836.webp b/YaeBlog/source/posts/2022-final/2022-12-30-14-28-12-QQ_Image_1672381543836.webp new file mode 100644 index 0000000..b48435e Binary files /dev/null and b/YaeBlog/source/posts/2022-final/2022-12-30-14-28-12-QQ_Image_1672381543836.webp differ diff --git a/YaeBlog/source/posts/2022-summer-vacation.md b/YaeBlog/source/posts/2022-summer-vacation.md index 39f9d13..aec0ef0 100644 --- a/YaeBlog/source/posts/2022-summer-vacation.md +++ b/YaeBlog/source/posts/2022-summer-vacation.md @@ -32,7 +32,7 @@ date: 2022-08-22 15:39:13 - 下定决定要参加下一学期的物理竞赛,但是在听了讲座之后直接决定开学再开始学习,~~我知道我在家没法学习,俗称开摆~~ - 又捡起了`Blender`,并在[Github](https://github.com/tanjian1998/bupt_minecraft)上找到了伟大的前辈们在`Minecraft`里复刻的老校区,希望能用`Blender`渲染几张图当作桌面。 - + > 在此感谢所有为此付出过汗水的前辈们,让我这个即将搬入老校区的萌新能提前一睹老校区的风采。 diff --git a/YaeBlog/source/posts/2022-summer-vacation/result1.png b/YaeBlog/source/posts/2022-summer-vacation/result1.png deleted file mode 100644 index 2d6effc..0000000 --- a/YaeBlog/source/posts/2022-summer-vacation/result1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e69a4cb12a942e16e289babf4c9448ae91725f66915501fdb300924c5c436c9b -size 3225055 diff --git a/YaeBlog/source/posts/2022-summer-vacation/result1.webp b/YaeBlog/source/posts/2022-summer-vacation/result1.webp new file mode 100644 index 0000000..1629632 Binary files /dev/null and b/YaeBlog/source/posts/2022-summer-vacation/result1.webp differ diff --git a/YaeBlog/source/posts/2023-final.md b/YaeBlog/source/posts/2023-final.md index 312097a..5eb692c 100644 --- a/YaeBlog/source/posts/2023-final.md +++ b/YaeBlog/source/posts/2023-final.md @@ -44,7 +44,7 @@ date: 2024-2-29 20:18:19 2023年最令我吃惊的事情是我刷B站的时长: - + 容易计算得出,我一共看了64天的B站,接近六分之一的时间都在看。虽然我确实有着在干活的时候黑听B站和把B站当作音乐播放器的习惯,但是这个时间未免有点太长了。下一年一定要在这个方面做出一定的改变,将更多的时间放在看书上面去,~~虽然写这句话的时候我就在黑听B站~~。 diff --git a/YaeBlog/source/posts/2023-final/image-20240303165826486.png b/YaeBlog/source/posts/2023-final/image-20240303165826486.png deleted file mode 100644 index 0d82809..0000000 --- a/YaeBlog/source/posts/2023-final/image-20240303165826486.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:92bf121700d13fc738d5bcf46d9a814629dbf16b7ca289433506f6e8af70396c -size 118808 diff --git a/YaeBlog/source/posts/2023-final/image-20240303165826486.webp b/YaeBlog/source/posts/2023-final/image-20240303165826486.webp new file mode 100644 index 0000000..fa729ca Binary files /dev/null and b/YaeBlog/source/posts/2023-final/image-20240303165826486.webp differ diff --git a/YaeBlog/source/posts/2024-final.md b/YaeBlog/source/posts/2024-final.md index 1e12ad1..054e3e7 100644 --- a/YaeBlog/source/posts/2024-final.md +++ b/YaeBlog/source/posts/2024-final.md @@ -70,7 +70,7 @@ tags: 不过我的B站观看时长再度增长30%,这好吗,这不好,~~有这么多时间刷B站,鬼知道你匆匆在哪了~~。 - + ### 未来 diff --git a/YaeBlog/source/posts/2024-final/image-20250115171809775.png b/YaeBlog/source/posts/2024-final/image-20250115171809775.png deleted file mode 100644 index d54b6f4..0000000 --- a/YaeBlog/source/posts/2024-final/image-20250115171809775.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6904fe34bcf46c1e9d672f278cedd54a59638cf2ea8d5a909acee9b436955387 -size 633715 diff --git a/YaeBlog/source/posts/2024-final/image-20250115171809775.webp b/YaeBlog/source/posts/2024-final/image-20250115171809775.webp new file mode 100644 index 0000000..464703a Binary files /dev/null and b/YaeBlog/source/posts/2024-final/image-20250115171809775.webp differ diff --git a/YaeBlog/source/posts/big-homework.md b/YaeBlog/source/posts/big-homework.md index d763876..bf28b6a 100644 --- a/YaeBlog/source/posts/big-homework.md +++ b/YaeBlog/source/posts/big-homework.md @@ -44,7 +44,7 @@ date: 2022-07-27 11:34:49 而且采用 `Git`还有一个好处,采用 `Github`的 `Insight`功能可以轻松的看出大家的贡献值()。 - + ## 一些技术上的收获 diff --git a/YaeBlog/source/posts/big-homework/1.png b/YaeBlog/source/posts/big-homework/1.png deleted file mode 100644 index d062e81..0000000 --- a/YaeBlog/source/posts/big-homework/1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2d6244372d81d16899a7536cbd98dfd31c448ada89b899cd302738e3946d7544 -size 43864 diff --git a/YaeBlog/source/posts/big-homework/1.webp b/YaeBlog/source/posts/big-homework/1.webp new file mode 100644 index 0000000..2167bf4 Binary files /dev/null and b/YaeBlog/source/posts/big-homework/1.webp differ diff --git a/YaeBlog/source/posts/build-blog-record.md b/YaeBlog/source/posts/build-blog-record.md index 248b787..ca6e320 100644 --- a/YaeBlog/source/posts/build-blog-record.md +++ b/YaeBlog/source/posts/build-blog-record.md @@ -131,7 +131,7 @@ Hexo init blog ``` Hexo会以blog为名称创建一个博客文件夹,这个文件夹的内容为 - + `node_modules`文件夹是Hexo需要用到的一些npm依赖包的存放地址,`public`文件夹下是由Hexo渲染产生的静态博客文件,`scaffolds`文件夹是博客用到的模板文件,在默认情况下应该有`draft.md`,`page.md`,`post.md`三个模板文件。`themes`是Hexo中可以使用的主题文件。主题也是Hexo一个非常方便的设计,我们可以方便使用其他人编写的Hexo Themes,让自己的博客在不同的风格之间变换。`source`文件夹就是存放我们写作的博客的地方。一般这里面会有两个子文件夹,`_draft`, `_posts`。我们在里面在创建一个`img`文件夹,把自己的头像图片和网站的图标文件都放在里面,在之后的设置的时候使用。 @@ -146,7 +146,7 @@ INFO Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop. 会在本地运行Hexo自带的一台静态博客服务器。我们用浏览器访问http://localhost:4000, 就可以看见Hexo博客的初始界面 - + 这便说明安装成功了,~~可以开香槟了~~ diff --git a/YaeBlog/source/posts/build-blog-record/1.png b/YaeBlog/source/posts/build-blog-record/1.png deleted file mode 100644 index 504bdb6..0000000 --- a/YaeBlog/source/posts/build-blog-record/1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:43c5d93f5f893183366f51c021a5544d973ef8ff1d2ad59c05ad6dc8af6b5255 -size 45244 diff --git a/YaeBlog/source/posts/build-blog-record/1.webp b/YaeBlog/source/posts/build-blog-record/1.webp new file mode 100644 index 0000000..0f6e34a Binary files /dev/null and b/YaeBlog/source/posts/build-blog-record/1.webp differ diff --git a/YaeBlog/source/posts/build-blog-record/2.png b/YaeBlog/source/posts/build-blog-record/2.png deleted file mode 100644 index aa05058..0000000 --- a/YaeBlog/source/posts/build-blog-record/2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d94c3bcc5c7838b4c12a28b96a212910101ee616dd9f581f77a33775ae29aae8 -size 494302 diff --git a/YaeBlog/source/posts/build-blog-record/2.webp b/YaeBlog/source/posts/build-blog-record/2.webp new file mode 100644 index 0000000..d81ce91 Binary files /dev/null and b/YaeBlog/source/posts/build-blog-record/2.webp differ diff --git a/YaeBlog/source/posts/build-dotnet-from-source.md b/YaeBlog/source/posts/build-dotnet-from-source.md index 200a665..87fd851 100644 --- a/YaeBlog/source/posts/build-dotnet-from-source.md +++ b/YaeBlog/source/posts/build-dotnet-from-source.md @@ -7,6 +7,7 @@ tags: --- + 我们编译是这样的,在本平台上编译只要敲三条命令就好了,而交叉编译要考虑的就很多了。 <!--more--> @@ -45,7 +46,7 @@ tags: 通常一份GNU工具链只能针对一个平台进行编译,但是LLVM工具链是一套先天的交叉编译工具链,例如对于`llc`工具,使用`llc --version`命令可以看见该编译器可以生成多种目标平台上的汇编代码: - + 在使用`clang++`时加上`--target=<triple>`指定目标三元组就可以进行交叉编译。 @@ -62,7 +63,7 @@ int main() } ``` - + 看样子交叉编译也不是开箱即用的。最开始我们猜想系统提供的LLVM工具链没有被配置为交叉编译,因此尝试在本地自行编译一套LLVM工具链。 @@ -81,7 +82,7 @@ cmake ../llvm-project.src/llvm \ 编译之后的成果会安装到`/usr/local/`目录下,而在`$PATH`环境变量中`/usr/local`位置将在`/usr`目录之前,因此调用时将会优先调用我们自行编译的LLVM工具链,而不是系统中安装的LLVM工具链。 - + 但是使用这套编译工具链仍然会爆出和之前一样的问题。说明这并不是系统安装LLVM工具链的问题。仔细一想也确实,这里提示找不到对应的头文件应该是找不到RISC-V架构之下的头文件——这里的也是交叉编译的主要问题所在:虽然LLVM工具链宣称自己是原生支持交叉编译的,但是没人宣称说标准库和头文件是原生的。这里我们就需要一个根文件系统来提供这些头文件和各种库文件。 @@ -198,7 +199,7 @@ clang++ --target=riscv64-linux-gnu --sysroot=$ROOTFS_DIR -fuse-ld=lld hello.cpp 第一个问题的回答是Arch Linux安装的LLVM工具是可以交叉编译的。虽然在Arch Linux官方构建LLVM工具链的[构建脚本](https://gitlab.archlinux.org/archlinux/packaging/packages/clang/-/blob/main/PKGBUILD?ref_type=heads)中没有使用`LLVM_TARGETS_TO_BUILD`参数,但是这个参数的默认值是`all`。这一点我们也可以通过实验来验证。 -于是回到编译`llvm`的目录下执行`cat install_manifest.txt | sudo xargs rm`。 +于是回到编译`llvm`的目录下执行`cat install_manifest.txt | sudo xargs rm`。 第二个问题的回答可以使用实验来验证,首先安装`riscv64-linux-gnu-gcc`,然后将根文件系统的位置设置为`/usr/riscv64-linux-gnu`,重新编译上面的你好世界样例。编译之后可以正常执行。 @@ -229,4 +230,4 @@ export ROOTFS_DIR=<rootfs> 但是现在的.NET在RISC-V平台上还是废物一个,甚至连`dotnet new`都跑不过,下一步看看能不能运行一下运行时的测试集看看。 - + diff --git a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824120646587.png b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824120646587.png deleted file mode 100644 index a28a10c..0000000 --- a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824120646587.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:df8608331d9104540c58c3710c96d95d6d569f248ec87a9a2ac13e3a05a54365 -size 189748 diff --git a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824120646587.webp b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824120646587.webp new file mode 100644 index 0000000..8d7e214 Binary files /dev/null and b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824120646587.webp differ diff --git a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824121425007.png b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824121425007.png deleted file mode 100644 index 94f9a09..0000000 --- a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824121425007.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:80b04aa95272ee4a22466a1168ff6dff4343cde50deb97d3a3ad4fcc7ed33793 -size 27785 diff --git a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824121425007.webp b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824121425007.webp new file mode 100644 index 0000000..0c6cde1 Binary files /dev/null and b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824121425007.webp differ diff --git a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824134158262.png b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824134158262.png deleted file mode 100644 index 651f00b..0000000 --- a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824134158262.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8c76e238cf1aefe3033f7e6a15b41c09ee323d63397d670ef35efadb4cf010a0 -size 149831 diff --git a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824134158262.webp b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824134158262.webp new file mode 100644 index 0000000..acafe60 Binary files /dev/null and b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824134158262.webp differ diff --git a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824153514149.png b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824153514149.png deleted file mode 100644 index 4e84f2f..0000000 --- a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824153514149.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0403a9fa66547b6b597ff9ce568bcc6b2c45f57f83499ab14cf1c4405dfde730 -size 30117 diff --git a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824153514149.webp b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824153514149.webp new file mode 100644 index 0000000..55726cc Binary files /dev/null and b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824153514149.webp differ diff --git a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824214145759.png b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824214145759.png deleted file mode 100644 index 2ca0b45..0000000 --- a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824214145759.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:632da4d01c561cb4ec27e6130e3754b6ed82f6e212d6e6f2fefae1d115951419 -size 123971 diff --git a/YaeBlog/source/posts/build-dotnet-from-source/image-20240824214145759.webp b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824214145759.webp new file mode 100644 index 0000000..4555c0c Binary files /dev/null and b/YaeBlog/source/posts/build-dotnet-from-source/image-20240824214145759.webp differ diff --git a/YaeBlog/source/posts/c-include-problems.md b/YaeBlog/source/posts/c-include-problems.md index 5993d12..35ebfff 100644 --- a/YaeBlog/source/posts/c-include-problems.md +++ b/YaeBlog/source/posts/c-include-problems.md @@ -17,7 +17,7 @@ date: 2022-05-08 11:35:19 我项目的结构大致如图所示: - + 在`include`的头文件目录下有两个头文件,`rail.h`和`bus.h`,这两个头文件分别定义了两个结构体`rail_node_t`和`bus_t`。 @@ -68,7 +68,7 @@ typedef struct bus bus_t; 项目的`test`文件夹下是单元测试文件夹,但是在编译的时候会报错 - + 大意就是在一个google test内部的头文件中有几个函数找不到定义,这个函数都位于`io.h`这个头文件中。 diff --git a/YaeBlog/source/posts/c-include-problems/1.png b/YaeBlog/source/posts/c-include-problems/1.png deleted file mode 100644 index db120ad..0000000 --- a/YaeBlog/source/posts/c-include-problems/1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:401d690fe4ac6711decb03bfa27bf35d2045960b2f7bfdbb6964fc9bb0320a50 -size 11997 diff --git a/YaeBlog/source/posts/c-include-problems/1.webp b/YaeBlog/source/posts/c-include-problems/1.webp new file mode 100644 index 0000000..ffc8224 Binary files /dev/null and b/YaeBlog/source/posts/c-include-problems/1.webp differ diff --git a/YaeBlog/source/posts/c-include-problems/2.png b/YaeBlog/source/posts/c-include-problems/2.png deleted file mode 100644 index 4db5f26..0000000 --- a/YaeBlog/source/posts/c-include-problems/2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:865e75431d84961d39bf653598807c82c09209b7236528dc91747b49fb41c361 -size 1538223 diff --git a/YaeBlog/source/posts/c-include-problems/2.webp b/YaeBlog/source/posts/c-include-problems/2.webp new file mode 100644 index 0000000..579382d Binary files /dev/null and b/YaeBlog/source/posts/c-include-problems/2.webp differ diff --git a/YaeBlog/source/posts/cncc-2024.md b/YaeBlog/source/posts/cncc-2024.md index 42d79d9..3a0e19f 100644 --- a/YaeBlog/source/posts/cncc-2024.md +++ b/YaeBlog/source/posts/cncc-2024.md @@ -5,13 +5,14 @@ tags: - 杂谈 --- + 2024年的中国计算机大会于10月24日到10月26日在浙江省金华市东阳市横店镇举办,而鄙人在下不才我,有幸受到实验室资助前去参观学习。 <!--more--> 首先开幕式镇楼。 - + ## 学术上 @@ -21,11 +22,11 @@ tags: 第一个报告是华为庞加莱实验室秦彬娟老师的《异构智算时代的操作系统演进》。报告高屋建瓴,从比较宏观的角度上介绍了当前异构融合操作系统诞生的背景、发展的方向。在报告中重点介绍了一种异构融合操作系统的设计思路:通过三层架构,基于互联池化技术,构建AI时代的融合算力系统。系统中的三层包括:(1)池化基础底层,包括多设备的融合和池化设备虚拟化;(2)异构融合核心子系统,例如异构融合调度系统、异构融合内存和异构融合存储系统;(3)异构核心服务。总的来说,这个报告在一定程度上勾勒出了未来一个异构融合操作系统应有的各项功能,但是显然这一操作系统的实现还存在着明显的困难。 - + 下面一个报告是较为有干货的报告,北京航空航天大学刘瀚骋老师的《异构融合OS及多样性内存管理框架》。报告中介绍了一个称作`FMMU`的系统,是对于异构融合操作系统中内存管理系统的探索。报告中首先介绍了内存池化技术对于异构融合操作系统的重要性,指出分布式共享内存(Distributed Shared Memory)可能是实现内存池化技术的未来。然后介绍了将部分内存管理中的计算卸载到可编程网络硬件中来加速分布式内存访问的新思路。最后在报告中提到了内存管理技术如何解决错误预测和错误回复的问题。虽然在听的时候没太注意,但是现在总结的时候才发现这个报告的思路似乎有点混乱,尤其是最后一点和内存管理系统并没有什么直接的关系,而且这个内存管理系统似乎不是**异构系统**的内存管理,反而是分布式系统的内存管理。不过总的来说,这个报告还是非常实际的,介绍了不少当前异构融合操作系统中的内存管理面临的问题和解决问题的探索。 - + 第三个报告是国防科技大学李东升老师的《异构计算环境下的分布式深度学习训练》。报告首先从李老师的主业——并行计算起手,介绍了深度学习训练过程中主要的各种并行方法,例如数据并行、模型并行和混合并行等,指出目前大模型的并行训练存在着计算/存储/通信难的问题。因此,提出了一个智能模型训练并行任务划分方法:(1)基于符号算子的计算图定义方法;(2)面向Transformer模型的流水线并行任务划分方法;(3)异构资源感知的流水线并行任务划分方法。然后针对分布式模型训练中通信调度存在的通信墙、数据依赖关系复杂等的问题,提出综合词嵌入表的稀疏通信调度技术、流水线并行的P2P通信调度技术、模型计算的统一操作执行引擎和网络链路感知的通信执行引擎的通信调度技术。最后提到了智能模型训练 的内存优化技术,针对现有重计算技术(re-computing)和存储交换(swapping)技术存在的问题,提出了一种面向大型智能模型训练的细粒度内存优化方法`DELTA`。 @@ -49,7 +50,7 @@ Plane讨论没有参加。 第二个报告是南京大学冯新宇老师的《基于仓颉语言的嵌入式DSL开发》,同时冯新宇老师也是仓颉语言的首席架构师。冯老师的这个报告主要聚焦于仓颉语言提供的嵌入式DSL能力,而嵌入式DSL这一设计范式已经在前端开发中展现了不俗的潜力。报告中介绍了嵌入式DSL出现的背景,仓颉中为了提供嵌入式DSL而引入的语法糖、仓颉提供的嵌入式DSL工具箱等。虽然仓颉语言是一个主要面向上层应用开发的语言,但是仓颉中丰富的DSL能力还是给异构编程模型的设计提供了不少的启发。而且目前在各种深度学习编译器中DSL的应用也非常广泛,例如`triton`。 - + 第三个报告是在存算一体的芯片上做数据库的加速,第四个报告是OpenHarmony上`ArkTS`程序的静态分析,都没怎么听。 diff --git a/YaeBlog/source/posts/cncc-2024/image-20241102211959206.png b/YaeBlog/source/posts/cncc-2024/image-20241102211959206.png deleted file mode 100644 index 01a6ff9..0000000 --- a/YaeBlog/source/posts/cncc-2024/image-20241102211959206.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:76119fc2c4cd4f53679f800c41780727ef53a14bdefc594156d177cc49cb6bbb -size 2408090 diff --git a/YaeBlog/source/posts/cncc-2024/image-20241102211959206.webp b/YaeBlog/source/posts/cncc-2024/image-20241102211959206.webp new file mode 100644 index 0000000..fcdf011 Binary files /dev/null and b/YaeBlog/source/posts/cncc-2024/image-20241102211959206.webp differ diff --git a/YaeBlog/source/posts/cncc-2024/image-20241102212355390.png b/YaeBlog/source/posts/cncc-2024/image-20241102212355390.png deleted file mode 100644 index adc38ef..0000000 --- a/YaeBlog/source/posts/cncc-2024/image-20241102212355390.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9b30674b16f2d756eb8df19d33d2de459c194a8f1fb3bad99278adfa5c31e0dd -size 2712347 diff --git a/YaeBlog/source/posts/cncc-2024/image-20241102212355390.webp b/YaeBlog/source/posts/cncc-2024/image-20241102212355390.webp new file mode 100644 index 0000000..e22d204 Binary files /dev/null and b/YaeBlog/source/posts/cncc-2024/image-20241102212355390.webp differ diff --git a/YaeBlog/source/posts/cncc-2024/image-20241102212536635.png b/YaeBlog/source/posts/cncc-2024/image-20241102212536635.png deleted file mode 100644 index 475ac3e..0000000 --- a/YaeBlog/source/posts/cncc-2024/image-20241102212536635.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:43e1c4a59ef2a75b57ce30d0ab780d2f381e74531233c648683bbd2f20136ddf -size 1544073 diff --git a/YaeBlog/source/posts/cncc-2024/image-20241102212536635.webp b/YaeBlog/source/posts/cncc-2024/image-20241102212536635.webp new file mode 100644 index 0000000..5af57da Binary files /dev/null and b/YaeBlog/source/posts/cncc-2024/image-20241102212536635.webp differ diff --git a/YaeBlog/source/posts/cncc-2024/image-20241102212738598.png b/YaeBlog/source/posts/cncc-2024/image-20241102212738598.png deleted file mode 100644 index 5fda1a0..0000000 --- a/YaeBlog/source/posts/cncc-2024/image-20241102212738598.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2b03bf1455dd59785e21e88c5a106f040154f23977c968a68d5f9341e82fb5a1 -size 8559543 diff --git a/YaeBlog/source/posts/cncc-2024/image-20241102212738598.webp b/YaeBlog/source/posts/cncc-2024/image-20241102212738598.webp new file mode 100644 index 0000000..fb95615 Binary files /dev/null and b/YaeBlog/source/posts/cncc-2024/image-20241102212738598.webp differ diff --git a/YaeBlog/source/posts/compile-mediapipe.md b/YaeBlog/source/posts/compile-mediapipe.md index 56efebb..c87ea90 100644 --- a/YaeBlog/source/posts/compile-mediapipe.md +++ b/YaeBlog/source/posts/compile-mediapipe.md @@ -198,7 +198,7 @@ bazel build -c opt --strip=ALWAYS \ 如果在编译的过程中提示缺失`dx.jar`这个文件而且你用的SDK版本还是高于31的,那可能是SDK中缺失了这个文件,可以将SDk降级到30就含有这个文件了。我使用的解决办法比较离奇,我是将30版本的SDK文件中的这个文件软链接过来,解决了这个问题。 - + 编译消耗的时间可能比较的长,耐心等待即可。 @@ -227,7 +227,7 @@ bazel build -c opt //mediapipe/graphs/pose_tracking:pose_tracking_gpu_binary_gra 然后还需要从服务器上下载`tflite`文件,`Pose Tracking`这个解决方案需要两个`tflite`文件,第一个是[pose_detection.tflite](https://storage.googleapis.com/mediapipe-assets/pose_detection.tflite),第二个文件则有三个不同的选择,分别对于解决方案中提供的三个质量版本: - + 下载地址是[pose_landmark_full.tflite](https://storage.googleapis.com/mediapipe-assets/pose_landmark_full.tflite),[pose_landmark_heavy.tflite](https://storage.googleapis.com/mediapipe-assets/pose_landmark_heavy.tflite)和[pose_landmark_lite.tflite](https://storage.googleapis.com/mediapipe-assets/pose_landmark_lite.tflite)。 diff --git a/YaeBlog/source/posts/compile-mediapipe/2023-01-15-22-05-41-Screenshot_20230115_220521.png b/YaeBlog/source/posts/compile-mediapipe/2023-01-15-22-05-41-Screenshot_20230115_220521.png deleted file mode 100644 index b808741..0000000 --- a/YaeBlog/source/posts/compile-mediapipe/2023-01-15-22-05-41-Screenshot_20230115_220521.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b2a53c78a0e68f31fe6a2711de630db64aa1b7d81ca637802103a45102233d99 -size 99702 diff --git a/YaeBlog/source/posts/compile-mediapipe/2023-01-15-22-05-41-Screenshot_20230115_220521.webp b/YaeBlog/source/posts/compile-mediapipe/2023-01-15-22-05-41-Screenshot_20230115_220521.webp new file mode 100644 index 0000000..6f6afc5 Binary files /dev/null and b/YaeBlog/source/posts/compile-mediapipe/2023-01-15-22-05-41-Screenshot_20230115_220521.webp differ diff --git a/YaeBlog/source/posts/compile-mediapipe/2023-01-19-20-20-40-Screenshot_20230119_202008.png b/YaeBlog/source/posts/compile-mediapipe/2023-01-19-20-20-40-Screenshot_20230119_202008.png deleted file mode 100644 index 1fbd658..0000000 --- a/YaeBlog/source/posts/compile-mediapipe/2023-01-19-20-20-40-Screenshot_20230119_202008.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:15b1e6bc0d87f46937650d98703403b0536a7a61f30477418ae03a8b6361c252 -size 26745 diff --git a/YaeBlog/source/posts/compile-mediapipe/2023-01-19-20-20-40-Screenshot_20230119_202008.webp b/YaeBlog/source/posts/compile-mediapipe/2023-01-19-20-20-40-Screenshot_20230119_202008.webp new file mode 100644 index 0000000..2e7e84f Binary files /dev/null and b/YaeBlog/source/posts/compile-mediapipe/2023-01-19-20-20-40-Screenshot_20230119_202008.webp differ diff --git a/YaeBlog/source/posts/computer-architecture-pipeline.md b/YaeBlog/source/posts/computer-architecture-pipeline.md index 6228525..06176f5 100644 --- a/YaeBlog/source/posts/computer-architecture-pipeline.md +++ b/YaeBlog/source/posts/computer-architecture-pipeline.md @@ -1,20 +1,21 @@ --- title: 计算机系统结构——流水线复习 +date: 2024-06-12T20:27:25.0000000 tags: - - 计算机系统结构 - - 学习资料 -date: 2024-06-12 20:27:25 +- 计算机系统结构 +- 学习资料 --- + 让指令的各个执行阶段依次进行运行是一个简单而自然的想法,但是这种方式执行速度慢、运行效率低。因此一个很自然的想法就是将指令重叠起来运行,让执行功能部件被充分的利用起来,这就是**流水线**。 流水线的表示方法有两种。 - + 第一种被称作**连接图**,清晰的表达出了流水线内部的逻辑关系。 - + > 上图中给出了两个流水线中的概念:通过时间和排空时间。其中通过时间又被称作装入时间,是指第一个任务进入流水线到完成的事件;排空时间则相反,是最后一个任务通过流水线的时间。 @@ -40,7 +41,7 @@ date: 2024-06-12 20:27:25 - 静态流水线,同一时间内,多功能流水线的各段只能按照同一种功能的方式连接。 - 动态流水线,同一时间内,多功能流水线的各种可以按照不同的方式连接,执行不同的功能。 - + 按照流水线中是否存在反馈回路分类: @@ -58,7 +59,7 @@ date: 2024-06-12 20:27:25 - 加速比,同一任务,不使用流水线所使用时间与使用流水线所用时间比。 - 效率,流水线设备的利用率。 - + 在设计流水线的过程中存在若干问题。 @@ -68,7 +69,7 @@ date: 2024-06-12 20:27:25 一个典型的五段流水线MIPS流水线: - + diff --git a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184855300.png b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184855300.png deleted file mode 100644 index aa9d483..0000000 --- a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184855300.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:852fa4b226a15ff9e1f34cf13ef37426f4d6b7f37b0123150c99a76ec437c024 -size 23656 diff --git a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184855300.webp b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184855300.webp new file mode 100644 index 0000000..85dddc8 Binary files /dev/null and b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184855300.webp differ diff --git a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184949777.png b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184949777.png deleted file mode 100644 index 8af2134..0000000 --- a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184949777.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2ba0e36747d52eba53e756bac857f19da8c1859aba76c1819142940f6128e82a -size 75273 diff --git a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184949777.webp b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184949777.webp new file mode 100644 index 0000000..ba42005 Binary files /dev/null and b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612184949777.webp differ diff --git a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612190426368.png b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612190426368.png deleted file mode 100644 index 3aa6c00..0000000 --- a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612190426368.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b8a608027cadcfd5e81468e7e52fa38430deed803e52c06fec8168ccb5bb3db5 -size 127594 diff --git a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612190426368.webp b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612190426368.webp new file mode 100644 index 0000000..b44a26b Binary files /dev/null and b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612190426368.webp differ diff --git a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612192700169.png b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612192700169.png deleted file mode 100644 index dc9e6e7..0000000 --- a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612192700169.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0567f8196b2476e6fdcfd72c27bb1cb6cc2b444ff0f3264746d1db37eddc01af -size 46866 diff --git a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612192700169.webp b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612192700169.webp new file mode 100644 index 0000000..49e0ab8 Binary files /dev/null and b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612192700169.webp differ diff --git a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612193301372.png b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612193301372.png deleted file mode 100644 index d49b50b..0000000 --- a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612193301372.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d1ddd98fa16315aff0d31e4989879c730bad698d82920068592ca2d7788cb296 -size 127169 diff --git a/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612193301372.webp b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612193301372.webp new file mode 100644 index 0000000..6484c6e Binary files /dev/null and b/YaeBlog/source/posts/computer-architecture-pipeline/image-20240612193301372.webp differ diff --git a/YaeBlog/source/posts/daily-linux-0.md b/YaeBlog/source/posts/daily-linux-0.md index 98f1486..52e2569 100644 --- a/YaeBlog/source/posts/daily-linux-0.md +++ b/YaeBlog/source/posts/daily-linux-0.md @@ -92,7 +92,7 @@ sudo systemctl enable sddm.service 我目前实现的效果大概长这样: - + 颇有一种`Windows`和`MacOS`杂交的风格。 @@ -106,7 +106,7 @@ sudo systemctl enable sddm.service 先上一张`shell`的系统概览截图: - + 终端模拟器直接使用的`konsole`,目前没有进行改动。 diff --git a/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-28-38-Screenshot_20230112_132829.png b/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-28-38-Screenshot_20230112_132829.png deleted file mode 100644 index 98b6c8e..0000000 --- a/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-28-38-Screenshot_20230112_132829.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:92d829e0fd67280961dc68ed96477c788edfcf639186844ca91f35ed4ac10e74 -size 2874354 diff --git a/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-28-38-Screenshot_20230112_132829.webp b/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-28-38-Screenshot_20230112_132829.webp new file mode 100644 index 0000000..e905735 Binary files /dev/null and b/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-28-38-Screenshot_20230112_132829.webp differ diff --git a/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-36-45-Screenshot_20230112_133628.png b/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-36-45-Screenshot_20230112_133628.png deleted file mode 100644 index 6a74eeb..0000000 --- a/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-36-45-Screenshot_20230112_133628.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e57adb3e2bab147ce042cc51d72483ddb9842e3eda85442b0ad988d660a7012b -size 227688 diff --git a/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-36-45-Screenshot_20230112_133628.webp b/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-36-45-Screenshot_20230112_133628.webp new file mode 100644 index 0000000..565d034 Binary files /dev/null and b/YaeBlog/source/posts/daily-linux-0/2023-01-12-13-36-45-Screenshot_20230112_133628.webp differ diff --git a/YaeBlog/source/posts/daily-linux-2.md b/YaeBlog/source/posts/daily-linux-2.md index 3960298..b17f732 100644 --- a/YaeBlog/source/posts/daily-linux-2.md +++ b/YaeBlog/source/posts/daily-linux-2.md @@ -18,7 +18,7 @@ typora-root-url: daily-linux-2 最近恰好被平铺式的窗口管理器种草,又在B站上看见一个动画绚丽的`wayland`合成器——[Hyprland](https://hyprland.org/),当即脑袋一热,就把`kde`干掉,装上了`hyprland`。 - + 安装`hyprland`的过程非常舒适,`hyprland`被打包为一个单独的二进制文件,使用`pacman`安装之后直接在`tty`下执行: @@ -46,7 +46,7 @@ Hyprland 各种在学习过程中遇到的工具软件:基本上都工作运行良好。当然因为没有设置缩放的问题而导致字体都很小。因为如果在配置文件中设置缩放之后会导致字体发虚。下面的截图就是我将我的2K显示屏设置为150%缩放的效果,~~虽然在截图中的效果不明显~~。目前在常用软件中唯一让我十分不满意的软件是`wps`,使用体验完全无法和`offices`相提并论,目前我正在研究使用`wine`运行`offices`,如果成功了就再水一篇博客庆祝一下。 - + > 最新的进展是使用`wine`没法安装学校提供的`office 2021`,同时我又不愿意使用古老的`office`版本,但是我发现一个称作`onlyoffice`的第三方软件蛮好用的,等我试用一段时间再说。 > diff --git a/YaeBlog/source/posts/daily-linux-2/df4211f6be2724b3b4725f7ce5a4078818844857.avif b/YaeBlog/source/posts/daily-linux-2/df4211f6be2724b3b4725f7ce5a4078818844857.avif new file mode 100644 index 0000000..7290160 Binary files /dev/null and b/YaeBlog/source/posts/daily-linux-2/df4211f6be2724b3b4725f7ce5a4078818844857.avif differ diff --git a/YaeBlog/source/posts/daily-linux-2/df4211f6be2724b3b4725f7ce5a4078818844857.jpg b/YaeBlog/source/posts/daily-linux-2/df4211f6be2724b3b4725f7ce5a4078818844857.jpg deleted file mode 100644 index fe21009..0000000 --- a/YaeBlog/source/posts/daily-linux-2/df4211f6be2724b3b4725f7ce5a4078818844857.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0fe4cb9e1cf9b0dc763aa44ef69d1bec7a42da321461ba9bd70a190e172039ac -size 77851 diff --git a/YaeBlog/source/posts/daily-linux-2/image-20230702205919301.png b/YaeBlog/source/posts/daily-linux-2/image-20230702205919301.png deleted file mode 100644 index 0344fa1..0000000 --- a/YaeBlog/source/posts/daily-linux-2/image-20230702205919301.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:48a0c7ae799eca73de2ed8ed889b7ca6efd4891174ea746ee12bb97c4a2d444f -size 464377 diff --git a/YaeBlog/source/posts/daily-linux-2/image-20230702205919301.webp b/YaeBlog/source/posts/daily-linux-2/image-20230702205919301.webp new file mode 100644 index 0000000..121a862 Binary files /dev/null and b/YaeBlog/source/posts/daily-linux-2/image-20230702205919301.webp differ diff --git a/YaeBlog/source/posts/daily-linux-3.md b/YaeBlog/source/posts/daily-linux-3.md index ae507a4..7e587c1 100644 --- a/YaeBlog/source/posts/daily-linux-3.md +++ b/YaeBlog/source/posts/daily-linux-3.md @@ -53,7 +53,7 @@ date: 2023-09-04 14:47:46 - `Meta+F`全屏应用 - `Meta+W`关闭应用 - + ### Fuck You NVIDIA diff --git a/YaeBlog/source/posts/daily-linux-3/Screenshot_20230904_144149.png b/YaeBlog/source/posts/daily-linux-3/Screenshot_20230904_144149.png deleted file mode 100644 index 3798ab2..0000000 --- a/YaeBlog/source/posts/daily-linux-3/Screenshot_20230904_144149.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0cd5c1c81e8faa1acdfeb3a3fbf65116970ee79fb811c08b23fcf91b1570d64d -size 3049270 diff --git a/YaeBlog/source/posts/daily-linux-3/Screenshot_20230904_144149.webp b/YaeBlog/source/posts/daily-linux-3/Screenshot_20230904_144149.webp new file mode 100644 index 0000000..28f638e Binary files /dev/null and b/YaeBlog/source/posts/daily-linux-3/Screenshot_20230904_144149.webp differ diff --git a/YaeBlog/source/posts/daily-linux-4.md b/YaeBlog/source/posts/daily-linux-4.md index 82b364d..ec61f7d 100644 --- a/YaeBlog/source/posts/daily-linux-4.md +++ b/YaeBlog/source/posts/daily-linux-4.md @@ -1,11 +1,12 @@ --- title: 日用Linux挑战 第4篇 新的开始 +date: 2024-03-09T14:00:00.0000000 tags: - - Linux - - 杂谈 -date: 2024/03/09 14:00:00 +- Linux +- 杂谈 --- + 小步快跑,面向未来。 <!--more--> @@ -18,7 +19,7 @@ date: 2024/03/09 14:00:00 相较于古老但是稳定的`Ext4`文件系统,`Btrfs`对我来说最大的好处便是可以零成本的创建快照,便于在出现错误的时候及时回滚或者直接重装系统。因此,为了方便快照的生成和回滚,我在安装系统时使用**扁平化**的子分区划分方法:即尽力避免出现嵌套的子分区,所有需要快照的分区都处在`/`目录之下: - + - `@`为根分区,挂载在`/`目录之下,打开写时复制; - `@home`为家目录分区,挂载在`/home`目录之下,打开写时复制; @@ -44,7 +45,7 @@ sudo btrfs send /.snapshots/home@20240225 | zstd | ssh root@remote "zstd -d | bt 算起来,我已经和`Wayland`显示协议相爱相杀了整整一年了,从`KDE plasma X`到`Hyprland`,再尝试小众的`labwc`,最后回到了`KDE plasma X`。而在2024年2月29日`KDE plasma`释出6.0版本,将`Wayland`作为默认的显示协议,我也在第一时间更新了版本并使用`wayland`显示协议。现在,我可以比较确定的说,`Wayland`目前已经达到可用的水平了,而且我还是使用`RTX 3060`显卡。 - + 不过相较于`AMDGPU`可以开箱即用,使用`NVIDIA`启动需要配置如下的模块参数: @@ -64,7 +65,7 @@ options nvidia_drm modeset=1 fbdev=1 不过`XWayland`应用程序在使用`NVIDIA`驱动时会存在一个神奇的**同步失败**问题,表现为在`xwayland`中部分控件闪烁,交替显示更新前和更新后的帧,而且这个问题几乎不能被截屏抓到,具体可以见`freedesktop`上的这个[issue](https://gitlab.freedesktop.org/xorg/xserver/-/issues/1317)。虽然这个议题下面有着很长的讨论,还是建议大家完整的看一遍,里面甚至还有: - + 省流:这个议题讨论了在`xserver`中提供显式同步的协议原语,方便图形驱动程序知道什么时候渲染的帧发生了变化。因此这并不是一个`NVIDIA`驱动程序的问题,而是需要将`Linux`显示协议栈从隐式同步迁移到显式同步。但是相关的工作还在开发过程中,因此解决方法有两个: @@ -77,9 +78,9 @@ options nvidia_drm modeset=1 fbdev=1 于是,我就在`Arch Wiki`上学到一条新知识: - + 原来`efi`分区其实只用放`grub`,,, - + diff --git a/YaeBlog/source/posts/daily-linux-4/Screenshot_20240309_115143.png b/YaeBlog/source/posts/daily-linux-4/Screenshot_20240309_115143.png deleted file mode 100644 index f2d5911..0000000 --- a/YaeBlog/source/posts/daily-linux-4/Screenshot_20240309_115143.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:56cb495f0a6f57c1b72eef008faa2b4ef9f572c2c2c2a8c6962cf6df5787fae7 -size 79552 diff --git a/YaeBlog/source/posts/daily-linux-4/Screenshot_20240309_115143.webp b/YaeBlog/source/posts/daily-linux-4/Screenshot_20240309_115143.webp new file mode 100644 index 0000000..e8a264d Binary files /dev/null and b/YaeBlog/source/posts/daily-linux-4/Screenshot_20240309_115143.webp differ diff --git a/YaeBlog/source/posts/daily-linux-4/cfd17cff0701a8e8c69fecf247f17fc1-1709963611271-2.jpg b/YaeBlog/source/posts/daily-linux-4/cfd17cff0701a8e8c69fecf247f17fc1-1709963611271-2.jpg deleted file mode 100644 index 0217928..0000000 --- a/YaeBlog/source/posts/daily-linux-4/cfd17cff0701a8e8c69fecf247f17fc1-1709963611271-2.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9195301a60278833cb62f6971a1cee5ac0a2aa0bc31770b79fe3c08872ac1ae6 -size 574570 diff --git a/YaeBlog/source/posts/daily-linux-4/cfd17cff0701a8e8c69fecf247f17fc1-1709963611271-2.webp b/YaeBlog/source/posts/daily-linux-4/cfd17cff0701a8e8c69fecf247f17fc1-1709963611271-2.webp new file mode 100644 index 0000000..b1b572c Binary files /dev/null and b/YaeBlog/source/posts/daily-linux-4/cfd17cff0701a8e8c69fecf247f17fc1-1709963611271-2.webp differ diff --git a/YaeBlog/source/posts/daily-linux-4/image-20240309130329784.png b/YaeBlog/source/posts/daily-linux-4/image-20240309130329784.png deleted file mode 100644 index c2f9d16..0000000 --- a/YaeBlog/source/posts/daily-linux-4/image-20240309130329784.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:381b47a8cb243352ad1a9f57fab45f49cc1b8bd450aeeab4ed1a699359953669 -size 395168 diff --git a/YaeBlog/source/posts/daily-linux-4/image-20240309130329784.webp b/YaeBlog/source/posts/daily-linux-4/image-20240309130329784.webp new file mode 100644 index 0000000..49eb0f7 Binary files /dev/null and b/YaeBlog/source/posts/daily-linux-4/image-20240309130329784.webp differ diff --git a/YaeBlog/source/posts/daily-linux-4/image-20240309131750535.png b/YaeBlog/source/posts/daily-linux-4/image-20240309131750535.png deleted file mode 100644 index 85658f3..0000000 --- a/YaeBlog/source/posts/daily-linux-4/image-20240309131750535.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:938adf2b3037b870c6291878d9470a2b275f642e8a9fff739b23fada33a27f97 -size 157597 diff --git a/YaeBlog/source/posts/daily-linux-4/image-20240309131750535.webp b/YaeBlog/source/posts/daily-linux-4/image-20240309131750535.webp new file mode 100644 index 0000000..ab6f38d Binary files /dev/null and b/YaeBlog/source/posts/daily-linux-4/image-20240309131750535.webp differ diff --git a/YaeBlog/source/posts/daily-linux-4/image-20240309134847166.png b/YaeBlog/source/posts/daily-linux-4/image-20240309134847166.png deleted file mode 100644 index e61c30a..0000000 --- a/YaeBlog/source/posts/daily-linux-4/image-20240309134847166.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2e76a2dd3c1fa0382410c0e980d42e0c27ed3a0e198036b4b5d65ee69122266c -size 38275 diff --git a/YaeBlog/source/posts/daily-linux-4/image-20240309134847166.webp b/YaeBlog/source/posts/daily-linux-4/image-20240309134847166.webp new file mode 100644 index 0000000..8f3cb1c Binary files /dev/null and b/YaeBlog/source/posts/daily-linux-4/image-20240309134847166.webp differ diff --git a/YaeBlog/source/posts/dotnet-performance-8.md b/YaeBlog/source/posts/dotnet-performance-8.md index e2af79d..6836ce2 100644 --- a/YaeBlog/source/posts/dotnet-performance-8.md +++ b/YaeBlog/source/posts/dotnet-performance-8.md @@ -7,6 +7,7 @@ tags: - 编译原理 --- + JIT编译就一定比AOT编译慢吗? <!--more--> @@ -104,7 +105,7 @@ class Program 首先是为了更好发挥动态PGO的性能,JIT编译器中为分层编译引入了更多的编译层数。需要引入更多编译层数的原因主要有两点。第一,插入各种采样的指令和代码是需要代价的,考虑到第0层编译的主要目标是为了降低编译的时间,提高应用的启动速度,在第0层编译过程中就不能插入太多的采样指令。因此编译器首先增加了一个新的编译层——采样第0层来解决这个问题。大部分的方法将在第一次运行时编译到缺少优化、缺少采样指令的第0层,在运行时发现该方法被调用了多次之后,JIT编译器将这个方法重新编译到采样第0层,再经过一系列的调用之后,JIT编译器将利用采样得到的信息对该方法重新进行编译并优化。第二,在原始编译器模型中使用即时运行(R2R)方法编译的代码不能参加到动态PGO中,尤其是考虑到几乎所有应用程序都会调用的核心库代码是采用R2R的方式进行运行的,如果这部分的代码不能参加动态PGO将不能够完全发挥动态PGO的效果,虽然核心库在提前编译的过程中会使用静态PGO进行一部分的优化。因此JIT编译器为R2R编译好的代码增加了一个新的编译器,在运行时发现这部分代码被调用多次之后将会被JIT编译器编译到含有优化和采样代码的采样第1层,随着调用次数的增加这部分的代码将可以利用采样得到的信息进行优化。下面这张图展现了不同编译方法在运行过程中可能达到的编译层级。 - + JIT编译器也在第0层编译的过程中引入了更多的优化。虽然第0层编译的目的是缩短编译的时间,但是许多的优化可以通过减少需要生成的代码数量来达到这个目的。常量折叠(Constant Folding)就是一个很好的例子。虽然这会让JIT编译器在第0层编译时花费更多的时间同运行时中的虚拟机交互来解析各种变量的类型,但是这可以大量的减少JIT编译器需要生成的代码量,尤其是对于下面这种涉及到类型判断的例子。 @@ -213,7 +214,7 @@ void Run(string name, Action<int> body) | -------- | ------------- | ------------- | ------------ | | 原子指令 | 2,000,000,000 | 2,000,000,000 | 22241.9848ms | | 朴素 | 2,000,000,000 | 220,525,235 | 277.3435ms | -| 随机 | 2,000,000,000 | 2,024,587,268 | 527.5323ms | +| 随机 | 2,000,000,000 | 2,024,,587,268 | 527.5323ms | 从数据上就可以发现,新方法可以在和朴素方法接近的运行时间下获得和使用原子指令接近的实际数值,而且运行时间会随着数值的增加进一步的减少,逐渐逼近朴素方法的运行时间。 @@ -257,7 +258,7 @@ for (int trial = 0; trial < 5; trial++) 程序的输出是5次次采样统计的结果: - + 需要指出的是,虽然在上面的代码中使用和运行时代码中一样的“蓄水池”大小,但是在运行时并没有提前获得所有需要统计的数据,调用的统计数据是由多个不同的运行线程同时写入蓄水池中的。从结果中可以看出,虽然数值上并不准确,但是该算法准确的统计出了各个字符的出现趋势。 @@ -456,170 +457,4 @@ static int ConditionalSelect(bool condition, int whenTrue, int whenFalse) => .NET提供的一种特性就是运行时安全,这其中重要的一点就是对于数组、字符串和切片在运行时进行边界检查。但是这些边界检查就会在实际生成的代码中生成大量的分支判断,这会导致程序运行的效率严重下降。因此如何让编译器在能够保证访问安全的情况下消除掉部分不必要的边界检查是编译器优化中的一个重要课题。 -例如在一个常用数据结构——哈希表中,通常的实现是计算键的哈希值,并利用该哈希值作为下标在数组中获得存储的对象。考虑到哈希值是一个`int`类型的变量,但是哈希表中很少需要存储高达21亿对象,因此往往需要对哈希值取模之后再作为数组的下标,此时取模的值常常就是数组的长度。也就是说,在这种情况下对于数组的访问是不可能出现越界的情况下。因此编译器可以为类似与如下的代码取消访问数组时的边界检查: - -```csharp -public class Tests -{ - private readonly int[] _array = new int[7]; - - public int GetBucket() => GetBucket(_array, 42); - - private static int GetBucket(int[] buckets, int hashcode) => - buckets[(uint)hashcode % buckets.Length]; -} -``` - -同样的,对于下面这些代码,编译器也可以取消访问数组时的边界检查: - -```csharp -public class Tests -{ - private readonly string _s = "\"Hello, World!\""; - - public bool IsQuoted() => IsQuoted(_s); - - private static bool IsQuoted(string s) => - s.Length >= 2 && s[0] == '"' && s[^1] == '"'; -} -``` - -### 常量折叠 - -常量折叠(Constant Folding)同样是一个编译器在生成代码时可以进行的重要优化,这让编译器在计算在编译器时就可以确定的值,而不是让他们留到运行时进行。最朴素的常量折叠——例如计算一个数学表达式的值——在这里不在赘述。在上面介绍函数内联时也涉及到了常量折叠的内容,分层编译的引入也会使得常量折叠的应用范围变广,这些都不在这里重复。 - -进行常量折叠优化时一个重要的问题是“教会”编译器哪些变量是常量。这方面编译器得到的提升有: - -- 可以将一个字面值字符串的长度视为一个常数; -- 在进行空安全的检查时字面值字符串是必定不为空的; -- 编译器在编译时除了可以进行一些简单的数学运算,现在整个`System.Math`命名空间中提供的算法都可以在编译时进行运算; -- `static readonly`类型的字符串和数组长度被视为一个常数; -- `obj.GetType()`现在在JIT编译器明确了解类型的情况下可以被替换为一个常量; -- `DateTime`等时间类型初始化时可以在编译期计算内存存储的时间。例如对于`new DateTime(2023, 9, 1)`将会直接被编译到`new DateTime(0x8DBAA7E629B4000)`。 - -上述这些并不能完全覆盖在.NET 6到.NET 8三个大版本之中引入的所有JIT编译器优化,但是从中也可以一窥编译器优化的精巧之处。首先,编译器的优化并不是一个个独立优化策略的组合,而且各种优化策略的有机组合。方法的内联就是一个典型例子,通过将被调用方法的内容暴露给调用者(或者反过来)让其他的各种优化策略发挥更大的作用。其次,JIT编译器在编译优化方面可以发挥更伟大的作用。通过在程序运行时对于运行环境和程序本身有着更加深刻的理解,JIT编译器可以在运行时发挥出更高的性能。 - -## 内存管理 - -.NET中的垃圾回收器(GC)负责管理应用程序的内存分配和释放。每当有对象新建时,运行时都会将从托管堆为对象分配内存,主要托管堆中还有地址空间,运行时就会从托管堆为对象分配内存。不过内存并不是无限的,垃圾回收器就负责执行垃圾回收来释放一些内存。垃圾回收器的优化引擎会根据所执行的分配来确定执行收回的最佳时机。 - -.NET中内存管理中的一个显著变更为将内存的抽象从段(Segment)修改为区域(Region)。段和区域之前最明显的区别是大小,段是较大的内存——在64位的机器上一个段的大小万网是1GB、2GB或者是4GB,而区域是非常小的单元,在默认情况下只有4MB的大小。从宏观上来说,之前的GC是为每个代的堆维持一个GB级别的内存范围,而现在GC则是维持了许多个较小的内存区域,这些内存区域可以被分配给各个代的堆(或者其他可能涉及的堆)使用。 - -垃圾回收器中还有两个引人注意的特性增加。第一个是动态的代提升和下降(Dynamic Promotion and Demotion,`DPAD`),第二个是动态适应应用程序大小(Dynamic Adaptive To Application Size,`DATAS`)。`DPAD`特性允许GC在工作的过程中动态的设置一个区域的代数,例如直接将一个可能存活时间非常长的对象配置为第2代,而这在之前的GC模型中需要通过两次垃圾回收才能实现。而第二个特性`DATAS`旨在适应应用程序的内存要求,即应用程序堆的大小和长期数据大小大致成正比,即使在不同规格的计算机上执行相同的工作时,运行时中堆的大小也是类似的。相比如下,传统的服务器模式下的GC旨在提高程序的吞吐量,允许内存的分配量基于吞吐量而不是应用程序的大小。`DATAS`对于各种突发类型的工作负载是非常有利的,同时通过允许堆大小按照工作负载的要求进行调整,这将让一些内存首先的环境直接受益。 - -### 无垃圾回收的堆 - -在程序中大量会涉及到使用常量字符串的情形,例如下面这个例子: - -```csharp -public class Tests -{ - public string GetPrefix() => "https://"; -} -``` - -在.NET 7平台上这个方法会被JIT编译器编译之后得到下面这段本机代码: - -```assembly -; Tests.GetPrefix() - mov rax,126A7C01498 - mov rax,[rax] - ret -; Total bytes of code 14 -``` - -在这段代码中使用了两个`mov`指令,其中第一个指令加载存储这个字符串对象地址的地址,第二个读取该地址。从这段本机代码可以看见,尽管已经是在处理一个常量的字符串,但是编译器和运行时仍然需要为这个字符串在堆上分配一个`string`对象:因为一个在堆上分配的对象在GC的控制下会在内存中发生移动,编译器就不能为这个对象使用一个固定的内存地址,需用从一个指定的地址读取该对象所在的地址。如果能让这个常量字符串分配在不会移动的内存区域中就能从编译器和GC两个方面上提高程序运行的效率。 - -为了优化这种生成周期和程序一致对象的内存管理,.NET 8中引入了一个新的堆——没有内存管理的堆。JIT编译器将会保证这些常量类型的对象将会被分配在这个堆中,这种没有GC管理的堆也意味着JIT编译器可以为这些对象使用一个固定的内存地址,在使用时避免掉了一次内存读取。 - - - -将上述提高的示例代码使用.NET 8版本进行编译得到的代码如下,从中也可以看出JIT编译器生成的代码只有一条`mov`指令,避免了一次内存访问。 - -```assembly -; Tests.GetPrefix() - mov rax,227814EAEA8 - ret -; Total bytes of code 11 -``` - -这个没有内存管理的堆引入还可以让其他的类型受益。例如对于`typeof(T)`返回的类型对象,容易想到一个程序集中所有类型对象的生命周期应该是和程序一致的,因此也可以在这个堆上分配所有这些类型对象。`Array.Empty<T>`也可以利用类似的思路分配在这个堆上。 - -### 值类型 - -因为可以避免在堆上分配内存,值类型已经在.NET的高性能代码中得到了广泛的应用,虽然频繁的内存拷贝可能带来额外的性能开销。因此编译器对于值类型的各种优化就显得至关重要。 - -这部分优化中一个引人注目的点是值类型的“推广”(promotion)这里的推广意味着将一个结果划分为组成它的各种字段来区别对待。可以利用下面这个示例代码进行理解: - -```csharp -public class Tests -{ - private ParsedStat _stat; - - [Benchmark] - public ulong GetTime() - { - ParsedStat stat = _stat; - return stat.utime + stat.stime; - } - - internal struct ParsedStat - { - internal int pid; - internal string comm; - internal char state; - internal int ppid; - internal int session; - internal ulong utime; - internal ulong stime; - internal long nice; - internal ulong starttime; - internal ulong vsize; - internal long rss; - internal ulong rsslim; - } -} -``` - -在这段代码中有一个较大的结构类型,其的大小是80个字节。在没有启用推广的条件下进行运行,`GetTime`方法编译得到的本机代码如下所示。在汇编代码中将下载栈上分配一片88字节的空间,再将整个结构体直接复制到当前方法的栈上,在复制完成之后计算两个字段的和并返回。 - -```assembly -; Tests.GetTime() - push rdi - push rsi - sub rsp,58 - lea rsi,[rcx+8] - lea rdi,[rsp+8] - mov ecx,0A - rep movsq - mov rax,[rsp+10] - add rax,[rsp+18] - add rsp,58 - pop rsi - pop rdi - ret -; Total bytes of code 40 -``` - -而在打开推广的情况下运行得到的本机代码如下所示: - -```assembly -; Tests.GetTime() - add rcx,8 - mov rax,[rcx+8] - mov rcx,[rcx+10] - add rax,rcx - ret -; Total bytes of code 16 -``` - -在这段汇编代码中,JIT编译器只复制了两个需要使用的字段到当前方法的栈上,这就大幅减少了值类型在方法调用之前产生内存复制开销。 - -## 还有更多…… - -行文至此,本篇已经字数超过一万字了,毫无疑问这将成为博客历史上最长的一篇文章。在这点字数中我们还只是**简略**的介绍了一下.NET平台过去的几个版本中涉及到的优化,还主要聚焦于JIT编译器和内存管理的部分,在这两个部分之后还有一个线程管理部分也是影响性能的关键组件,同时.NET还提供了一个由数千个API组成的运行库,这些类型中无论是基元类型还是泛型集合类型都获得了若干提升,这些部分共同组成了这几个版本的性能奇迹。 - -本篇文章中的主要内容来自于.NET运行时仓库中的[Book of the Runtime](https://github.com/dotnet/runtime/blob/main/docs/design/coreclr/botr/README.md)和微软开发者博客上的[Performance Improvements in .NET 6](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/)、[Performance Improvements in .NET 7](https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/)和[Performance Improvements in .NET 8](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/#whats-next)等几篇文章,上述没有覆盖到的内容推荐读者这些文章。同时算算时间,.NET 9版本引入的性能提升文章应该也要发布了。 - -回到文章最开始时的问题:JIT编译就一定比AOT编译慢吗?从启动速度上来说,JIT编译当然是完败AOT编译,但是在程序长时间运行,各项设备(JIT编译器、运行时和GC等)预热完成之后,则是鹿死谁手,犹未可知了。 - +例如在一个常用数据结构——哈希表中,通常的实现是计算键的哈希值,并利用该哈希值作为下标在数组中获得存储的对象。考虑到哈希值是一个 \ No newline at end of file diff --git a/YaeBlog/source/posts/dotnet-performance-8/HeapsWhereNetObjectsLive.png b/YaeBlog/source/posts/dotnet-performance-8/HeapsWhereNetObjectsLive.png deleted file mode 100644 index f313abe..0000000 --- a/YaeBlog/source/posts/dotnet-performance-8/HeapsWhereNetObjectsLive.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:51d6acd5b3bb8134b3a56602328f948e391679492753934d7514a2ff10851d25 -size 21885 diff --git a/YaeBlog/source/posts/dotnet-performance-8/image-20240828135354598.png b/YaeBlog/source/posts/dotnet-performance-8/image-20240828135354598.png deleted file mode 100644 index aa123bb..0000000 --- a/YaeBlog/source/posts/dotnet-performance-8/image-20240828135354598.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6274b29f3b6dd75841ad0c36f2595403f9f326f2c90ed5ef062a3366a4f3fd9c -size 62003 diff --git a/YaeBlog/source/posts/dotnet-performance-8/image-20240828135354598.webp b/YaeBlog/source/posts/dotnet-performance-8/image-20240828135354598.webp new file mode 100644 index 0000000..0c41b80 Binary files /dev/null and b/YaeBlog/source/posts/dotnet-performance-8/image-20240828135354598.webp differ diff --git a/YaeBlog/source/posts/dotnet-performance-8/image-20240828155556375.png b/YaeBlog/source/posts/dotnet-performance-8/image-20240828155556375.png deleted file mode 100644 index 763322f..0000000 --- a/YaeBlog/source/posts/dotnet-performance-8/image-20240828155556375.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f38ca49381035d50cea7549223f5b2b2f4ea27eebb286920b67b6f3784a8982b -size 38001 diff --git a/YaeBlog/source/posts/dotnet-performance-8/image-20240828155556375.webp b/YaeBlog/source/posts/dotnet-performance-8/image-20240828155556375.webp new file mode 100644 index 0000000..c11921c Binary files /dev/null and b/YaeBlog/source/posts/dotnet-performance-8/image-20240828155556375.webp differ diff --git a/YaeBlog/source/posts/environment-setting.md b/YaeBlog/source/posts/environment-setting.md index 704c465..cffe479 100644 --- a/YaeBlog/source/posts/environment-setting.md +++ b/YaeBlog/source/posts/environment-setting.md @@ -236,7 +236,7 @@ Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser 再重新运行配置文件就没有问题了。 - + ### PowerShell配置文件 diff --git a/YaeBlog/source/posts/environment-setting/6.png b/YaeBlog/source/posts/environment-setting/6.png deleted file mode 100644 index b422cff..0000000 --- a/YaeBlog/source/posts/environment-setting/6.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4611461d3ae3af16c71f30bed786cd52928889d13e94cbd6e289676c201a352 -size 2794913 diff --git a/YaeBlog/source/posts/environment-setting/6.webp b/YaeBlog/source/posts/environment-setting/6.webp new file mode 100644 index 0000000..c18d7ba Binary files /dev/null and b/YaeBlog/source/posts/environment-setting/6.webp differ diff --git a/YaeBlog/source/posts/genshin-gacha-1.md b/YaeBlog/source/posts/genshin-gacha-1.md index 5b033de..ea8c77f 100644 --- a/YaeBlog/source/posts/genshin-gacha-1.md +++ b/YaeBlog/source/posts/genshin-gacha-1.md @@ -1,11 +1,12 @@ --- title: 原神抽卡研究一 +date: 2022-12-31T13:38:19.0000000 tags: - - 原神 - - 学习资料 -date: 2022-12-31 13:38:19 +- 原神 +- 学习资料 --- + 实际上是“概率论和随机过程”课程的期末小论文。 <!--more--> @@ -14,7 +15,7 @@ date: 2022-12-31 13:38:19 目前在市面上出现了大量以抽奖为核心盈利手段的电子游戏,在这种游戏中,获取游戏中的物品不是明码标价的购买,而是通过参加某种抽奖性质的活动。玩家花费一定金额购买参加活动的机会,每次参加都有一定的概率获得玩家想要获得的物品。在抽奖活动中,游戏设计者还会引入一种被称为 “保底” 的游戏机制:开发者向玩家群体承诺在一定的参加次数之后必然会获得到该物品。例如下面是热门游戏《原神》中获取游戏中角色 “抽奖” 活动的概率公示页面。 - + 在这个 “抽奖” 活动中,玩家可以得到三种等级的物品,在游戏中分别称为 “五星物品”、“四星物品” 和 “三星物品”。在每次的 “抽奖” 活动中,玩家必定会获得上述三种物品中的一种。为了简化问题的讨论,我们现不区分相同等级不同物品之间的不同,只考虑不同星级物品的获取概率。通过概率公示可以知道:五星物品的 “基础概率” 为0.600%,四星物品的 “基础概率” 为 5.100%;五星物品的 “综合概率” 为 1.600%,四星物品的 “综合概率” 为 13.000%。从一个玩家的角度出发,自然会存在两个问题: @@ -50,11 +51,11 @@ date: 2022-12-31 13:38:19 在总共 4842256 次抽卡记录中,获得五星物品的次数为 78493 次,于是: - + 再计算一下每次参加该活动获得四星物品的平均概率:在总共 5000139 次抽卡中,获得四星物品的次数为 653200: - + 不难发现,在误差允许的范围内,计算出来的平均概率和游戏开发者所公布的 “综合概率” 是相同的。当参与这个游戏足够多次时,获取到五星物品和四星物品的数量就可以用这个概率来估计。 @@ -62,15 +63,15 @@ date: 2022-12-31 13:38:19 为了方便讨论,再次将这个 “游戏” 简化为获得五星物品和不获得五星物品两种情况。那么这个 “抽奖” 游戏是否就能被简化为一个概率为 1.6% 的 n 次伯努利实验?不妨假设每次获得五星物品之间相互独立,这样每次获得五星物品都可以认为是首次获得五星物品,这时参加该游戏的次数就会符合概率为 1.6% 的几何分布,而为了符合保底规则,当玩家在参与到第 90 次时仍未获得五星物品,强制给予玩家一个五星的物品。画出实际数据中得到的图像和按照几何分布得到的图像。 - + - + 不难发现假设的猜想和实际情况不相符合。在抽数小于 73 抽时,获得五星物品的概率逐渐降低,从 0.6% 左右一直降低至 0.4% 左右。当抽数大于等于 73 抽时,抽到的概率开始上升,在抽数等于 77 抽时达到最大,大约为 10.4%。随后概率开始下降,在第 91 抽时,概率等于 0。 如果在实际得到的概率关于抽数的图上再作出概率为 0.6% 的几何分布的图像,前73 抽的概率图像和几何分布的图像几乎吻合。也就是说,该抽奖游戏的前 73 抽就是一个符合 P = 0.6% 的几何分布,从第 73 抽开始 “保底” 机制的修正。这就是游戏开发者口中 “基础概率” 的含义:在该抽奖游戏的前数十抽就是一个概率为 0.6% 的伯努利实验。 - + 从大量的实际数据出发,不难发现游戏开发者的申明同实际情况相吻合。 @@ -80,7 +81,7 @@ date: 2022-12-31 13:38:19 直到作者开始写作本文之前,作者都没有意识到本文 3.2 节中的所有结论几乎都基于该假设。限于文章的篇幅原因和个人的能力问题,在本文中未对这个假设作出验证。下面给出一种验证该猜想的方法。为验证获得五星物品之间相互独立,可以通过统计方法验证下面的等式成立。 - + ### 展望 diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-06-36-image.png b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-06-36-image.png deleted file mode 100644 index 0903b38..0000000 --- a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-06-36-image.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2ed01520f4d7e6bde13d6afbe12e8739506bde28d4ae8658c757296e8f435c29 -size 111575 diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-06-36-image.webp b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-06-36-image.webp new file mode 100644 index 0000000..909e2ae Binary files /dev/null and b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-06-36-image.webp differ diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-20-46-image.png b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-20-46-image.png deleted file mode 100644 index bd4c2f9..0000000 --- a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-20-46-image.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:099b6ce419578d9016c7d9644bb6aef0fe3ad73f4402a29c3bf6feaca2914b3a -size 46251 diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-20-46-image.webp b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-20-46-image.webp new file mode 100644 index 0000000..c17c62c Binary files /dev/null and b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-20-46-image.webp differ diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-21-11-image.png b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-21-11-image.png deleted file mode 100644 index 463aac2..0000000 --- a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-21-11-image.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c8ec4f1a2c6c0184c86d8cce52e51e06f376f228c14307eac1e41c4ed6e58ed6 -size 37762 diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-21-11-image.webp b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-21-11-image.webp new file mode 100644 index 0000000..430edfa Binary files /dev/null and b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-21-11-image.webp differ diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-24-26-image.png b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-24-26-image.png deleted file mode 100644 index 6ccee36..0000000 --- a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-24-26-image.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b4aa0365c268a0104d81cc4f0273254d3568f7dd48b05aefc51f7496f81c8512 -size 46392 diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-24-26-image.webp b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-24-26-image.webp new file mode 100644 index 0000000..7d57a36 Binary files /dev/null and b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-13-24-26-image.webp differ diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-20-image.png b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-20-image.png deleted file mode 100644 index b6ddba3..0000000 --- a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-20-image.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:662bfafbae8857dc9a1349c6bf51b8b122a93ebd181ed50e0e4413204f1dc0d0 -size 10280 diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-20-image.webp b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-20-image.webp new file mode 100644 index 0000000..53b6a5f Binary files /dev/null and b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-20-image.webp differ diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-42-image.png b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-42-image.png deleted file mode 100644 index e74abec..0000000 --- a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-42-image.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b9cae7637db04d556cded06019bab4454284b6a2c122382c865573ccd08df175 -size 10578 diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-42-image.webp b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-42-image.webp new file mode 100644 index 0000000..7feea9d Binary files /dev/null and b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-15-59-42-image.webp differ diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-16-00-10-image.png b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-16-00-10-image.png deleted file mode 100644 index c5146bf..0000000 --- a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-16-00-10-image.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5fe30a67495ed6c97cafd4dcfd4432709f871bb86738596ca6a738ea5b4744fe -size 18066 diff --git a/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-16-00-10-image.webp b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-16-00-10-image.webp new file mode 100644 index 0000000..a64aacc Binary files /dev/null and b/YaeBlog/source/posts/genshin-gacha-1/2022-12-31-16-00-10-image.webp differ diff --git a/YaeBlog/source/posts/heterogeneous-programming-model.md b/YaeBlog/source/posts/heterogeneous-programming-model.md index 7e5a702..7e390b8 100644 --- a/YaeBlog/source/posts/heterogeneous-programming-model.md +++ b/YaeBlog/source/posts/heterogeneous-programming-model.md @@ -7,6 +7,7 @@ tags: --- + 随着摩尔定律的逐渐失效,将CPU和其他架构的计算设备集成在片上或者通过高速总线互联构建的异构系统成为了高性能计算的主流。但是在这种系统中,上层应用的设计与实现面临着异构系统中各个设备之间体系结构差异过大、缺乏良好的异构抽象以及统一的编程接口和应用程序的优化难度大等困难。 异构并行编程模型便是解决这些编程和执行效率问题的解决方案。 @@ -25,13 +26,13 @@ tags: 首先是异构系统中各个设备之间的并行计算能力不同。在同构的并行计算系统中,比如多核CPU中,虽然同一CPU的不同核之间、同一核的不同SIMD部件之间可以承担不同粒度的并行计算任务,但是其并行计算的能力是完全相同的。但是在一个典型的异构计算系统,例如CPU、GPU和FPGA组成的异构系统,不同设备的微架构具有本质差异,其并行计算的模式和能力都完全不同,设备之间的特长也完全不同。这种设备之间并行计算能力的差异使得系统中的任务划分和任务映射不再是均一的,而是具有显著的特异性。这种特点虽然也有利于表达实际应用的特点,但是却给异构并行计算模型的设计带来了巨大的困难。 - + 其次是异构系统中加速设备数据分布可配置、设备间数据通信渠道多样性给数据分布和通信带来的困难。在同构并行系统中,CPU片内的存储是对于软件透明的缓存架构,在片外则是一个共享内存模型,因此在这类系统中,数据仅可能分布在片外的共享存储中,具有存储位置单一的特点,也不需要进行显式的通信操作。但是在异构系统中,不仅在单个加速设备内部可能有软件可分配的快速局部存储,设备之间的连接方式差异也很大。目前,大多个加速设备都是通过PCIe总线的方式同CPU进行连接,这使得加速设备无法通过和CPU相同的方式完成地址映射,存在某一设备无法访问另一设备片外存储的问题。这使得异构系统中数据可以分布在CPU、加速设备的片外存储和加速设备的片内多层次局部存储等多个位置,不仅使得编程模型的数据分布问题变得十分复杂,设备间的通信文件也可能需要显式进行。 - + -最后是异构系统中多层次数据共享和多范围同步操作带来的同步困难问题。这也可以认为是上个数据同步问题带来的后继问题:在异构系统中数据可能分布在不同位置的条件下,同步操作需要在众多的位置上保证共享数据的一致性,这使得同步操作的范围变得十分复杂。同时,在一些特定的加速设备中,例如GPU,可能还会有局部的硬件同步机制,这更加提高了在异构系统的同步操作的设计和实现难度。 +最后是异构系统中多层次数据共享和多范围同步操作带来的同步困难问题。这也可以认为是上个数据同步问题带来的后继问题:在异构系统中数据可能分布在不同位置的条件下,同步操作需要在众多的位置上保证共享数据的一致性,这使得同步操作的范围变得十分复杂。同时,在一些特定的加速设备中,�例如GPU,可能还会有局部的硬件同步机制,这更加提高了在异构系统的同步操作的设计和实现难度。 上层应用带来的挑战主要集中在缺少良好的异构抽象和统一的编程接口上。例如在CPU上进行编程时通常使用Java、Python等高级语言,而在进行GPU编程时则使用各种C语言的变体,其中的核心计算函数(Kernel Function)则通常只支持一个C语言的子集,而FPGA这些硬件设备又需要使用硬件描述语言进行编程。 @@ -47,7 +48,7 @@ tags: 从异构并行编程接口的功能角度上来说也可以分成两类:有些接口屏蔽了较多的异构并行编程细节,通常仅给程序员提供显式异构任务划分的机制,而数据分布和通信、同步等的工作由运行时系统负责完成,也有些接口将多数异构系统的硬件细节通过上述机制暴露给程序员使用,这在给编程带来更大自由度的同时带来了使用上的困难。 - + ### 异构任务划分机制研究 @@ -125,7 +126,7 @@ public class Result 采用显示异步数据分布和通信机制的主要问题是普通程序员一般无法充分利用这些接口获得性能上的提升。这通常使用因为加速设备通常采用了大量的硬件加速机制,例如GPU的全局内存访存合并机制,这使得程序员如果没有为数据分配合理的存储位置或者设定足够多的线程,会使得加速的效果大打折扣。因此出现了针对这类显式控制语言的优化方法,例如`CUDA-lite`,这个运行时允许程序元在CUDA程序中加入简单的制导语句,数据分布的相关工作使用`CUDA-lite`的运行时系统完成,降低了CUDA程序的编写难度。 - + 总结一下,为了解决异构系统带来的问题,异构并行编程接口具有如下三个特点: - 异构任务划分机制在传统并行编程模型的基础上增加了"异构特征描述"的维度,用于描述任务在不同设备上的分配情况; @@ -138,7 +139,7 @@ public class Result 异构编程/运行时系统的任务映射机制主要有两种:一类是直接映射,即独立完成并行任务向异构平台映射的工作,另一种是间接映射,即需要借助其他异构编译和运行时系统协助来完成部分任务映射工作。直接映射系统一般在运行时系统中实现,而间接映射通过源到源变换和是运行时分析相结合的方式实现。 - + ### 异构编译/运行时优化 @@ -456,13 +457,13 @@ std::vector<std::vector<int>> cudaCalculateMatrix(const std::vector<std::vector< OpenCL是目前最为典型、发展最好的异构并行编程模型,毕竟其在官网的第一句话就是“为异构系统中并行编程的开放标准“。 - + 从上图的OpenCL工作原理中可以看出,OpenCL和CUDA类似,也采用了Device-Host类型的编程接口。主机代码通常通过普通的C/C++代码进行编写,编译之后在CPU上执行,而设备代码使用一个特定的C语言方言OpenCL C进行编写,这个方言针对并行编程进行了扩展,并提供了一系列封装好的数学计算函数。 设备代码上的编译方法有两种:在线编译和离线编译。其中在线编译就是指在程序运行时由对应设备厂商开发的OpenCL驱动将设备代码编译为在对应设备上运行的可执行代码,离线编译则有两种表现形式,第一种是在线编译的扩展版,由驱动编译得到的可执行程序可以通过API获取并保存下来,当下一需要在同一设备上调用时可以直接使用而不是再次编译,第二种则是完全独立的编译过程,在OpenCL程序运行之前使用单独的编译工具编译得到可执行文件。 - + 在提出离线编译之后,为了让驱动编译好的二进制文件可以在不同的设备之间复用,同时也是支持更为丰富的编译器生态系统,OpenCL的提出者Khronos设计了一种跨设备的、可迁移的中间表示形式[SPIRV](https://www.khronos.org/spir/)。这种中间形式的提出使得编程语言的提出者、编译器的开发人员可以直接将语言编译为`SPIRV`内核,这样就可以在任何支持`SPIRV`的OpenCL驱动上运行。下面将会介绍的`SYCL`和`Julia`语言都是基于`SPIRV`的中间语言进行构建的。`SPIRV`中间语言的提出也扩展了可以支持`OpenCL`的设备范围,现在已经有开发者和公司在探索将`SPIRV`编译到`Vulkan`、`DirectX`和`Metal`等传统意义上的图形API。 @@ -658,7 +659,7 @@ AdaptiveCpp由四个部分组成,分别在不同的C++命名空间中提供。 - AdaptiveCpp Runtime:运行时实际上实现了设备调度、任务图管理和执行、数据管理、后端管理、任务调度和同步等等功能,运行时负责同各种支持后端的运行时交互来实现上述的功能。 -  +  - Compiler:考虑到在用户编写的代码中可能使用一些特定后端的方言,因此普通的C++编译器无法正常编译所有的用户代码。因此用户代码的编译是通过一个名为`acpp`的Python脚本驱动的,这个脚本将各个后端的不同编译器暴露为一个统一的编程接口。 @@ -672,7 +673,7 @@ AdaptiveCpp同时支持多种不同的编译流程。 第一种通用的编译流程显然是泛用性最广的一种编译流程,同时也是AdaptiveCpp推荐的编译流程。 - + 下面是一段使用SYCL进行矩阵乘法加速的代码: @@ -724,7 +725,7 @@ static std::vector<int> syclCalculateMatrix(const std::vector<int>& a, const std const sycl::accessor bBufferAccessor(bBuffer, h, sycl::read_only); const sycl::accessor resultBufferAccessor(resultBuffer, h, sycl::write_only); - h.parallel_for(sycl::nd_range<2>({MATRIX_SIZE, MATRIX_SIZE}, {16, 16}), [=](const sycl::nd_item<2>& item) + h.parallel_fl_for(sycl::nd_range<2>({MATRIX_SIZE, MATRIX_SIZE}, {16, 16}), [=](const sycl::nd_item<2>& item) { const size_t x = item.get_global_id(0); const size_t y = item.get_global_id(1); @@ -849,7 +850,7 @@ static std::vector<int> OpenACCCpuCalculateMatrix(const std::vector<int>& a, con oneAPI是Intel公司提出的一套异构并行编程框架,该框架致力于达成如下几个目标:(1)定义一个跨架构、跨制造商的统一开放软件平台;(2)允许同一套代码可以在不同硬件制造商和加速技术的硬件上运行;(3)提供一套覆盖多个编程领域的库API。为了实现这些目标,oneAPI同上文中已经提到过的开放编程标准SYCL紧密合作,oneAPI也提供了一个SYCL的编译器和运行时;同时oneAPI也提供了一系列API库,包括`oneDPL`、`oneDNN`、`oneTBB`和`oneMKL`等。 - + 我对于oneAPI的理解就是Intel用来对标NVIDIA的CUDA的一套高性能编程工具箱。首先为了和NVIDIA完全闭源的CUDA形成鲜明的对比,Intel选择了OpenCL合作同时开发SYCL,当时也有可能是Intel知道自己的显卡技不如人,如果不兼容市面上其他的部件是没有出路的,同时为了和CUDA丰富的生态竞争,Intel再开发并开源了一系列的`oneXXX`。 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/83ee1d254d638536d0fb4197ff63e758.png b/YaeBlog/source/posts/heterogeneous-programming-model/83ee1d254d638536d0fb4197ff63e758.png deleted file mode 100644 index be2c3a8..0000000 --- a/YaeBlog/source/posts/heterogeneous-programming-model/83ee1d254d638536d0fb4197ff63e758.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:024500276e29f53f65759819e1d9b6c826aa09e91f50e8821d06dcf070560a18 -size 120181 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/83ee1d254d638536d0fb4197ff63e758.webp b/YaeBlog/source/posts/heterogeneous-programming-model/83ee1d254d638536d0fb4197ff63e758.webp new file mode 100644 index 0000000..8ebb28e Binary files /dev/null and b/YaeBlog/source/posts/heterogeneous-programming-model/83ee1d254d638536d0fb4197ff63e758.webp differ diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/9eb06d8be92ddef3db33e040163c67a7.png b/YaeBlog/source/posts/heterogeneous-programming-model/9eb06d8be92ddef3db33e040163c67a7.png deleted file mode 100644 index d1388d4..0000000 --- a/YaeBlog/source/posts/heterogeneous-programming-model/9eb06d8be92ddef3db33e040163c67a7.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5989d69e8fce9d83641034f103c8d4ef21a64f659d0e05660969819aa8bd6818 -size 160181 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/9eb06d8be92ddef3db33e040163c67a7.webp b/YaeBlog/source/posts/heterogeneous-programming-model/9eb06d8be92ddef3db33e040163c67a7.webp new file mode 100644 index 0000000..ca274d7 Binary files /dev/null and b/YaeBlog/source/posts/heterogeneous-programming-model/9eb06d8be92ddef3db33e040163c67a7.webp differ diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214139.png b/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214139.png deleted file mode 100644 index 9b0bc73..0000000 --- a/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214139.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:01d884fe4a429c28e53ee586ab6c7318d6dcc5b92c1891d68d6ce7af4645f431 -size 214725 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214139.webp b/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214139.webp new file mode 100644 index 0000000..90a257f Binary files /dev/null and b/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214139.webp differ diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214939.png b/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214939.png deleted file mode 100644 index ac22d37..0000000 --- a/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214939.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1ec51d9872a4529d68c9b6afc9608d6b8007a57629ba5d117f7560527076d805 -size 82164 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214939.webp b/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214939.webp new file mode 100644 index 0000000..0423e80 Binary files /dev/null and b/YaeBlog/source/posts/heterogeneous-programming-model/Screenshot_20241016_214939.webp differ diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/eab553f9e30d8d866a1ddd201b5e4c85.png b/YaeBlog/source/posts/heterogeneous-programming-model/eab553f9e30d8d866a1ddd201b5e4c85.png deleted file mode 100644 index 7483275..0000000 --- a/YaeBlog/source/posts/heterogeneous-programming-model/eab553f9e30d8d866a1ddd201b5e4c85.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f01cb683d410d1a45edc508a5ed3aeda6f1fcc208d0368a52504350cceb86c31 -size 130457 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/eab553f9e30d8d866a1ddd201b5e4c85.webp b/YaeBlog/source/posts/heterogeneous-programming-model/eab553f9e30d8d866a1ddd201b5e4c85.webp new file mode 100644 index 0000000..fa52f88 Binary files /dev/null and b/YaeBlog/source/posts/heterogeneous-programming-model/eab553f9e30d8d866a1ddd201b5e4c85.webp differ diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020142938110.png b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020142938110.png deleted file mode 100644 index 7cd6736..0000000 --- a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020142938110.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ba84669fd872bf19b665aa673dcd1f03868ed4b4621b9abd460090cb3bb93b9a -size 171981 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020142938110.webp b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020142938110.webp new file mode 100644 index 0000000..b93e72d Binary files /dev/null and b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020142938110.webp differ diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020155656219.png b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020155656219.png deleted file mode 100644 index aa0ad1e..0000000 --- a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020155656219.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a4b20c42dbe0bf434b4224d23dbedee1175d5dfb21e7bfdde314e1af5b2a9586 -size 194091 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020155656219.webp b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020155656219.webp new file mode 100644 index 0000000..f2f67f7 Binary files /dev/null and b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241020155656219.webp differ diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029123308139.png b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029123308139.png deleted file mode 100644 index 774102e..0000000 --- a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029123308139.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9675685943c6124ffdc70023f19c8d043c484d72f62866e6b4e87eca270e0366 -size 76309 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029123308139.webp b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029123308139.webp new file mode 100644 index 0000000..17a29aa Binary files /dev/null and b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029123308139.webp differ diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029163654675.png b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029163654675.png deleted file mode 100644 index 2d64a1a..0000000 --- a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029163654675.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4e38a5bdee31a5ddf11329d6b72ca8b1b2b119f5988166477e8e0ff63a1fa40d -size 195933 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029163654675.webp b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029163654675.webp new file mode 100644 index 0000000..434077a Binary files /dev/null and b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241029163654675.webp differ diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241103162259981.png b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241103162259981.png deleted file mode 100644 index fa92f1c..0000000 --- a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241103162259981.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3ea27cccbb3e4de0b178fe7ea198f19e42603c90e254fca4356315998cf7dfce -size 38819 diff --git a/YaeBlog/source/posts/heterogeneous-programming-model/image-20241103162259981.webp b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241103162259981.webp new file mode 100644 index 0000000..fe79cff Binary files /dev/null and b/YaeBlog/source/posts/heterogeneous-programming-model/image-20241103162259981.webp differ diff --git a/YaeBlog/source/posts/hpc-2025-cpu-architecture.md b/YaeBlog/source/posts/hpc-2025-cpu-architecture.md index a77cb8b..b454fc9 100644 --- a/YaeBlog/source/posts/hpc-2025-cpu-architecture.md +++ b/YaeBlog/source/posts/hpc-2025-cpu-architecture.md @@ -6,6 +6,7 @@ tags: - 高性能计算 --- + How to use the newly available transistors? <!--more--> @@ -54,11 +55,11 @@ Move the complexity of instruction scheduling from the CPU hardware to the softw - Assign instructions to the functional units. - Determine when instructions are initiated placed together into a single word. - + Comparisons between different architecture: - + ## Multi-Core Processor Gala @@ -89,7 +90,7 @@ Hardware approaches to multithreading: - A variation on fine-grained multithreading - + ## Data Parallelism: Vector Processors diff --git a/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184421305.png b/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184421305.png deleted file mode 100644 index 89925dc..0000000 --- a/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184421305.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1e3183c5ad4ee11b6dd924a0ed85ed9a13d3d61a78de741fcb649fe14def6473 -size 158027 diff --git a/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184421305.webp b/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184421305.webp new file mode 100644 index 0000000..f644763 Binary files /dev/null and b/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184421305.webp differ diff --git a/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184732892.png b/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184732892.png deleted file mode 100644 index 90cf137..0000000 --- a/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184732892.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e9c4a4cee93475a3d73f5ed8bc97e5978ae5f099c754b4e94c2b8e5a1a2586cc -size 776759 diff --git a/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184732892.webp b/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184732892.webp new file mode 100644 index 0000000..0fc80e5 Binary files /dev/null and b/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313184732892.webp differ diff --git a/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313190913475.png b/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313190913475.png deleted file mode 100644 index 6f3672e..0000000 --- a/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313190913475.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:65afb4d57b7cd63940786cf43eb5b455e6ab9b19c48257f599a01dc36616352f -size 239063 diff --git a/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313190913475.webp b/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313190913475.webp new file mode 100644 index 0000000..1ae224a Binary files /dev/null and b/YaeBlog/source/posts/hpc-2025-cpu-architecture/image-20250313190913475.webp differ diff --git a/YaeBlog/source/posts/install-pytorch.md b/YaeBlog/source/posts/install-pytorch.md index 11f8314..04304a4 100644 --- a/YaeBlog/source/posts/install-pytorch.md +++ b/YaeBlog/source/posts/install-pytorch.md @@ -1,12 +1,11 @@ --- title: 安装pytorch,来有深度的学习 -date: 2021-11-13 13:21:53 -toc: true -tags: - - 技术笔记 -typora-root-url: 安装pytorch,来有深度的学习 +date: 2021-11-13T13:21:53.0000000 +tags: +- 技术笔记 --- + 鄙人在下不才我精通深度学习框架的安装和卸载。 <!--more--> @@ -40,7 +39,7 @@ typora-root-url: 安装pytorch,来有深度的学习 我们访问`miniconda`的[官方网站](https://docs.conda.io/en/latest/miniconda.html) ,下滑找到最新的`miniconda`安装包下载链接(Latest Miniconda Installer Links)。 - + 按照自己的电脑系统下载相应的安装包就可以了。也不大,就50M出头的样子。 @@ -48,7 +47,7 @@ typora-root-url: 安装pytorch,来有深度的学习 安装完成之后,我们就会发现自己的开始菜单里多出来了两个快捷方式, - + 在上面的那个快捷方式**Anaconda Prompt**是运行含有`conda`命令的CMD的快捷方式,而下面那个**Anaconda Power Shell Prompt**是运行含有`conda`命令的Power shell界面的快捷方式。因为我个人对于power shell更加的熟悉我们就是用下面的那个快捷方式。 这个时候肯定会有人好奇,竟然你都用power shell了,我们为啥不直接使用系统里已经有了的power shell,而要启动这里的这个显得有点奇怪的power shell呢? @@ -57,7 +56,7 @@ typora-root-url: 安装pytorch,来有深度的学习 好,我们运行**Anaconda Power Shell Prompt**,打开了这个窗口 - + 这个窗口的出现就标志着我们已经把`conda`正确的安装在我们的电脑之中了。 @@ -160,7 +159,7 @@ conda update python ### 使用conda安装pytorch 我们访问pytorch的[官方网站](https://pytorch.org/),我们可以轻松在首页就找到这个表格 - + 先简单介绍一下这个表格的每一行,第一行是选择我们安装`pytorch`的版本,是稳定版,预览版,还是长期支持版。第二行是选择我们索要下载的操作系统,这里就默认大家都是用Windows了,第三行是选择我们安装`pytorch`的方式,可以看见有我们刚学习的`conda`,我们很熟悉的`pip`, 还有两种其他的方式。我们选择`conda`。第三行是我们所使用的语言,我们自然选择`python`。然后是第四行,“Compute Platform”, 如果直译的话是计算平台,就是我们选择用来计算的设备。这里就是又一个新的知识点了。一般来说,我们在使用电脑时,都是使用CPU作为计算的主力,显卡(GPU)一般只是用来输出图像,但在深度学习出现后,人们发现显卡原本专精于图形计算的计算力也很适用于深度学习中人工神经网络的计算。为了能够使用GPU的算力,而不是让它仅仅输出图像,我们就得下载相关的工具,这个工具就是CUDA。当然,这种比较强大的能力并不是只要下载一个CUDA就可以拥有的,~~你还得有钱~~你还得拥有一块英伟达的显卡,如果你没有显卡,那你就只能老老实实的使用自己的CPU进行计算了,在表格的第四行选择CPU。而对于我们~~土豪~~有显卡的同学,我们得先确定确定自己电脑上CUDA的版本,打开我们的老朋友power shell,输入 ``` diff --git a/YaeBlog/source/posts/install-pytorch/1.png b/YaeBlog/source/posts/install-pytorch/1.png deleted file mode 100644 index 1ea1f95..0000000 --- a/YaeBlog/source/posts/install-pytorch/1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d1067846d8b27357d9c1be6d25d768137984074de8077445ed0347393bea76d6 -size 90203 diff --git a/YaeBlog/source/posts/install-pytorch/1.webp b/YaeBlog/source/posts/install-pytorch/1.webp new file mode 100644 index 0000000..74fdbf9 Binary files /dev/null and b/YaeBlog/source/posts/install-pytorch/1.webp differ diff --git a/YaeBlog/source/posts/install-pytorch/2.png b/YaeBlog/source/posts/install-pytorch/2.png deleted file mode 100644 index 73551bd..0000000 --- a/YaeBlog/source/posts/install-pytorch/2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:13206dc6972a3ce3f4b23d723f96b6ada5e34f87a051e9de446f2a07c375932d -size 38074 diff --git a/YaeBlog/source/posts/install-pytorch/2.webp b/YaeBlog/source/posts/install-pytorch/2.webp new file mode 100644 index 0000000..8e3d2f2 Binary files /dev/null and b/YaeBlog/source/posts/install-pytorch/2.webp differ diff --git a/YaeBlog/source/posts/install-pytorch/3.png b/YaeBlog/source/posts/install-pytorch/3.png deleted file mode 100644 index 66ee198..0000000 --- a/YaeBlog/source/posts/install-pytorch/3.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e813716f7b1e945e10942c55a7d5ea30ea57a0d374255ed110ed90ffea03633a -size 12042 diff --git a/YaeBlog/source/posts/install-pytorch/3.webp b/YaeBlog/source/posts/install-pytorch/3.webp new file mode 100644 index 0000000..1f38738 Binary files /dev/null and b/YaeBlog/source/posts/install-pytorch/3.webp differ diff --git a/YaeBlog/source/posts/install-pytorch/4.png b/YaeBlog/source/posts/install-pytorch/4.png deleted file mode 100644 index 062df7d..0000000 --- a/YaeBlog/source/posts/install-pytorch/4.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0731b5398952c034de376b9db8980c3bd8a9d8a877a2bf0bb9991015926d80ee -size 39134 diff --git a/YaeBlog/source/posts/install-pytorch/4.webp b/YaeBlog/source/posts/install-pytorch/4.webp new file mode 100644 index 0000000..a1ecc6d Binary files /dev/null and b/YaeBlog/source/posts/install-pytorch/4.webp differ diff --git a/YaeBlog/source/posts/laptop-for-computer.md b/YaeBlog/source/posts/laptop-for-computer.md index 022a018..0650992 100644 --- a/YaeBlog/source/posts/laptop-for-computer.md +++ b/YaeBlog/source/posts/laptop-for-computer.md @@ -1,12 +1,12 @@ --- title: 大学生用啥配置——计算机专业 +date: 2022-06-13T16:17:27.0000000 tags: - - 杂谈 -typora-root-url: laptop-for-computer -date: 2022-06-13 16:17:27 +- 杂谈 --- + > 本文是应B站UP主[远古时代装机猿](https://space.bilibili.com/35359510)发起的[大学生用啥配置](https://www.bilibili.com/video/BV1kZ4y1i7Le)公益活动而写 > > 目前某不知名211大学计算机专业在读 @@ -52,7 +52,7 @@ date: 2022-06-13 16:17:27 目前的性能占用如图所示 - + 在编译代码时CPU占用会有一个短时的提升,不过由于目前编写的程序都较为简单,编译转瞬就完成了。 @@ -62,7 +62,7 @@ date: 2022-06-13 16:17:27 性能的占用如图所示 - + 在刚打开项目和编译整个项目时CPU的占用会上升,但在完成之后,CPU的占用就会回落。 @@ -74,7 +74,7 @@ date: 2022-06-13 16:17:27 性能占用如图所示 - + #### 写网站 @@ -82,7 +82,7 @@ date: 2022-06-13 16:17:27 性能占用如图所示: - + ### 软件的运行需求分析 @@ -90,50 +90,4 @@ date: 2022-06-13 16:17:27 CPU的占用主要出现在打开项目和编译项目上,不同CPU的差别主要体现在需要的时间上,对于实际的使用不能产生比较的区别,~~编译的时间长一点还可以去摸鱼~~。 -而对于内存的需求就比较大了,目前一般的IDE(集成开发环境)一打开就会吃掉1G以上的内存,项目越复杂还可能更大,而且在写代码的同时还会打开一大堆的浏览器标签页查看资料和文档,众所都周知,目前流行的`chrome`浏览器内核在使用内存上是一点都不吝啬,因此推荐16G起步。 - -对于显卡,如果不需要在工作之余进行一些手脑协调训练,那么亮机卡或者核显就是不错的选择,对于写代码的人来说,高U低显才是合适的搭配。 - -之于硬盘,写代码对于硬盘的占用也不算是太大,代码文件基本上都是文本文件,不会占用太多的空间。占用比较大的IDE也一般都在10G以下,~~比起一些学习资料小很多了~~一般512G的固态硬盘就完全足够了。 - -之于屏幕,作为大多数的学习活动都在电脑上进行的专业,把钱花在一块素质良好的屏幕上是完全值得的。与游戏电竞不同的是,在选择屏幕是应该更看重分辨率而不是刷新率,刷新率在60Hz就完全足够了,如果是笔记本较低的刷新率还有助于降低耗电量,增加续航。 - -## 我用啥配置 - -作为一名眼脑协调训练热爱者的我,目前手持的笔记本自然是一台正宗的游戏本——Dell G15 5511,这台笔记本的详细配置如下所示: - -- i7-11800H -- 16G DDR4 3200 -- RTX3060(125W) -- 512G SSD + 1T SSD(自行添加) -- 1080P 165Hz 屏幕 - -下面简单谈谈对于我而言,这台电脑的优势和劣势: - -### 优势 - -- 强大的性能使我的游戏体验还是十分不错的 -- 有一个硬盘位可以自行扩展以存放学习资料 -- 内存不是板载,在后期内存成为瓶颈时可以扩展 -- 拥有数量众多的接口 - -### 劣势 - -- 离电续航较短,在某次考试中由于没有占到有插座的座位而不得不使用核显+60Hz+低亮度来完成2个小时的考试。 -- 旅行重量比较大,官方标称重量2.81千克,再加上一块板砖充电器,带着它出门的体验一言难尽,简直是锻炼身体的必备利器。 -- 风扇的噪音比较大,在图书馆里使用可能给你带来一些尴尬。 - -### 优化 - -> 如果我是今年毕业,我一定选台式机+轻薄本的组合,去年硬件市场的行情打消了我这个蓄谋已久的想法 - -我目前的打算自己再攒一台锐龙6000系轻薄本出来用,否则随着后面专业课程的增加,需要用到笔记本的场景只会越来越多,如果仍然像现在一样几乎限制在寝室里使用,难以为继。毕竟众所都周知啊,寝室并不是一个理想的学习环境,如果想要沉浸式的学习,还是得去图书馆和教室。 - -## 给后来者的建议 - -- 如果你不玩游戏,那么一台性能释放较好的核显轻薄本就是你最好的选择。短时间强大的性能释放足够帮你应付编译等场景下的性能需求,轻薄本不错的续航和较轻的重量又能保证你在学校中能够相对自由的移动 -- 如果你玩游戏,那么还是顺从自己的内心使用游戏本吧!否则你看见同寝室友愉快玩耍时,也会生出再买一台电脑的念头。 -- 如果你不确定或者有点小钱,也可以选择轻薄本加台式机的组合,这也是最让人感到舒适的配置组合,兼具轻薄本的灵活性和台式机的高性能,唯一的缺点是贵,不过那算是我的缺点 -- 内存保底16G,如果能更大当然更好 -- 屏幕素质可以选择的高一些 -- 如果你已经确定自己要选购一台台式机,请确保自己未来就读的学校有足够的空间和供电来确保自己可以愉快的玩耍,否则不要买了轻薄本到了学校傻了眼,“这小破地方怎么放台式机啊”,或者是游戏一开全寝断电 +而对于内存的需求就比较大了,目前一般的IDE(集成开发环境)一打开就会吃掉1G以上的内存,项目越复杂还可能更大,而且在写代码的同时还会打开一大堆� \ No newline at end of file diff --git a/YaeBlog/source/posts/laptop-for-computer/c.png b/YaeBlog/source/posts/laptop-for-computer/c.png deleted file mode 100644 index c32ec4b..0000000 --- a/YaeBlog/source/posts/laptop-for-computer/c.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0f321d75e6ea913d68ab8a74206bd3a7dd086451fc69fde4339d39f8127de259 -size 139253 diff --git a/YaeBlog/source/posts/laptop-for-computer/c.webp b/YaeBlog/source/posts/laptop-for-computer/c.webp new file mode 100644 index 0000000..19c0221 Binary files /dev/null and b/YaeBlog/source/posts/laptop-for-computer/c.webp differ diff --git a/YaeBlog/source/posts/laptop-for-computer/clion.png b/YaeBlog/source/posts/laptop-for-computer/clion.png deleted file mode 100644 index 7b2dd2d..0000000 --- a/YaeBlog/source/posts/laptop-for-computer/clion.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:85f25d0fc05c7fc6e0c50dbda02d053f9127e3510161272f2645333d4b7a9aa2 -size 147636 diff --git a/YaeBlog/source/posts/laptop-for-computer/clion.webp b/YaeBlog/source/posts/laptop-for-computer/clion.webp new file mode 100644 index 0000000..73e9b31 Binary files /dev/null and b/YaeBlog/source/posts/laptop-for-computer/clion.webp differ diff --git a/YaeBlog/source/posts/laptop-for-computer/csharp.png b/YaeBlog/source/posts/laptop-for-computer/csharp.png deleted file mode 100644 index 988e1fd..0000000 --- a/YaeBlog/source/posts/laptop-for-computer/csharp.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:415601b9824037f6d8c0f8b4759c0aa2afa4eafd02212c07e766727996ef30ee -size 151640 diff --git a/YaeBlog/source/posts/laptop-for-computer/csharp.webp b/YaeBlog/source/posts/laptop-for-computer/csharp.webp new file mode 100644 index 0000000..2988ff7 Binary files /dev/null and b/YaeBlog/source/posts/laptop-for-computer/csharp.webp differ diff --git a/YaeBlog/source/posts/laptop-for-computer/web.png b/YaeBlog/source/posts/laptop-for-computer/web.png deleted file mode 100644 index 4468a3e..0000000 --- a/YaeBlog/source/posts/laptop-for-computer/web.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8b889b41f828d79416eb3ccb033fe8a0ab90953aaddd2cb36ea333c560e87195 -size 146745 diff --git a/YaeBlog/source/posts/laptop-for-computer/web.webp b/YaeBlog/source/posts/laptop-for-computer/web.webp new file mode 100644 index 0000000..3c45c6e Binary files /dev/null and b/YaeBlog/source/posts/laptop-for-computer/web.webp differ diff --git a/YaeBlog/source/posts/llvm-naive-0.md b/YaeBlog/source/posts/llvm-naive-0.md index 100a501..4ec7eb4 100644 --- a/YaeBlog/source/posts/llvm-naive-0.md +++ b/YaeBlog/source/posts/llvm-naive-0.md @@ -7,6 +7,7 @@ tags: - 技术笔记 --- + 为什么说LLVM是神? <!--more--> @@ -55,7 +56,7 @@ clang hello.c -o hello 编译完成之后可以正常执行: - + 然后尝试将这个C语言文件编译为LLVM的字节码形式: @@ -71,7 +72,7 @@ clang -O3 -emit-llvm hello.c -c -o hello.bc lli hello.bc ``` - + 可以使用反编译器将字节码转换为人类可读的文本形式: @@ -152,7 +153,7 @@ main: # @main 下面这张图展示了LLVM中各种文件的转换关系和使用的对应工具。 - + ## LLVM IR @@ -268,5 +269,5 @@ entry: 使用`lli`解释器可以直接运行这段代码: - + diff --git a/YaeBlog/source/posts/llvm-naive-0/image-20240819213039409.png b/YaeBlog/source/posts/llvm-naive-0/image-20240819213039409.png deleted file mode 100644 index 39a5267..0000000 --- a/YaeBlog/source/posts/llvm-naive-0/image-20240819213039409.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce8ce7601d7b1d041f25d781622657b2864be26f632bf30740f800e3f15ab63d -size 14787 diff --git a/YaeBlog/source/posts/llvm-naive-0/image-20240819213039409.webp b/YaeBlog/source/posts/llvm-naive-0/image-20240819213039409.webp new file mode 100644 index 0000000..7f09e0c Binary files /dev/null and b/YaeBlog/source/posts/llvm-naive-0/image-20240819213039409.webp differ diff --git a/YaeBlog/source/posts/llvm-naive-0/image-20240819213624927.png b/YaeBlog/source/posts/llvm-naive-0/image-20240819213624927.png deleted file mode 100644 index c9f1cdd..0000000 --- a/YaeBlog/source/posts/llvm-naive-0/image-20240819213624927.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bb82eae62bca2af0eb0c42c0e46a314a1663a161d5573ccd938a5c1d1916e67e -size 9215 diff --git a/YaeBlog/source/posts/llvm-naive-0/image-20240819213624927.webp b/YaeBlog/source/posts/llvm-naive-0/image-20240819213624927.webp new file mode 100644 index 0000000..c880313 Binary files /dev/null and b/YaeBlog/source/posts/llvm-naive-0/image-20240819213624927.webp differ diff --git a/YaeBlog/source/posts/llvm-naive-0/image-20240820221413791.png b/YaeBlog/source/posts/llvm-naive-0/image-20240820221413791.png deleted file mode 100644 index 5d1c75b..0000000 --- a/YaeBlog/source/posts/llvm-naive-0/image-20240820221413791.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:18ff733fbd8f02ece52b3b7fd22f2df94b209f11db9af082125ad448bee6cf07 -size 81957 diff --git a/YaeBlog/source/posts/llvm-naive-0/image-20240820221413791.webp b/YaeBlog/source/posts/llvm-naive-0/image-20240820221413791.webp new file mode 100644 index 0000000..3a7f497 Binary files /dev/null and b/YaeBlog/source/posts/llvm-naive-0/image-20240820221413791.webp differ diff --git a/YaeBlog/source/posts/llvm-naive-0/image-20240825171858276.png b/YaeBlog/source/posts/llvm-naive-0/image-20240825171858276.png deleted file mode 100644 index 6f13bdf..0000000 --- a/YaeBlog/source/posts/llvm-naive-0/image-20240825171858276.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f198e93178db7a98fd7e2c0ffb3fc387d5b8793b37bed1cd0068d9f177a49ba6 -size 13107 diff --git a/YaeBlog/source/posts/llvm-naive-0/image-20240825171858276.webp b/YaeBlog/source/posts/llvm-naive-0/image-20240825171858276.webp new file mode 100644 index 0000000..676e5d3 Binary files /dev/null and b/YaeBlog/source/posts/llvm-naive-0/image-20240825171858276.webp differ diff --git a/YaeBlog/source/posts/minecraft-wayland.md b/YaeBlog/source/posts/minecraft-wayland.md index 645915f..f8d3abe 100644 --- a/YaeBlog/source/posts/minecraft-wayland.md +++ b/YaeBlog/source/posts/minecraft-wayland.md @@ -127,15 +127,15 @@ export __GL_THREADED_OPTIMIZATIONS=0 然后就是设置Minecraft使用我们自行编译的图形库,需要设置`java`启动参数,我使用的[hmcl](https://github.com/huanghongxun/HMCL)这款启动器,可以在设置里面很方便的设置启动参数: - + 但是,如果你使用的是`nvidia`显卡,这里还会遇到一个问题: - + 这个问题从一些资料显示仍然是老黄整的好活: - + 设置环境变量解决,再次强烈推荐[hmcl](https://github.com/huanghongxun/HMCL)启动器,可以方便的设置环境变量。 diff --git a/YaeBlog/source/posts/minecraft-wayland/image-20240105212744116.png b/YaeBlog/source/posts/minecraft-wayland/image-20240105212744116.png deleted file mode 100644 index 4d2005d..0000000 --- a/YaeBlog/source/posts/minecraft-wayland/image-20240105212744116.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0308351e4a4a5387ea689fb5841e89578c5dd8e31a8f173c1842b4fa0819b537 -size 57285 diff --git a/YaeBlog/source/posts/minecraft-wayland/image-20240105212744116.webp b/YaeBlog/source/posts/minecraft-wayland/image-20240105212744116.webp new file mode 100644 index 0000000..c4b7398 Binary files /dev/null and b/YaeBlog/source/posts/minecraft-wayland/image-20240105212744116.webp differ diff --git a/YaeBlog/source/posts/minecraft-wayland/image-20240105213439528.png b/YaeBlog/source/posts/minecraft-wayland/image-20240105213439528.png deleted file mode 100644 index bbcb1e0..0000000 --- a/YaeBlog/source/posts/minecraft-wayland/image-20240105213439528.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b4d43e3eb2635648c755d8ab724a84571fb107f2b627495abdaaa7c058f313be -size 12603 diff --git a/YaeBlog/source/posts/minecraft-wayland/image-20240105213439528.webp b/YaeBlog/source/posts/minecraft-wayland/image-20240105213439528.webp new file mode 100644 index 0000000..35f4515 Binary files /dev/null and b/YaeBlog/source/posts/minecraft-wayland/image-20240105213439528.webp differ diff --git a/YaeBlog/source/posts/minecraft-wayland/image-20240105213942445.png b/YaeBlog/source/posts/minecraft-wayland/image-20240105213942445.png deleted file mode 100644 index af1237d..0000000 --- a/YaeBlog/source/posts/minecraft-wayland/image-20240105213942445.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8379ee6733e6753da5ed2acddfcdff39b60e51d6f04c5e3c577e07ef6792bfc9 -size 153864 diff --git a/YaeBlog/source/posts/minecraft-wayland/image-20240105213942445.webp b/YaeBlog/source/posts/minecraft-wayland/image-20240105213942445.webp new file mode 100644 index 0000000..879ccef Binary files /dev/null and b/YaeBlog/source/posts/minecraft-wayland/image-20240105213942445.webp differ diff --git a/YaeBlog/source/posts/mlir-standalone.md b/YaeBlog/source/posts/mlir-standalone.md index 7943448..1194db3 100644 --- a/YaeBlog/source/posts/mlir-standalone.md +++ b/YaeBlog/source/posts/mlir-standalone.md @@ -6,6 +6,7 @@ tags: - LLVM --- + MLIR是多层次中间表示形式(Multi-Level Intermediate Representation),是LLVM项目中提供的一项新编译器开发基础设施,使得编译器开发者能够在源代码和可执行代码之间定义多层IR来保留程序信息指导编译优化。本博客指导如何创建一个独立(out-of-tree)的MLIR项目。 <!--more--> @@ -35,7 +36,7 @@ cd build cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/home/ricardo/.local/share/llvm-20.1.0" -DLLVM_ENABLE_PROJECTS="llvm;clang;mlir" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLLVM_INSTALL_UTILS=true ../llvm ``` - + 生成构建文件之后使用`ninja`进行构建。 @@ -43,7 +44,7 @@ cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/home/ricardo/ ninja ``` - + 构建在我的i5-13600K上大约需要20分钟。 @@ -93,7 +94,7 @@ cmake -G Ninja -DMLIR_DIR=$LLVM_DIR/lib/cmake/mlir .. 可以顺利通过编译。 - + ### 启用测试 @@ -106,58 +107,11 @@ cmake -G Ninja -DMLIR_DIR=$LLVM_DIR/lib/cmake/mlir .. 很好顺利报错,报错的提示是缺失`FileCheck`、`count`和`not`。 - + 那么按照`README.md`中的提示添加上来自构建目录的`llvm-lit`会怎么样呢? ```shell rm -rf build && mkdir build && cd build export LLVM_BUILD_DIR=/home/ricardo/Downloads/llvm-project-20.1.0.src/build -cmake -G Ninja -DMLIR_DIR=$LLVM_DIR/lib/cmake/mlir -DLLVM_EXTERNAL_LIT=$LLVM_BUILD_DIR/bin/llvm-lit .. -``` - -同样的报错,看来问题不是出在这里。 - -经过对于LLVM文档的仔细研究,发现原来是没有启动这个变量: - - - -遂修改最初的LLVM编译指令。 - -重新运行来自`README.md`的构建文件生成指令之后,测试也完美运行通过: - -```shell -ninja test-standalone -``` - - - -不过这个还是有一点令我不是特别满意,这依赖了一个来自于构建目录的工具`llvm-lit`,如果我编译安装的时候眼疾手快的删除了编译目录不就完蛋了。而且我都**standalone**了还依赖似乎有点说不过去? - -于是发现了一篇从`pip`上下载使用`llvm-lit`的[博客](https://medium.com/@mshockwave/using-llvm-lit-out-of-tree-5cddada85a78)和一个LLVM Discourse上面的[帖子](https://discourse.llvm.org/t/running-llvm-lit-on-external-project-test-file-derived-from-standalone-fails/67787),遂进行尝试。 - -首先在当前目录下创建一个虚拟环境,并下载安装`llvm-lit`。 - -```shell -python -m venv .llvm-lit -source .llvm-lit/bin/activate -pip install lit -``` - -~~不过这个库似乎没有提供运行入口点,需要我们手动创建一个可执行的`python`文件:~~ - -```python -#!/usr/bin/env python -from lit.main import main -if __name__ == '__main__': - main() -``` - -经哥们纠正说`lit`包在某个版本之后会安装`lit`的可执行文件,在安装之后可以直接在命令行调用`lit`。因此在激活虚拟环境之后,`cmake`中直接在`LLVM_EXTERNAL_LIT`配置为`$(which lit)`即可。 - -```shell -cmake -G Ninja -DMLIR_DIR=$LLVM_DIR/lib/cmake/mlir -DLLVM_EXTERNAL_LIT=$(which lit) .. -ninja test-standalone -``` - - +cmake -G Ninja -DMLIR_DIR=$LLVM_DIR/lib/cmake/mlir -DLLVM_EXTE \ No newline at end of file diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319192618697.png b/YaeBlog/source/posts/mlir-standalone/image-20250319192618697.png deleted file mode 100644 index 32d3974..0000000 --- a/YaeBlog/source/posts/mlir-standalone/image-20250319192618697.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dce1e3bf8f40cb65ab1a75bd2640d8f40573c977de20c748d9ece4d3efbeb791 -size 76812 diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319192618697.webp b/YaeBlog/source/posts/mlir-standalone/image-20250319192618697.webp new file mode 100644 index 0000000..359a398 Binary files /dev/null and b/YaeBlog/source/posts/mlir-standalone/image-20250319192618697.webp differ diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319194742171.png b/YaeBlog/source/posts/mlir-standalone/image-20250319194742171.png deleted file mode 100644 index c03dbce..0000000 --- a/YaeBlog/source/posts/mlir-standalone/image-20250319194742171.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:41c2aae547c0d4ab2ccd520bc7bb914222a95dfdb879f0166e624fa7edbccb79 -size 26105 diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319194742171.webp b/YaeBlog/source/posts/mlir-standalone/image-20250319194742171.webp new file mode 100644 index 0000000..e534316 Binary files /dev/null and b/YaeBlog/source/posts/mlir-standalone/image-20250319194742171.webp differ diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319202218503.png b/YaeBlog/source/posts/mlir-standalone/image-20250319202218503.png deleted file mode 100644 index a797831..0000000 --- a/YaeBlog/source/posts/mlir-standalone/image-20250319202218503.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:270725669a377f83b2c134272f0f5489411ef549d8997600b3acb1bd37aac85f -size 19846 diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319202218503.webp b/YaeBlog/source/posts/mlir-standalone/image-20250319202218503.webp new file mode 100644 index 0000000..b584435 Binary files /dev/null and b/YaeBlog/source/posts/mlir-standalone/image-20250319202218503.webp differ diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319202553644.png b/YaeBlog/source/posts/mlir-standalone/image-20250319202553644.png deleted file mode 100644 index d8c5e37..0000000 --- a/YaeBlog/source/posts/mlir-standalone/image-20250319202553644.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f0398124dda06e47933e7631f3c1363a21eb3b32db05c709ba157819da69fa6b -size 114678 diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319202553644.webp b/YaeBlog/source/posts/mlir-standalone/image-20250319202553644.webp new file mode 100644 index 0000000..419e251 Binary files /dev/null and b/YaeBlog/source/posts/mlir-standalone/image-20250319202553644.webp differ diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319204057832.png b/YaeBlog/source/posts/mlir-standalone/image-20250319204057832.png deleted file mode 100644 index 57dff91..0000000 --- a/YaeBlog/source/posts/mlir-standalone/image-20250319204057832.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bb677444bdc074b20d795d1ab134344e73082b3be206cb5507eb8ddc9677b679 -size 18618 diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319204522857.png b/YaeBlog/source/posts/mlir-standalone/image-20250319204522857.png deleted file mode 100644 index 224d2ea..0000000 --- a/YaeBlog/source/posts/mlir-standalone/image-20250319204522857.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f0f8813f97e766aaf1f0fe67f1ff5d4c21d4584ed677de08da2edc9bca222a1f -size 48105 diff --git a/YaeBlog/source/posts/mlir-standalone/image-20250319205520649.png b/YaeBlog/source/posts/mlir-standalone/image-20250319205520649.png deleted file mode 100644 index 910ed77..0000000 --- a/YaeBlog/source/posts/mlir-standalone/image-20250319205520649.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:07320dbbb252cbf10e3ccde1b2ed06a1aed35dd128932cebdba387d9f88e599a -size 37427 diff --git a/YaeBlog/source/posts/parser-combinator-performance.md b/YaeBlog/source/posts/parser-combinator-performance.md index fe49651..f3f260c 100644 --- a/YaeBlog/source/posts/parser-combinator-performance.md +++ b/YaeBlog/source/posts/parser-combinator-performance.md @@ -146,7 +146,7 @@ public class GrammarParserBenchmark 在对原始数据进行数据处理之后我们绘制了如下的图。图中的横轴是输入测试文件的编号,图中的纵轴是`CanonSharp`解析器和`Canon`解析器运行时间的比值。从图中可以看出`CanonSharp`解析器的运行时间大约是`Canon`解析器运行时间的65到75倍,在某些极端的情况下可能会达到90倍。 - + ## 结论 diff --git a/YaeBlog/source/posts/parser-combinator-performance/image-20240819140523087.png b/YaeBlog/source/posts/parser-combinator-performance/image-20240819140523087.png deleted file mode 100644 index a06cdf6..0000000 --- a/YaeBlog/source/posts/parser-combinator-performance/image-20240819140523087.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a34416d22a7b254db9904d2bb5ec5b7082a76df514c0316812f3477618f5c5eb -size 30728 diff --git a/YaeBlog/source/posts/parser-combinator-performance/image-20240819140523087.webp b/YaeBlog/source/posts/parser-combinator-performance/image-20240819140523087.webp new file mode 100644 index 0000000..98adc06 Binary files /dev/null and b/YaeBlog/source/posts/parser-combinator-performance/image-20240819140523087.webp differ diff --git a/YaeBlog/source/posts/parser-combinator.md b/YaeBlog/source/posts/parser-combinator.md index baf2b98..cc72c2d 100644 --- a/YaeBlog/source/posts/parser-combinator.md +++ b/YaeBlog/source/posts/parser-combinator.md @@ -402,7 +402,7 @@ public class C { - + 跳过组合子的实现则是使用我们之前提过的修改组合子(Fix Parser)进行的。 @@ -454,9 +454,9 @@ public static Parser<TToken, IEnumerable<T>> Quote<TToken, T, TLeft, TRight>(thi Pascal-S语言的词法约定如下所示: - + - + 据此,我们可以开始编写对应的词法分析器。首先给出一个词法令牌的规定,将词法令牌分类为: diff --git a/YaeBlog/source/posts/parser-combinator/image-20240813214315576.png b/YaeBlog/source/posts/parser-combinator/image-20240813214315576.png deleted file mode 100644 index 3cae470..0000000 --- a/YaeBlog/source/posts/parser-combinator/image-20240813214315576.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c8565dc29005087be0fff55f3c56331cdcc70cc977ccbf9ef8ae047f90e5b8f3 -size 29655 diff --git a/YaeBlog/source/posts/parser-combinator/image-20240813214315576.webp b/YaeBlog/source/posts/parser-combinator/image-20240813214315576.webp new file mode 100644 index 0000000..e651a99 Binary files /dev/null and b/YaeBlog/source/posts/parser-combinator/image-20240813214315576.webp differ diff --git a/YaeBlog/source/posts/parser-combinator/image-20240813220521028.png b/YaeBlog/source/posts/parser-combinator/image-20240813220521028.png deleted file mode 100644 index dc4ba0b..0000000 --- a/YaeBlog/source/posts/parser-combinator/image-20240813220521028.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:608d183ed3511d9c42ad2cd79f576c42609c99fb94a3014f8c841d5d95bf6a6d -size 164153 diff --git a/YaeBlog/source/posts/parser-combinator/image-20240813220521028.webp b/YaeBlog/source/posts/parser-combinator/image-20240813220521028.webp new file mode 100644 index 0000000..1fda2c0 Binary files /dev/null and b/YaeBlog/source/posts/parser-combinator/image-20240813220521028.webp differ diff --git a/YaeBlog/source/posts/parser-combinator/image-20240813220530717.png b/YaeBlog/source/posts/parser-combinator/image-20240813220530717.png deleted file mode 100644 index 7f01189..0000000 --- a/YaeBlog/source/posts/parser-combinator/image-20240813220530717.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3db9d6b10173fd0bfa8dab9ae7c52b4f4ac151d2f2322cf34c055029e1560e69 -size 106064 diff --git a/YaeBlog/source/posts/parser-combinator/image-20240813220530717.webp b/YaeBlog/source/posts/parser-combinator/image-20240813220530717.webp new file mode 100644 index 0000000..254f8d3 Binary files /dev/null and b/YaeBlog/source/posts/parser-combinator/image-20240813220530717.webp differ diff --git a/YaeBlog/source/posts/program-design-introduction.md b/YaeBlog/source/posts/program-design-introduction.md index 1171fdd..7dabd70 100644 --- a/YaeBlog/source/posts/program-design-introduction.md +++ b/YaeBlog/source/posts/program-design-introduction.md @@ -1,18 +1,19 @@ --- title: 程序设计与计算导论笔记 -date: 2021-11-17 16:38:30 +date: 2021-11-17T16:38:30.0000000 tags: - - 学习资料 +- 学习资料 --- + 直接扒的老黄的PPT ,简直毫无参考价值。 不保证笔记的绝对正确性。 如果导致考试爆炸,不承担任何责任。 <!--more--> ## 第一章——程序设计概论 - + ## 第二章——C语言概述 - - + + diff --git a/YaeBlog/source/posts/program-design-introduction/1.png b/YaeBlog/source/posts/program-design-introduction/1.png deleted file mode 100644 index 6253516..0000000 --- a/YaeBlog/source/posts/program-design-introduction/1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6c1ff62a089d129cd7f1d62977829d2625627a758725aa5171af9bbddb61e1b0 -size 263019 diff --git a/YaeBlog/source/posts/program-design-introduction/1.webp b/YaeBlog/source/posts/program-design-introduction/1.webp new file mode 100644 index 0000000..5053649 Binary files /dev/null and b/YaeBlog/source/posts/program-design-introduction/1.webp differ diff --git a/YaeBlog/source/posts/program-design-introduction/2.png b/YaeBlog/source/posts/program-design-introduction/2.png deleted file mode 100644 index 240ecbf..0000000 --- a/YaeBlog/source/posts/program-design-introduction/2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:700eff5428a635793910f8058dd83c395f661f68497c0a5e7f780b03cc5c9081 -size 315995 diff --git a/YaeBlog/source/posts/program-design-introduction/2.webp b/YaeBlog/source/posts/program-design-introduction/2.webp new file mode 100644 index 0000000..2cab7f3 Binary files /dev/null and b/YaeBlog/source/posts/program-design-introduction/2.webp differ diff --git a/YaeBlog/source/posts/program-design-introduction/3.png b/YaeBlog/source/posts/program-design-introduction/3.png deleted file mode 100644 index 64b21dc..0000000 --- a/YaeBlog/source/posts/program-design-introduction/3.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e4a7ac08ebc2f1c524b9c0b1eefc97d5f9a855251f36cab44be81d901b1ea1f -size 686513 diff --git a/YaeBlog/source/posts/program-design-introduction/3.webp b/YaeBlog/source/posts/program-design-introduction/3.webp new file mode 100644 index 0000000..574f1f4 Binary files /dev/null and b/YaeBlog/source/posts/program-design-introduction/3.webp differ diff --git a/YaeBlog/source/posts/qt-learning.md b/YaeBlog/source/posts/qt-learning.md index c18cf5e..20bf6ca 100644 --- a/YaeBlog/source/posts/qt-learning.md +++ b/YaeBlog/source/posts/qt-learning.md @@ -45,7 +45,7 @@ errorMsg.obj : error LNK2001: unresolved external symbol "public: virtual int __ - 在`CMakeLists.txt`文件中需要定义`set(CMAKE_AUTOMOC ON)` - 在包含这个头文件的地方需要将头文件的名称改为预处理之后的名称`moc_*.cpp`,如下图所示 - + ## Qt Designer diff --git a/YaeBlog/source/posts/qt-learning/1.png b/YaeBlog/source/posts/qt-learning/1.png deleted file mode 100644 index e5e118a..0000000 --- a/YaeBlog/source/posts/qt-learning/1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:44d4b15d38af85412c9a7e502a502afaa9bac3c08b91db89207edfe90ee9ea1f -size 52016 diff --git a/YaeBlog/source/posts/qt-learning/1.webp b/YaeBlog/source/posts/qt-learning/1.webp new file mode 100644 index 0000000..f89e0e3 Binary files /dev/null and b/YaeBlog/source/posts/qt-learning/1.webp differ diff --git a/YaeBlog/source/posts/question-in-install-vs-2019.md b/YaeBlog/source/posts/question-in-install-vs-2019.md index 4abbaf6..cbceb64 100644 --- a/YaeBlog/source/posts/question-in-install-vs-2019.md +++ b/YaeBlog/source/posts/question-in-install-vs-2019.md @@ -12,7 +12,7 @@ tags: > 无他,就是太穷了。<br> 在点击下载链接之后,跳转到了感谢下载的界面。<br> - + 上面清楚的写着,下载将很快开始。 在经过漫长的等待之后,我下载下来了这个东西 >vs_community__355502915.1625217430.exe @@ -24,7 +24,7 @@ tags: >不可能,微软的软件不会出错,一定是我自己选错了。 我立刻卸载了电脑上的vs2017和Visual Studio Installer,再次前往vs的[官网](https://visualstudio.microsoft.com/zh-hans/vs/),这次我前检查后检查,确定自己下载的是Visual Studio 2019的Community版本,在单击了下载链接之后,我又跳转到了感谢下载的界面。 - + 但是这次,在令人十分无语的等待之后,<strong>我不得不点了下单击此处以重试</strong>。 在一段令人紧张的等待之后,Visual Studio Installer安装好了,我也失望的发现,我安装的仍然是vs2017。 >谢谢,电脑已经砸了。 diff --git a/YaeBlog/source/posts/question-in-install-vs-2019/1.png b/YaeBlog/source/posts/question-in-install-vs-2019/1.png deleted file mode 100644 index 97c6d07..0000000 --- a/YaeBlog/source/posts/question-in-install-vs-2019/1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b6fd368bfe4a7defb24d72f069ca7a7bf8f69a417ac65e8dd7c526576cc4f14e -size 229076 diff --git a/YaeBlog/source/posts/question-in-install-vs-2019/1.webp b/YaeBlog/source/posts/question-in-install-vs-2019/1.webp new file mode 100644 index 0000000..55b7bde Binary files /dev/null and b/YaeBlog/source/posts/question-in-install-vs-2019/1.webp differ diff --git a/YaeBlog/source/posts/rust-drop-stack-overflow.md b/YaeBlog/source/posts/rust-drop-stack-overflow.md index 37927aa..abfded7 100644 --- a/YaeBlog/source/posts/rust-drop-stack-overflow.md +++ b/YaeBlog/source/posts/rust-drop-stack-overflow.md @@ -6,6 +6,7 @@ tags: - 技术笔记 --- + 这辈子就是被Rust编译器害了.jpg <!--more--> @@ -14,15 +15,15 @@ tags: 事情是这样的,当我实现完`Sysy`语言的语法分析器并编写了一些白盒测试用例之后,我便打算将官方提供的100个测试用例作为输入运行看看能不能**正常**的解析成抽象语法树(显然不可能手动检查生成的抽象语法树是否正确)。我首先在`main.rs`里面实现了读取所有的`.sy`文件,进行词法分析和语法分析的逻辑,程序在这里这正常的识别了大多数的输入文件,在一些浮点数的输入上还存在一些问题。于是我便打算将这些逻辑重构到一个Rust的集成测试中,方便在CI中使用`cargo test`进行运行测试。但是在重构完成之后使用`cargo test`进行运行时我去遇到了如下的运行时错误。 - + 看到这个报错的第一瞬间,我怀疑是因为`cargo test`和`cargo run`的运行环境不同,导致测试程序读取到了其他其实不是`sysy`程序但是以`.sy`结尾的文件,而恰好这个文件又能被解析,使得解析器组合子工作的过程中调用链太长而导致栈溢出,于是我在`RustRover`中打断点调试运行,却发现程序正确的读取到输入文件。这就奇怪了,我于是让程序继续运行到报错,看看报错时候程序的调用栈是被什么东西填满了,然后发现程序的调用栈长这样: - + 并不是我程序中代码的调用太深导致的,而是Rust编译器自动生成的`drop`函数导致的。于是尝试看看调用栈的底部,看看是在读取什么输入数据,`drop`什么神仙数据结构的时候发生的。调试器很快告诉我们,`drop`的数据结构是抽象语法树中的二元表达式,而此时的输入代码则如下图所示,而且图中的代码重复了400行。 - + 我已经能想象到那棵高耸如云的抽象语法树了。 diff --git a/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181144993.png b/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181144993.png deleted file mode 100644 index 93f1df8..0000000 --- a/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181144993.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8cfa995fa0114dc3ca2a412da668d1e35e28072f06bb44b5abc8759c15d71275 -size 49002 diff --git a/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181144993.webp b/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181144993.webp new file mode 100644 index 0000000..083b0e1 Binary files /dev/null and b/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181144993.webp differ diff --git a/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181612954.png b/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181612954.png deleted file mode 100644 index 6c6699d..0000000 --- a/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181612954.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eba69761c69d220e829c43d064ba652b2bd5f7bf3a1f93c37c22a5e332b284a9 -size 81175 diff --git a/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181612954.webp b/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181612954.webp new file mode 100644 index 0000000..2d1ba0c Binary files /dev/null and b/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105181612954.webp differ diff --git a/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105182036975.png b/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105182036975.png deleted file mode 100644 index 6c1317e..0000000 --- a/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105182036975.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4797186c7079795d37728da7227101aac6c8ce8b0da11af988f7ea5606191364 -size 43027 diff --git a/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105182036975.webp b/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105182036975.webp new file mode 100644 index 0000000..578c0a1 Binary files /dev/null and b/YaeBlog/source/posts/rust-drop-stack-overflow/image-20241105182036975.webp differ diff --git a/YaeBlog/source/posts/software-engineer.md b/YaeBlog/source/posts/software-engineer.md index a5b0229..ddcd614 100644 --- a/YaeBlog/source/posts/software-engineer.md +++ b/YaeBlog/source/posts/software-engineer.md @@ -1,11 +1,12 @@ --- title: 软件工程 +date: 2024-06-12T20:27:25.0000000 tags: - - 软件工程 - - 学习资料 -date: 2024-06-12 20:27:25 +- 软件工程 +- 学习资料 --- + 你说得对,但软工无非就是瀑布模型规定的那六项基本活动及其变化,然后细化到需求分析需要用UML规范化表示的建模方法,后面就是如何通过框架模块的结构确定软件对象有哪些并分配功能。当然这其中也涉及到模块独立性的设计原则以及面向对象的7个设计原则,之后就是软件测试的白盒和黑盒方法。 ## 软件工程概述 @@ -61,7 +62,7 @@ F.L. Bauer提出,软件工程就是为了经济地获得能够在实际机器 #### 瀑布模型 - + 瀑布模型强调在软件实现之前必须进行分析和设计工作,同时也造成了模型缺乏灵活性的问题,特别是面对软件的需求不明确或者不准确的情况时,模型的风险控制能力较弱。 @@ -71,19 +72,19 @@ F.L. Bauer提出,软件工程就是为了经济地获得能够在实际机器 烟火模型提倡进行两次开发。第一次开发得到实验性的原型产品,其目的是探索可行性,弄清软件的需求。第二次在第一次的基础上获得较为满意的软件产品。 - + 演化模型在明确用户需求和降低开发风险的同时,也带来了难以管理、结构较差和技术不成熟的问题,同时可能抛弃掉瀑布模型的文档控制优点。因此演化模型更多适合于需求不清晰的小型或中型系统,适用于开发周期较短的场合。 #### 增量模型 - + 但是在增量模型中难以确定增量的粒度,同时确定所有的需求比较困难。 #### 喷泉模型 - + 各个开发阶段没有特定的次序,可以并行进行,也可以在某个开发阶段中随时补充其他任何开发阶段。但是难以管理,工作计划需要随时更新。 @@ -91,11 +92,11 @@ F.L. Bauer提出,软件工程就是为了经济地获得能够在实际机器 将测试活动提前,使得瀑布模型能够驾驭风险。 - + #### 螺旋模型 - + 四个象限:制定计划、风险分析、实施工程、客户评价。 @@ -103,13 +104,13 @@ F.L. Bauer提出,软件工程就是为了经济地获得能够在实际机器 利用模块化思想将整个系统模块化,并在一定构件模型的支持下复用构件库中软件构件,通过组装高效率、高质量地构造软件系统。构件组装模型本质上是演化模型。 - + 充分利用软件复用,提高开发效率。允许多个项目同时开发,降低了费用,提高了可维护性。但是缺乏通用的构件组装结构标准,风险较大,同时构件可重用性和系统高效性之间不易协调。 #### 快速应用开发模型 - + 增量型的软件开发过程,强调极短的开发周期。 @@ -142,7 +143,7 @@ RUP由9个核心工作流构建每个迭代的主要活动。分别是6个核心 敏捷建模由一系列的价值观、原则和实践组成,是一种快速软件开发的思想代码,代表性的应用有极限编程。 - + 极限编程中的需求分析要求开发人员和客户一起将各种需求变成小的需求模块(User Story),这些模块将会被组合或者分解为更小的模块,成为Story Card。 @@ -179,13 +180,13 @@ UML,即统一建模语言,是面向对象分析与设计的一种标准表 4+1视图,通过模型来描述系统的结构和行为,或者说静态结构和动态结构,以用例视图为核心描述系统的不同视图。 - + #### 领域模型 领域模型是针对某一个特定领域内概念类或者对象的抽象化可视化表示。 - + 在领域模型中使用类图表达概念及其关系,概念类之间的关系有关联、继承、组合、聚合和依赖等关系。 @@ -203,11 +204,11 @@ UML,即统一建模语言,是面向对象分析与设计的一种标准表 模块的内聚性是模块功能强度的度量。 - + 模块的耦合性是针对模块之间连接紧密程度的度量。 - + 面向对象的设计原则: diff --git a/YaeBlog/source/posts/software-engineer/image-20240620211321957.png b/YaeBlog/source/posts/software-engineer/image-20240620211321957.png deleted file mode 100644 index d5e6f36..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240620211321957.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9feaffe8bb9531f3d7dcd49b836fe2615f43a32c1833a3e95f17ffd6c109db31 -size 134202 diff --git a/YaeBlog/source/posts/software-engineer/image-20240620211321957.webp b/YaeBlog/source/posts/software-engineer/image-20240620211321957.webp new file mode 100644 index 0000000..f0c5768 Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240620211321957.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240620212101864.png b/YaeBlog/source/posts/software-engineer/image-20240620212101864.png deleted file mode 100644 index adae8d9..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240620212101864.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:682ca3ab11829c8071189772060837063cbb62b5fcfde848aa71a15280cfa091 -size 190854 diff --git a/YaeBlog/source/posts/software-engineer/image-20240620212101864.webp b/YaeBlog/source/posts/software-engineer/image-20240620212101864.webp new file mode 100644 index 0000000..99ddbdb Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240620212101864.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240620214307906.png b/YaeBlog/source/posts/software-engineer/image-20240620214307906.png deleted file mode 100644 index 626f115..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240620214307906.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a244a26879b14d0dc35daf6218305d2fd96a822c77999bf36404904e6a9e394a -size 273406 diff --git a/YaeBlog/source/posts/software-engineer/image-20240620214307906.webp b/YaeBlog/source/posts/software-engineer/image-20240620214307906.webp new file mode 100644 index 0000000..93c614d Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240620214307906.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240620214739548.png b/YaeBlog/source/posts/software-engineer/image-20240620214739548.png deleted file mode 100644 index 50c2977..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240620214739548.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2fbce72d6f07c49345b1613b1ac4d9d0d7546fa8c5688c4dff923d115e5788ce -size 108027 diff --git a/YaeBlog/source/posts/software-engineer/image-20240620214739548.webp b/YaeBlog/source/posts/software-engineer/image-20240620214739548.webp new file mode 100644 index 0000000..ce0bd5a Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240620214739548.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240620215022645.png b/YaeBlog/source/posts/software-engineer/image-20240620215022645.png deleted file mode 100644 index 8f1cec5..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240620215022645.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:feb20813948235d1dca857baf94dbf1212729b18db289212b55cacf9ae92dc74 -size 113775 diff --git a/YaeBlog/source/posts/software-engineer/image-20240620215022645.webp b/YaeBlog/source/posts/software-engineer/image-20240620215022645.webp new file mode 100644 index 0000000..b046922 Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240620215022645.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240620220155962.png b/YaeBlog/source/posts/software-engineer/image-20240620220155962.png deleted file mode 100644 index cef4bbe..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240620220155962.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0b35bb450ffbe93bfd8d3d752fcce55b1bf7116f220e1eee5ba275097d67ce30 -size 194548 diff --git a/YaeBlog/source/posts/software-engineer/image-20240620220155962.webp b/YaeBlog/source/posts/software-engineer/image-20240620220155962.webp new file mode 100644 index 0000000..0225635 Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240620220155962.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240620224318982.png b/YaeBlog/source/posts/software-engineer/image-20240620224318982.png deleted file mode 100644 index 1f4f278..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240620224318982.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:faf61882914e3fab1b02847bedfc5482561e871644693d630efdc8b783b5e7d4 -size 119180 diff --git a/YaeBlog/source/posts/software-engineer/image-20240620224318982.webp b/YaeBlog/source/posts/software-engineer/image-20240620224318982.webp new file mode 100644 index 0000000..a2f1741 Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240620224318982.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240620224519243.png b/YaeBlog/source/posts/software-engineer/image-20240620224519243.png deleted file mode 100644 index a898b5d..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240620224519243.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e4334f70d148d512df0abea0eadc553a1f7d7dc9a923faac6fdb6ad581f63618 -size 190877 diff --git a/YaeBlog/source/posts/software-engineer/image-20240620224519243.webp b/YaeBlog/source/posts/software-engineer/image-20240620224519243.webp new file mode 100644 index 0000000..d9b4198 Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240620224519243.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240621114540033.png b/YaeBlog/source/posts/software-engineer/image-20240621114540033.png deleted file mode 100644 index ec7791d..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240621114540033.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a8ae17c7517b83ed4429ce148ebfd60595ea94127405117af34bec316abe4956 -size 172404 diff --git a/YaeBlog/source/posts/software-engineer/image-20240621114540033.webp b/YaeBlog/source/posts/software-engineer/image-20240621114540033.webp new file mode 100644 index 0000000..cc50c89 Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240621114540033.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240623160826903.png b/YaeBlog/source/posts/software-engineer/image-20240623160826903.png deleted file mode 100644 index cb255b4..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240623160826903.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4c375a4e5fe9910ee9263a1878c43c557e92cbf4d88a35af01e7b5d2e2d1d010 -size 155772 diff --git a/YaeBlog/source/posts/software-engineer/image-20240623160826903.webp b/YaeBlog/source/posts/software-engineer/image-20240623160826903.webp new file mode 100644 index 0000000..615558e Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240623160826903.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240623162229404.png b/YaeBlog/source/posts/software-engineer/image-20240623162229404.png deleted file mode 100644 index 74c7155..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240623162229404.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:87403c9ee1023bf2442d7aa095083f12136d56872733dbe565202487293bea2a -size 330278 diff --git a/YaeBlog/source/posts/software-engineer/image-20240623162229404.webp b/YaeBlog/source/posts/software-engineer/image-20240623162229404.webp new file mode 100644 index 0000000..425afc0 Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240623162229404.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240623163647935.png b/YaeBlog/source/posts/software-engineer/image-20240623163647935.png deleted file mode 100644 index f1c700d..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240623163647935.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:51743c989c50d02e37c103a243e1afc6d922f8f231feec802cdd400f331598e1 -size 146135 diff --git a/YaeBlog/source/posts/software-engineer/image-20240623163647935.webp b/YaeBlog/source/posts/software-engineer/image-20240623163647935.webp new file mode 100644 index 0000000..d2a57ab Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240623163647935.webp differ diff --git a/YaeBlog/source/posts/software-engineer/image-20240623170058679.png b/YaeBlog/source/posts/software-engineer/image-20240623170058679.png deleted file mode 100644 index 2b84b34..0000000 --- a/YaeBlog/source/posts/software-engineer/image-20240623170058679.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2a6b024c357a128ade7ebc5f6a853c236942c05ad9461b3ca7b781dc88b9158a -size 115178 diff --git a/YaeBlog/source/posts/software-engineer/image-20240623170058679.webp b/YaeBlog/source/posts/software-engineer/image-20240623170058679.webp new file mode 100644 index 0000000..78cbdec Binary files /dev/null and b/YaeBlog/source/posts/software-engineer/image-20240623170058679.webp differ diff --git a/YaeBlog/source/posts/spring-boot-custom-authorize.md b/YaeBlog/source/posts/spring-boot-custom-authorize.md index 85736d1..e16fe54 100644 --- a/YaeBlog/source/posts/spring-boot-custom-authorize.md +++ b/YaeBlog/source/posts/spring-boot-custom-authorize.md @@ -131,13 +131,13 @@ public interface AuthorizeService { 然后针对每个策略实现一个认证服务: - + > 具体实现就不在这里给出。 在注入每个服务时,使用策略枚举作为服务的名称,方便后续获得该服务实例。 - + ### 注解和注解解析 diff --git a/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175807814.png b/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175807814.png deleted file mode 100644 index 29256a0..0000000 --- a/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175807814.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:104460bc9297f7d1eb89d4bf1dc2d516bd371183c0169427af4ba47a9ac069d5 -size 34903 diff --git a/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175807814.webp b/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175807814.webp new file mode 100644 index 0000000..4ffa3ed Binary files /dev/null and b/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175807814.webp differ diff --git a/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175955817.png b/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175955817.png deleted file mode 100644 index 67320a9..0000000 --- a/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175955817.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a5878ef72ef9f57be94a7a7fe5a02297131d87ae94b61c3a593d9d3311fff1ae -size 27551 diff --git a/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175955817.webp b/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175955817.webp new file mode 100644 index 0000000..e7161f7 Binary files /dev/null and b/YaeBlog/source/posts/spring-boot-custom-authorize/image-20230727175955817.webp differ diff --git a/YaeBlog/source/posts/vscode-in-browser.md b/YaeBlog/source/posts/vscode-in-browser.md index a24b8af..d7c324d 100644 --- a/YaeBlog/source/posts/vscode-in-browser.md +++ b/YaeBlog/source/posts/vscode-in-browser.md @@ -53,9 +53,9 @@ cert: false ``` 在第一行,127.0.0.1代表这是本机的IP,如果要在公网上访问的话,需要将这里的IP改为0.0.0.0,后面的端口在默认的情况下是8080,你可以改成自己喜欢的端口号,在第二行的password表示采用密码进行身份验证,我们需要在第三行设置自己熟悉的密码,以方便自己的访问,<del>当然,你把默认生成的密码背下来应该也是可以的</del> 在进行了这些更改之后,我们再次输入code-server重启服务,如果一次顺利,我们可以看见以下的启动信息 - + 我们可以打开浏览器,在地址栏中输入你的服务器公网IP加上你自己设置的端口号,就可以打开自己的VSCode Online界面了。 - + 输入自己的设置密码,就可以开始把浏览器中的VSCode当作自己本地计算机上的VSCode使用了,不过其中的文件是位于自己的服务器上的。 >如果你和我一样使用的阿里云的服务器,可能还需要到服务器的管理界面设置安全组放行相应的端口,具体参考[这篇文章](https://help.aliyun.com/document_detail/59086.html?spm=5176.10173289.help.dexternal.4ff02e77892BZP) diff --git a/YaeBlog/source/posts/vscode-in-browser/1.png b/YaeBlog/source/posts/vscode-in-browser/1.png deleted file mode 100644 index 0523623..0000000 --- a/YaeBlog/source/posts/vscode-in-browser/1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a74cd47bed9e46670d2b730a21fe550ea17609b552567f2a3ef8bbfc6db5a253 -size 37385 diff --git a/YaeBlog/source/posts/vscode-in-browser/1.webp b/YaeBlog/source/posts/vscode-in-browser/1.webp new file mode 100644 index 0000000..2df19d9 Binary files /dev/null and b/YaeBlog/source/posts/vscode-in-browser/1.webp differ diff --git a/YaeBlog/source/posts/vscode-in-browser/2.png b/YaeBlog/source/posts/vscode-in-browser/2.png deleted file mode 100644 index c18e033..0000000 --- a/YaeBlog/source/posts/vscode-in-browser/2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d9d048021f921128b5daef4b4b884cb40d54367c6bb2840f0ddec722946b2824 -size 53525 diff --git a/YaeBlog/source/posts/vscode-in-browser/2.webp b/YaeBlog/source/posts/vscode-in-browser/2.webp new file mode 100644 index 0000000..95d9a64 Binary files /dev/null and b/YaeBlog/source/posts/vscode-in-browser/2.webp differ diff --git a/YaeBlog/source/posts/whats-new-of-dotnet-8.md b/YaeBlog/source/posts/whats-new-of-dotnet-8.md index d551565..b69c6a6 100644 --- a/YaeBlog/source/posts/whats-new-of-dotnet-8.md +++ b/YaeBlog/source/posts/whats-new-of-dotnet-8.md @@ -1,12 +1,13 @@ --- title: .Net 8中我关心的新功能 -date: 2023-11-22 21:07:03 +date: 2023-11-22T21:07:03.0000000 tags: - - 技术笔记 - - dotnet +- 技术笔记 +- dotnet --- + ## .NET 首先看看.NET 8的新增功能,参照官方文档中的[.NET 8的新增功能](https://learn.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-8)。 @@ -233,7 +234,7 @@ await Task.Delay(500); #### 将呈现模式应用到组件实例和组件定义 -在之前的`Blazor`版本中,我们只能指定整个应用的呈现模式为`Blazor Sever`或者`Blazor WebAssembly`。而在现在我们可以在组件的抽象层级上指定组件的呈现呈现模式。例如,可以将不太需要交互功能的主页指定为静态服务器渲染模式将降低服务器资源占用,而保留其他页面的`Blazor Server`呈现模式。这就大大提高了新呈现模式使用的灵活性。 +在之前的`Blazor`版本中,我们只能指定整个应用的呈现模式为`Blazor Sever`或者`Blazor WebAssembly`。而在现在我们可以在组件的抽�层级上指定组件的呈现呈现模式。例如,可以将不太需要交互功能的主页指定为静态服务器渲染模式将降低服务器资源占用,而保留其他页面的`Blazor Server`呈现模式。这就大大提高了新呈现模式使用的灵活性。 #### 新的应用模板 @@ -307,11 +308,11 @@ ab -n 10000 -c 1000 http://locallhost:5000/todos/ 测试之后的结果的如图所示: - + 直接使用运行时运行编译出来的`dll`文件: - + 修改项目文件和源代码,取消`System.Text.Json`使用源生成器和对于`AOT`的支持。 @@ -346,11 +347,11 @@ public record Todo(int Id, string? Title, DateOnly? DueBy = null, bool IsComplet 使用同样的命令测试得到的结果如图: - + 可以发现几次测试的结果都比较接近,几乎可以认为`AOT`编译不会对性能产生明显的影响。虽然按照官方博客中给出的图片,`AOT`编译是有性能下降,应该是我这边测试工具的瓶颈。 - + ### Identity API 终结点 diff --git a/YaeBlog/source/posts/whats-new-of-dotnet-8/AOTOptimizations4.png b/YaeBlog/source/posts/whats-new-of-dotnet-8/AOTOptimizations4.png deleted file mode 100644 index 713c7ac..0000000 --- a/YaeBlog/source/posts/whats-new-of-dotnet-8/AOTOptimizations4.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8c307a43534321f2e35bf61d5ee5c29fe571e3f2dc9ae23c8d3f5ebf11e350e2 -size 312444 diff --git a/YaeBlog/source/posts/whats-new-of-dotnet-8/AOTOptimizations4.webp b/YaeBlog/source/posts/whats-new-of-dotnet-8/AOTOptimizations4.webp new file mode 100644 index 0000000..1d4d331 Binary files /dev/null and b/YaeBlog/source/posts/whats-new-of-dotnet-8/AOTOptimizations4.webp differ diff --git a/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122100930849.png b/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122100930849.png deleted file mode 100644 index e527a83..0000000 --- a/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122100930849.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ad8ef505acf3d492b886658924ab6db8cf889ba5a43207c89f1bae77b52501b -size 76115 diff --git a/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122100930849.webp b/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122100930849.webp new file mode 100644 index 0000000..831193d Binary files /dev/null and b/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122100930849.webp differ diff --git a/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101012416.png b/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101012416.png deleted file mode 100644 index d937496..0000000 --- a/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101012416.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e67ea7e7349e2805c6ef74c64a4121bd06ec50875ece402827ff40f640f2d2de -size 75303 diff --git a/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101012416.webp b/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101012416.webp new file mode 100644 index 0000000..a8beaac Binary files /dev/null and b/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101012416.webp differ diff --git a/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101142080.png b/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101142080.png deleted file mode 100644 index 5752bbd..0000000 --- a/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101142080.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:086d2b6fb4c74ab1986cd23ca4e2bd8d4b2922530a19415b463c80a6b5c5b5fe -size 74524 diff --git a/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101142080.webp b/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101142080.webp new file mode 100644 index 0000000..f568eea Binary files /dev/null and b/YaeBlog/source/posts/whats-new-of-dotnet-8/image-20231122101142080.webp differ diff --git a/YaeBlog/source/posts/wsl-setup-csapp.md b/YaeBlog/source/posts/wsl-setup-csapp.md index 9b2c144..13fd4d9 100644 --- a/YaeBlog/source/posts/wsl-setup-csapp.md +++ b/YaeBlog/source/posts/wsl-setup-csapp.md @@ -29,7 +29,7 @@ wsl --install 回车,等待所有的进度条都走完,重新启动系统。 - + 在重启完成之后,Ubuntu系统会自动启动并完成一系列的配置,在其中需要你为这个系统设置一个用户。输入这个用户的名称和密码即可。 @@ -59,7 +59,7 @@ sudo apt update 测试换源是否成功。 - + 如果在换源的过程中报错`Certificate verification failed`,可以将配置文件中的所有`https`更改为`http`来临时解决。 @@ -160,7 +160,7 @@ gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) 如果遇到报错,部分头文件未找到: - + 不要慌张,这是正常的。 diff --git a/YaeBlog/source/posts/wsl-setup-csapp/1.png b/YaeBlog/source/posts/wsl-setup-csapp/1.png deleted file mode 100644 index 0b59632..0000000 --- a/YaeBlog/source/posts/wsl-setup-csapp/1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a392a744186b24dcb0b2fb78ad6d7ca2575df3be59fd229076159353394421c7 -size 377521 diff --git a/YaeBlog/source/posts/wsl-setup-csapp/1.webp b/YaeBlog/source/posts/wsl-setup-csapp/1.webp new file mode 100644 index 0000000..ea6b386 Binary files /dev/null and b/YaeBlog/source/posts/wsl-setup-csapp/1.webp differ diff --git a/YaeBlog/source/posts/wsl-setup-csapp/2.png b/YaeBlog/source/posts/wsl-setup-csapp/2.png deleted file mode 100644 index 796829e..0000000 --- a/YaeBlog/source/posts/wsl-setup-csapp/2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0637be96b0f33b85cb415a185f6c46d07d46e9938a1b73deb50494b0b8ecdf11 -size 179838 diff --git a/YaeBlog/source/posts/wsl-setup-csapp/2.webp b/YaeBlog/source/posts/wsl-setup-csapp/2.webp new file mode 100644 index 0000000..765bae9 Binary files /dev/null and b/YaeBlog/source/posts/wsl-setup-csapp/2.webp differ diff --git a/YaeBlog/source/posts/wsl-setup-csapp/3.png b/YaeBlog/source/posts/wsl-setup-csapp/3.png deleted file mode 100644 index 0d835e1..0000000 --- a/YaeBlog/source/posts/wsl-setup-csapp/3.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:17b13932a250644377d0a4692ec15b68b0d469da2f5743fbb861e4e98f0e389f -size 106136 diff --git a/YaeBlog/source/posts/wsl-setup-csapp/3.webp b/YaeBlog/source/posts/wsl-setup-csapp/3.webp new file mode 100644 index 0000000..2e73722 Binary files /dev/null and b/YaeBlog/source/posts/wsl-setup-csapp/3.webp differ