- 博客(29)
- 资源 (1)
- 收藏
- 关注
原创 cud编程之 reduce
本文介绍了CUDA中reduce操作的实现方法。首先解释了reduce的概念,即对数组进行求和、求极值等操作。然后对比了两种实现方式:原子操作虽然代码简单但效率极低,测试显示显存利用率仅0.2%,耗时72.95ms;而树形规约通过共享内存和分块计算,大幅提升了性能。文中给出了两种方法的代码实现,并展示了性能指标对比,说明树形规约是更优的正统解决方案。
2026-01-30 17:58:04
1016
原创 c++ 学习笔记之 enum 与enum class
本文对比分析了C++中的传统枚举(enum)和C++11引入的限定作用域枚举(enum class)的区别与用法。传统枚举存在命名空间污染、类型不安全等问题,而enum class通过限定作用域和禁止隐式转换解决了这些问题。文章详细介绍了二者的语法差异,并通过代码示例展示了enum class的类型安全性、前置声明支持等优势。最后,文章还介绍了enum class的高级用法,包括安全转换函数、枚举值遍历、作为容器键以及运算符重载等实用技巧,为开发者提供了更安全、更灵活的枚举使用方案。
2026-01-26 17:49:00
361
原创 c++ 学习笔记之 volatile与atomic
counter这个操作不是原子的,它包含了三个步骤:读取counter的值、将值加 1、将结果写回counter。在多线程中,线程可能会更改共享变量,但是编译器优化可能会将共享变量存入缓存中,当线程修改该共享变量时,主线程可能取到的还是缓存中的值,从而导致错误发生。volatile是 C++ 中用于修饰变量的关键字,核心作用是「告诉编译器不要对该变量做优化,每次读写都直接访问内存,而非寄存器。volatile的主要功能是保证变量的内存可见性(每次读写直接操作内存,不缓存到寄存器),但不能保证原子性。
2026-01-19 17:33:44
656
原创 c++ 学习笔记之 shared_ptr
本文介绍了shared_ptr的两种初始化方法:常规初始化(与new配合使用)和make_shared函数,并比较了两者的区别。常规初始化存在内存泄漏风险且效率较低,而make_shared通过单次内存分配同时存储对象和控制块,提高了效率。调试分析显示make_shared将强引用和弱引用计数初始化为1,并实现内存连续分配。此外,make_shared避免了C++17前参数求值顺序导致的内存泄漏问题,但其内存释放可能延迟,需等待最后一个shared_ptr销毁才会释放整个内存块。
2026-01-16 17:00:47
614
2
原创 c++ 学习笔记之 模板元编程
本文介绍了C++模板元编程(TMP)和SFINAE技术。模板元编程通过在编译期完成计算和逻辑推导,利用模板特化、递归和类型萃取等特性实现编译期编程。示例展示了编译期常量计算、条件分支、类型萃取和递归模板等核心概念。SFINAE(替换失败非错误)技术则允许编译器在模板参数替换失败时尝试其他特化版本,C++20后可用Concepts替代大部分SFINAE应用。文章还介绍了标准库<type_traits>提供的类型检查、修改和推导工具,以及C++14/17引入的便利语法。
2026-01-10 18:33:57
584
原创 c++ 学习笔记之 malloc
本文介绍了Linux系统中内存分配机制。内存布局分为栈和堆,分别向下和向上扩展。malloc底层主要通过brk/sbrk和mmap系统调用实现:brk扩展堆内存,mmap用于大内存分配。ptmalloc作为内存池管理机制,使用chunk结构管理内存块,包含prev_size、size等字段。分配流程包括搜索空闲链表、扩展堆或使用mmap、拆分大块;释放流程则涉及标记空闲、合并相邻块和缩小堆。ptmalloc通过内存池管理减少系统调用和内存碎片,优化性能。
2026-01-08 17:38:24
964
原创 c++ 学习笔记之 new
本文探讨了C++中new和delete操作符的底层机制。通过反汇编分析发现,new操作符实际上调用了operator new函数(内部使用malloc分配内存)和构造函数;delete操作符则先调用析构函数,再通过operator delete(内部使用free)释放内存。实验表明,内存分配时会额外存储分配大小信息。文章还演示了如何重载类内的operator new/delete来自定义内存管理,并指出使用::new/::delete可调用系统默认实现。最后提到后续将补充operator new[]/del
2026-01-06 18:04:34
698
原创 c++ 学习笔记之 const 与constexpr
本文介绍了C++中const和constexpr两个关键字的用法与区别。const用于声明只读变量,确保初始化后不可修改,可修饰变量、指针、函数参数和成员函数。constexpr则强调编译期确定值,可修饰变量、函数和类,要求表达式必须在编译时计算。const应用范围更广,允许运行时确定值;constexpr更严格,必须编译期确定值。两者都能提高代码安全性和效率,但适用场景不同:const用于运行时常量,constexpr用于编译时常量。
2026-01-05 14:34:13
1049
原创 算能bmcv用于图像前处理
之前在文章中写过适配算能模型的一篇文章,有关算能SE7盒子适配yolov5的相关问题,其中给出了yolov5的前处理代码,此代码中前处理用的是原生opencvd的一些接口,所以不免会增添cpu的负担。其实盒子中自带的sophon-opencv并不是让你去使用原生接口的,而更倾向于bmcv。使用bmcv可以将前处理的一些操作放到推理卡上处理,能在一定程度上减轻cpu和内存的负担。
2025-03-07 17:34:23
1102
3
原创 TensorRT中onnx如何转换成engine模型
官方yolov5中是自带转engine的python程序的,可以直接使用,本文是自己使用tensorrt自己写的一个保存engine文件的小代码,用来分享。需要一个json文件。可以自己写一个,根据自己的onnx模型的不同,json文件也不尽相同。
2025-02-24 17:16:06
433
原创 【MobaXterm破解数量上限限制】
在使用MobaXterm保存linux连接会话的时候,发现最多只能保存14个会话,再新增会话时不会保存,导致后续链接每次必须重新输入会话信息。如此使用起来非常不方便,本文就如何解除此限制做详细介绍。
2024-11-30 11:17:04
7053
6
原创 NVIDIA官网如何下载旧版驱动
许多小伙伴可能有一些困扰,就是自己可能需要固定版本的驱动,但是NVIDIA官网找不到所需版本的驱动,官网只会给你展示最新的不同CUDA 版本的那么一两个驱动,本文可以帮助你找到自己需要的驱动程序。
2024-11-30 10:42:06
21012
11
原创 CV-CUDA初学习
NVIDIA CV- cuda™是一个开源项目,用于构建云级人工智能(AI)成像和计算机视觉(CV)应用程序。它使用图形处理单元(GPU)加速来帮助开发人员构建高效的预处理和后处理管道。它可以将吞吐量提高10倍以上,同时降低云计算成本。
2024-08-06 17:53:42
1706
原创 龙芯 安装CMake
该版本的loongnix自带了3.13版本的cmake,可以直接使用。但有些项目可能会需要较高版本的cmake,此时需要升级cmake版本。
2023-09-28 10:37:16
930
原创 【如何使用Docker将容器打包成镜像】
本文主要讲解如何将现有的容器打包为镜像以及如何将现有的镜像打包为tar文件并在新环境中重新载入。希望你天天过得开心!
2023-03-27 10:44:11
27586
6
原创 简单的c++ 多态讲解
多态又分为静态多态和动态多态:(1)静态多态:函数重载和函数模板实例化出多个函数(本质也是函数重载)即静态多态也称为编译期间的多态。(2)动态多态,也称为动态绑定或后期绑定(晚绑定):运行时的多态性可通过虚函数实现。此文章只进行动态多态的讲解简单点来说,多态就是函数调用的多种形态,使用多态能够使得不同的对象去完成同一件事时,产生不同的动作和结果。必须通过基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。
2023-03-21 11:46:53
218
1
黑马旅游网 2019 1.2.zip
2020-06-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅