自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 svn与git Merge重要区别讲解

合并类型核心目的方向常用命令关键点同步合并让分支保持最新在分支生命周期中会多次执行重入合并将分支成果合并回主干分支生命周期最后一次操作,之后分支废弃拣选合并应用特定的变更任意URL -> 当前目录常用于紧急修复,只拿需要的变更差异合并计算并应用任意两点间的差异URL1 vs URL2 -> 当前目录最底层原理,可用于合并无关联分支反向合并撤销已提交的变更历史变更 -> 当前目录用于回滚错误提交理解了这五种目的,你就能在任何场景下选择最合适的merge方式了。

2025-07-28 09:00:07 695

原创 C#最著名的委托(delegate)是什么,他与C++的function有何区别??

是什么?委托是类型安全的方法指针,是一个定义方法签名的引用类型。为什么用?实现解耦,允许将方法作为参数传递(回调),是事件模型和 LINQ 的基石。怎么用?(可选)声明一个delegate类型。创建一个该委托类型的实例,并让它指向一个签名匹配的方法。通过委托变量调用方法。新写法?尽量使用内置的Action<>和Func<>泛型委托,代码更简洁标准。特性C#delegateeventC++本质语言内置的高级类型标准库提供的类模板调用目标多播 (Multicast),支持+=和-=

2025-07-26 15:22:04 600

原创 Mingw 与MSYS2 与Cygwin区别

这是一个非常经典的问题!这三者关系紧密但又定位不同,很容易让人混淆。我们来用一个生动的比喻,然后深入技术细节,彻底辨析它们的区别。

2025-07-26 15:02:16 828

原创 C++ explicit 上下文相关转换

C++ 允许程序员为自己的类定义转换规则,主要有两种方式[3][4]转换构造函数 (Converting Constructor):一个可以只用一个参数调用的构造函数(非explicit它定义了如何将参数类型转换为类类型。转换运算符 (Conversion Operator):一种特殊的类成员函数,定义了如何将类类型转换为其他类型[5]。默认情况下,这些用户定义的转换可以是隐式的,即编译器可以在需要时自动调用它们,无需程序员显式指示[4]。explicit。

2025-07-24 15:42:03 729

原创 CUDA/C++一种可能通不过编译的写法

嵌套在 namespace/class 里的依赖模板,直接写往往会被当成函数声明。标记它是一个“类型”,就要写成更清爽的做法是先using(或typedef)把它 alias 出来,再直接用别名来声明变量。这样无论后面是cudaMemcpy还是for循环还是单次调用,都绝对不会再出现“identifier ‘float_supporter’ is undefined” 这种诡异的编译错误了。

2025-07-24 13:20:19 371

原创 ImageNet与COCO数据集主要区别

在计算机视觉领域,ImageNet 和 COCO 是两个无法绕开的名字。它们不仅是海量的数据集,更是推动 AI 技术浪潮的基石。然而,尽管它们都与“图像”和“物体”相关,其设计理念、核心任务和在现代 AI 开发流程中的角色却截然不同。本文将深入解析这两大巨头的核心区别,帮助你理解它们为何如此重要,以及如何协同工作。

2025-07-24 11:42:02 264

原创 OpenCV Mat UMat GpuMat Matx HostMem InputArray等设计哲学

行为模式调用方式适用场景设计目的转发/代理直接调用等的方法。处理所有数组类型都支持的通用操作。抽象与多态:隐藏具体实现,让函数可以处理多种数据类型。直接获取先调用等获取具体引用,再调用该引用的特有方法。处理某个特定数组类型才有的专属操作。灵活性与完整性:不限制开发者使用具体类的全部功能。所以,您的观察是完全正确的。OpenCV 的代理类设计,是一个在高度抽象(为了易用和通用)和完全控制(为了性能和功能完整性)之间取得精妙平衡的典范。

2025-07-22 17:25:51 1331

原创 SVN使用过程中的几个疑问与解答

特性方式一:导入 (Import)方式二:创建后检出 (Create & Checkout)初始动作在本地文件夹上右键 ->导入在服务器上用版本库浏览器创建目录结构优点操作快,一步到位把文件传上服务器结构清晰,从一开始就遵循标准,是最佳实践缺点原始文件夹不会成为工作副本,必须重新检出,容易让新手混淆步骤稍多(创建->检出->复制->添加->提交)适用场景快速将一个已存在的、混乱的项目归档到SVN所有新项目的标准流程,强烈推荐虽然你可以直接“导入”本地文件夹,但我们强烈推荐使用第二种方式。

2025-07-18 15:19:33 856

原创 GPTQ与Unsloth量化区别

演进关系:Unsloth 的方法可以看作是建立在 GPTQ 这类技术之上的更高层次的优化。理论上,Unsloth 在决定对某个层进行 4-bit 量化时,完全可以调用 GPTQ 的算法来执行这个具体的量化步骤,以获得最佳的 4-bit 压缩效果。“笨”方法 vs “聪明”方法:GPTQ 是一种非常精密的“笨”方法——它在给定的严格约束下(必须 4-bit)做得最好。

2025-07-17 15:09:11 890

原创 一个Type Triats(SFINAE)的例子讲解

默认值属于主模板:默认模板参数是在主模板(泛化版本)中定义的。特化版本“借用”默认值:当用户调用模板时没有提供所有参数,编译器会使用主模板中定义的默认值来“补全”调用。然后,它用这个补全后的、完整的模板参数列表去寻找最匹配的特化版本。特化版本中的T是一个占位符:在中,T只是一个占位符,它会捕获主模板调用中第二个参数的实际类型——无论这个类型是用户显式提供的,还是由主模板的默认值void提供的。

2025-07-17 14:58:49 792

原创 CAS原子操作为什么失败后要修改期望值?

将 CAS 失败时原子变量的当前值返回给调用者,是基于对该操作实际使用模式的深刻理解而做出的设计决定。失败是常态:在多线程高竞争环境下,CAS 操作的失败是正常情况,而不是异常。[4][5]因此,必须为失败后的重试提供最高效的路径。提供重试所需的信息:要重试,就必须知道当前的值是多少,否则下一次尝试依然会基于过时的信息而失败。在失败时直接提供这个新值,是最高效的方式。硬件层面的支持:底层的硬件指令(如 x86 的)在执行时就已经加载了当前值。[1]

2025-07-17 10:54:33 918

原创 C++异步编程工具 async promise-future packaged_task等

特性std::async抽象级别高低中核心作用启动一个异步任务并返回future在线程间手动传递一个值或异常包装一个可调用对象,将其与future绑定线程管理自动(由运行时库决定)手动(需要自己创建和管理线程)手动(需要自己将任务对象传递给线程执行)耦合度任务的调用和执行紧密耦合值的“生产者”和“消费者”完全解耦任务的“定义”和“执行”解耦主要用例简单的“即发即忘”式异步调用复杂的线程间通信,事件驱动模型任务队列,线程池实现。

2025-07-17 10:19:56 796

原创 程序中计时的多种方法(以C++为例)

方法平台测量类型精度推荐度墙上时间高 (微秒)中等 (平台相关)Windows墙上时间非常高 (微秒/纳秒)中等 (平台相关)跨平台墙上时间 (steady/high_resolution_clock)高强烈推荐clock()跨平台CPU 时间低 (通常是毫秒)不推荐用于精确测量对于新的 C++ 项目,无论在哪个平台,都应优先选择 std::chrono。只有在必须兼容旧的C代码库或有特殊平台需求时,才考虑其他方法。

2025-07-15 12:04:05 273

原创 Cmake简介

特性.cmake文件核心作用项目/目录的构建蓝图、入口点可重用的脚本、模块、函数库调用方式CMake 自动查找并执行必须通过include()等命令显式调用主要内容定义项目 (project)、目标 ()、依赖关系定义函数/宏、查找外部库、设置变量/选项类比C++ 中的main.cppC++ 中的.h.cpp库文件或 Python 模块负责项目的整体结构和构建流程,而.cmake文件则将通用的、复杂的或与特定功能相关的逻辑封装起来,以保持的整洁和可维护性。

2025-07-14 10:24:37 706

原创 LLM的几点疑问探讨

特性LoRA (及其他PEFT方法)全量微调 (Full Fine-tuning)可训练参数极少 (通常 < 1% of total)全部 (100%)核心原理冻结主干,附加旁路适配器更新所有参数数据需求可以只使用垂直领域数据必须混合垂直领域数据和通用数据灾难性遗忘风险低高产出物原始模型 + 一个很小的LoRA适配器文件一个全新的、与原始模型同样大小的完整模型文件适用场景快速、低成本地让模型适应特定任务或风格当需要对模型进行更深层次的、根本性的能力改造时。

2025-07-10 14:44:01 696

原创 Windows对高性能计算的掣肘

方法实现方式优点缺点适用场景1. 代码重构与多线程将逻辑合并到单个源项目,用并行。最高效、最简单、开销最小。需要访问和修改所有源代码。首选方案。当您可以完全控制代码库时。2. IPC服务器模式创建一个GPU服务器进程,原始进程通过IPC发送请求。唯一能在不修改源码的情况下工作的方案。极其复杂,性能开销大,开发周期长。当您面对的是无法修改的、黑盒的.exe文件,且性能要求极高以至于必须并发时。自己实现的server.exe和NVIDIA官方的MPS,在工作原理和最终效果上有天壤之别。

2025-07-08 15:47:08 783

原创 MPI openMP CUDA openACC混合编程基础框架和简单例子

模型层级目标硬件内存模型核心任务MPI最高层 (跨节点)计算机集群 (Cluster)分布式内存任务分解与节点间通信OpenMP中间层 (节点内)多核CPU共享内存利用单个节点内的所有CPU核心最底层 (设备卸载)GPU等加速器独立的设备内存加速计算密集型代码段。

2025-07-08 15:18:46 571

原创 C++函数指针

想象一下,变量可以存储一个整数(int a = 10;),也可以存储一个内存地址(函数指针也是一个变量,但它特殊的地方在于,它存储的是一个函数的入口地址。通过这个指针,你就可以像调用普通函数一样,间接地调用它所指向的那个函数。这就像一个可以随时切换频道的“万能遥控器”。类型声明语法赋值调用优点缺点普通函数指针p = &funcp(args)C语言兼容,底层语法复杂,类型不灵活成员函数指针能指向成员函数语法非常复杂,必须绑定对象f(args)语法统一、灵活、安全有轻微性能开销,需要头文件。

2025-07-03 14:08:11 767

原创 C++函数的返回值是否应该用引用?具体规则详述

一种情况是返回右值引用,用来初始化普通值(触发移动构造)public:// 返回对成员变量的右值引用// 1. my_obj 在这里被创建,其生命周期持续到 main 函数结束// 2. 调用成员函数,它返回一个指向 my_obj.cpu_mat 的右值引用。// 因为 my_obj 还活着,所以 my_obj.cpu_mat 也活着。这个引用是有效的。

2025-07-01 12:03:46 316

原创 C与C++中的可变参数

下面先区分一下两种“可变参数”机制,再重点讲讲 C++11 引入的。

2025-06-18 09:48:20 438

原创 C++ 条件变量虚假唤醒问题的解决

在 C++ 中, 的 和 方法除了可以传入一个锁(),还可以传入一个谓词函数(函数或可调用对象)。这个谓词的作用是让条件变量在特定的条件满足时才退出等待。谓词是一个返回布尔值的函数或可调用对象,它用于判断某个条件是否满足。如果条件不满足, 会继续阻塞当前线程;如果条件满足,线程会立即退出等待状态。如果不使用谓词,必须手动在循环中检查条件:在这种情况下, 只是等待被唤醒,但必须手动在循环中检查 是否为 。否则,线程可能会因为虚假唤醒提前退出。通过传入谓词,可以让 方法自动检查条件,避免手动循环:解

2025-05-26 11:02:46 656

原创 static_cast,dynamic_cast 与隐式强制转换

{}

2025-05-26 09:47:18 918

原创 C C++中怎么定义一个函数的指针

分别给出在 C 和 C++ 中声明(引出)普通函数指针和成员函数指针的示例。

2025-05-23 08:25:11 259

原创 opencv 对roi操作需要注意可能丢失roi问题

在 OpenCV 里,Mata + b调用的是全局函数(对不同类型有多个重载)这个函数内部创建一个新的Mat tmp,把src1和src2按元素相加的结果写入tmp,然后返回它。dst = tmp调用的是Matdsttmpdsta+b。

2025-05-17 17:39:41 703

原创 引用使用的一个注意事项------可能使你的引用失效

在 C++ 中,函数可以返回一个T&),允许调用者直接操作被引用的对象。但T&——调用处接收返回值时,若不使用引用类型,也会触发(拷贝),与引用语义无关。下面我们从示例和原理两方面来深入剖析。

2025-05-10 13:45:11 378

原创 C++17解决了One Definition Rule问题

声明(declaration):告诉编译器“有这么个名字、这么种类型”,不分配存储,也不产生代码。// 仅声明,全局变量 g_value// 仅声明,函数 foo定义(definition):为变量分配存储,或给函数提供函数体;同一个程序中,对非内联实体,只能出现一次定义。// 定义,全局变量分配空间void foo(int x) { /*…*/ } // 定义,函数体假设有这样一个头文件common.h// ⚠ 直接定义!void foo() { /*…*/ } // ⚠ 直接定义!

2025-05-09 14:14:49 1034

原创 VA_ARGS用法

在 C/C++(C99 及以后标准)中,可以用“可变参数宏”(variadic macro)来定义接收不定数量参数的宏,使用的关键字就是...和。下面把它们的语法、常见用法、标准差异和常见陷阱做个归纳。

2025-05-04 15:34:36 322

原创 detect idiom 两个范例

版本二:检测是否有某个特定参数的函数。版本一:检测是否有某个函数。

2025-05-03 21:01:50 208

原创 条件变量 互斥锁 信号量 区别

在并发编程中,互斥量(Mutex)、条件变量(Condition Variable)、信号量(Semaphore)和锁(Lock)都是用于协调线程(或进程)对共享资源访问的同步原语。

2025-04-24 17:13:25 469

原创 智能指针与移动语义一些最佳实践

在现代 C++ 中,和是两种常用的智能指针,用于管理动态分配对象的生命周期。配合移动语义,这两者能帮助我们写出既高效又安全的代码。

2025-04-21 11:06:39 275

原创 模板函数中左右值引用的正确使用

参数为T&——也就是会带来几个副作用和限制constT&TT&

2025-04-18 20:27:10 262

原创 C++智能指针别名构造函数

在 C++11 的ptrr.get()rr。

2025-04-18 20:05:27 520

原创 智能指针删除器的两种用法

可能的疑问:functional没有具体的函数实现只是一个类型,那么仿函数作何理解,他难道不是一个类型吗,为什么不需要初始化?

2025-04-18 18:49:01 294

原创 实际理解一段openmp+simd的cpu加速代码

实操使用openmp和simd加速图像处理算法

2025-03-22 14:47:53 870

原创 Python多进程简要使用方法

多进程简要使用方法

2024-12-30 11:16:30 217

原创 C++中管理C资源的方法

C++ 的智能指针(如 std::unique_ptr 和 std::shared_ptr)可以通过自定义删除器来管理 C 语言 资源。这样,您可以利用智能指针的自动资源管理机制,同时自定义资源的释放方式。示例:使用 std::unique_ptr 管理 FILE* 资源// 可以添加更多的清理逻辑// 定义一个 unique_ptr,管理 FILE* 资源,并指定删除器if (!

2024-11-30 11:12:00 408

原创 Linux及Windows下动态链接的对比

【代码】Linux及Windows下动态链接的对比。

2024-11-08 09:10:45 350

原创 extern关键字在C与C++中的一些用法与注意

关键点:头文件中的变量声明必须用extern所以:头文件中的变量声明必须使用extern这与函数声明不同()实际定义只能在一个.cpp文件中函数声明可以不用extern,因为函数是唯一的,原因是:函数声明默认就是extern的函数声明不会分配存储空间编译器知道这只是一个声明变量声明默认会导致定义会分配存储空间必须显式使用extern表明这只是声明。

2024-11-08 08:57:14 866

原创 引用的使用注意

引用虽然方便,但需要谨慎使用,特别是在涉及生命周期管理的场景。

2024-11-01 15:11:34 285

原创 # TVM学习笔记(疑难点)(1)

【代码】# TVM学习笔记(疑难点)(1)

2024-10-31 21:58:17 281

空空如也

空空如也

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

TA关注的人

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