
计算机其它
计算机其它知识,如设计模式、工程化经验等
blogSpaceX
这个作者很懒,什么都没留下…
展开
-
代码重构——表驱动替代if-else或者switch-case (C++版)
表驱动方式代码量少,逻辑清晰,更符合设计模式思想,方便函数增添或者删除。但是在c++里需要用到函数指针、指针数组,对新手不友好。但是如果采用合理的索引表,在数据量较大的情况下可以有效提升程序运行速度。表驱动优化if-else[c++]_switch case 修改为c++驱动表-优快云博客。原创 2024-12-14 20:22:27 · 490 阅读 · 0 评论 -
生成式AI系列(一)一文入门生成式AI(理解ChatGPT的原理)
以ChatGPT为代表的生成式AI,是对已有的数据和知识进行,总结出数据的。从而在生成内容时,根据用户需求,结合关联字词的。可以这么联想,ChatGPT就是一个的机器,他会根据你给出的关键词,自动生成关键词的下一个最有可能衔接的词语。比如你说,“世界上最高的山”,ChatGPT就会回答“喜马拉雅山”。大模型需要:算力、数据/存力、算法这三大要素。算力:即需要GPU、NPU这些硬件进行训练。数据/存力:生成式AI需要处理和存储大量的数据。以GPT-3为例,光是训练参数就达到了1750亿个,原创 2024-09-17 22:14:00 · 1634 阅读 · 0 评论 -
内存问题检测工具——Valgrind
Valgrind 可以用来检测程序是否有非法使用内存的问题,例如访问未初始化的内存、访问数组时越界、忘记释放动态内存等问题。Valgrind最好和GCC编译器配合使用。或者,MPI分布式运行。原创 2024-07-22 11:31:53 · 265 阅读 · 0 评论 -
c++多线程2小时速成
c++多线程基础需要掌握这三个标准库的使用:std::thread,std::mutex, andstd::async。原创 2024-05-04 17:36:18 · 1371 阅读 · 0 评论 -
Linux易错指令: 文件覆盖>和文件追加>>
指令 > : 如果文件存在,将原来文件的内容覆盖;原文件不存在则创建文件,再添加信息。指令 >>:不会覆盖原文件内容,将内容追加到文件的尾部。原创 2024-04-18 16:08:47 · 192 阅读 · 1 评论 -
License授权的基本思路
对于收费软件,一般是我们需要去购买一个许可,然后输入这个许可到软件里就能够使用软件。于是有的小伙伴就开始好奇这个许可是怎么实现的,特别是在情况下它是怎么给软件授权,同时又能避免被破解的。原创 2024-03-22 16:10:39 · 2223 阅读 · 1 评论 -
NUMA(Non-Uniform Memory Access)架构的介绍
最早的CPU是以下面这种形式访问内存的:在这种架构中,所有的CPU都是通过一条总线来访问内存,我们把这种架构叫做SMP架构(Symmetric Multi-Processor),也就是对称多处理器结构。但是随着CPU多核技术的发展,,因为所有的处理器都通过一条总线连接起来,因此随着处理器的增加,系统总线成为了系统瓶颈,另外,处理器和内存之间的通信延迟也较大。原创 2024-03-10 17:33:11 · 1945 阅读 · 1 评论 -
计算机网络第一课
先了解层级:原创 2024-01-01 18:36:59 · 715 阅读 · 0 评论 -
SOLID之依赖倒置原则
依赖倒置原则(DIP,Dependence Inversion Principle)的定义是:高层模块不应该依赖底层模块,两者都应该依赖其抽象。抽象不应该依赖细节,即接口或抽象类不依赖于实现类。细节应该依赖抽象,即实现类不应该依赖于接口或抽象类。在具体软件设计时,上层模块不应该依赖于底层模块,底层模块更不应该依赖上层模块,而是上层模块和底层模块都向中间靠拢,共同依赖于二者中间的。整个软件程序设计的依赖关系应该终止于抽象接口层,上层和底层互不关心,甚至使用什么编程语言都不关心。原创 2023-12-31 11:37:31 · 492 阅读 · 0 评论 -
Windows环境下cmake编译时将编译器切换成 MinGW 即 GCC
在终端一次输入mkdir build,cd build,cmake ..,可能会出现一个小问题:如果安装了 VS,可能会调用 MSVC解决的办法是输入cmake -G "MinGW Makefiles" ..,将编译器切换成 MinGW 即 GCC 并完成编译...原创 2023-04-15 22:53:00 · 1024 阅读 · 0 评论 -
程序员口中常说的API是什么意思?什么是接口?
API( 应用程序编程接口):一般来说,这是一套明确定义的各种软件组件之间的通信方法。什么是API?我们不妨用一个小故事展示出来:研发人员A开发了软件A,研发人员B正在研发软件B。有一天,研发人员B想要调用软件A的部分功能来用,但是他又不想从头看一遍软件A的源码和功能实现过程,怎么办呢?研发人员A想了一个好主意:我把软件A里你需要的功能打包好,写成一个函数;你按照我说的流...原创 2023-03-04 14:58:00 · 173 阅读 · 0 评论 -
串行程序优化和并行程序优化思路
雷洪教授的《多核并行高性能计算OpenMP》一书中给出了程序优化的思路:对串行程序进行并行优化建议遵循如下步骤:(1)分析串行代码中可并行化部分,尤其是密切关注程序的热点代码(热点循环、热点函数和热点子程序),这是并行优化中最重要的一个步骤。围绕程序的热点代码进行并行化是减小编程工作量、实现高效并行的捷径。(2)将现有的并行构造和TASK结构添加到热点代码中,实现串行程序的并行化。(3...原创 2023-04-02 15:44:00 · 438 阅读 · 0 评论 -
cmake——引入外部项目之FetchContent
在cmake3.11以及以上的版本,cmake又为我们提供了一种Configure过程引入外部项目的方法--FetchContent。使用FetchContent的步骤总结起来就是:使用FetchContent_Declare(MyName) 获取项目。可以是一个URL也可以是一个Git仓库。使用FetchContent_GetProperties(MyName) 获取我们需要的变量My...原创 2023-05-24 20:59:00 · 2514 阅读 · 0 评论 -
浮点数引起的错误
一、浮点数精度Float 为单精度,内存中占 4 个字节,有效数位是 7 位。double为 双精度,占 8 个字节,有效数位是 16 位。二、常见错误1. 不能存储全部有效数字#include <iostream>int main(){ float f{ 0.123456789f }; std::cout << f << '...原创 2023-05-15 23:38:00 · 601 阅读 · 0 评论 -
Linux——使用find删除指定目录
find 是一个命令行实用程序,允许您根据给定的表达式搜索文件和目录,并对每个匹配的文件或目录执行操作。最常见的情况是使用 find 命令根据模式删除目录。例如,要删除当前工作目录中所有以 _cache 结尾的目录,请运行:find . -type d -name '*_cache' -exec rm -r {} +让我们分析一下上面的命令:•.- 递归搜索当前工作目录(.)。•-ty...原创 2023-05-24 21:18:00 · 915 阅读 · 1 评论