自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (3)
  • 收藏
  • 关注

原创 cmake 升级

本文介绍了四种升级CMake到v3.30.4的方法:1)源码编译安装(推荐,支持Ubuntu/Debian和CentOS系统);2)使用pip快速安装;3)下载预编译二进制文件;4)通过apt仓库安装(适用于Ubuntu 24.04+)。每种方法都提供了详细的操作步骤,包括依赖安装、下载、编译/安装及版本验证。源码编译方式最为灵活可靠,pip安装最为简便,用户可根据实际需求选择适合的升级方案。

2025-12-11 17:13:47 364

原创 解决报错:TLS initialization failed

本文分享了使用Qt Network模块时遇到的OpenSSL初始化失败问题(TLS initialization failed)的解决方法。问题通常是由于Qt无法找到匹配的OpenSSL库导致。解决方案包括:确认Qt版本和架构(32/64位),获取对应OpenSSL库文件,将库文件部署到应用程序可执行路径或系统PATH目录。文章提供了不同Qt版本对应的OpenSSL版本对照表,并推荐了多个获取OpenSSL预编译版本的第三方资源。最后通过测试代码验证SSL支持是否正常启用,强调匹配版本和架构是关键。

2025-11-06 12:31:35 736

原创 手搓一个CUDA JIT编译器

本文介绍了两种实现CUDA JIT(即时)编译的方法:使用nvcc编译器和NVRTC运行时编译库。前者需要将kernel代码写入临时文件再编译,后者可直接处理字符串。文章给出了两种方法的代码示例,并提出了使用哈希表缓存已编译的cubin文件以优化性能的方案,实现"零编译"目标。通过对比两种方法,展示了如何为Python绑定CUDA设计高效的JIT编译组件。

2025-10-23 20:05:09 402

原创 pybind11: python如何调用C/C++接口

本文介绍了使用pybind11实现Python调用C/C++接口的方法。主要内容包括: pybind11安装方式:通过git子模块或pip安装 Python调用C/C++函数:演示了普通函数绑定、返回值策略处理、可变参数处理和默认参数设置 Python调用C++类:展示了类绑定、构造函数定义、成员函数绑定,以及如何通过匿名函数实现__repr__方法 成员变量暴露:介绍了如何将C++类的成员变量暴露为Python属性 文章提供了详细的代码示例,包括函数绑定、类绑定和属性访问的实现方法,并说明了编译生成Pyt

2025-09-17 18:08:56 946

原创 GDB调试教程

GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于一个c/c++程序员,GDB是必不可少的工具,所以本篇将讲解一些GDB在LInux的调试。以及除了使用指令外,如何在vscode中使用gdb,还有利用gdb如何定位core dump代码。

2025-09-15 15:40:39 846

原创 NVIDIA Nsight 终极攻略:从系统级分析到内核级优化的完整指南

本文介绍了NVIDIA Nsight工具套件在GPU性能优化中的应用。Nsight系列包含三大核心工具:Nsight Systems用于系统级性能分析,Nsight Compute专注于CUDA内核微架构分析,Nsight DL Designer用于深度学习模型优化。文章详细讲解了Nsight Systems的低开销数据采集机制及其在GPU利用率诊断、内存传输瓶颈定位等场景的应用,以及Nsight Compute的内核级性能分析方法。通过一个双线性缩放算法的CUDA实现示例,演示了如何使用Nsight工具进

2025-09-10 11:22:01 1357

原创 互斥锁、自旋锁、递归锁

在多线程中我们经常能用到锁的概念,那么我们就需要去认识我们场景的几种锁:互斥锁、自旋锁、递归锁。本篇文章会详细介绍各种锁的特点以及使用场景。特性互斥锁自旋锁可重入锁(递归锁)等待机制睡眠等待忙等待(自旋)通常是睡眠等待(互斥锁的特例)性能开销上下文切换开销空耗CPU开销稍高于普通互斥锁(维护计数器)适用场景锁持有时间较长锁持有时间极短,且为多核CPU需要同一线程重复加锁的场景可能导致的问题上下文切换 overheadCPU资源浪费设计复杂,容易滥用,掩盖糟糕的设计。

2025-09-02 17:06:46 896

原创 Bank Confilct的发现与规避

在NV的共享内存中,为了支持同时上百个现成提供高带宽的访问,硬件被分叉多个同样大小的、能独立访问的模块,这些模块就被称之为Bank。而多个线程同时访问同一个Bank的不同地址时,就会发生。

2025-08-29 11:52:51 746

原创 Dockerfile

Dockerfile是一种用于定义和构建 docker 镜像的文本文件。它包含一系列的指令和参数,用于描述镜像的构建过程,包括基础映像、软件包安装、文件拷贝、环境变量设置等。通过编写Dockerfile,可以将应用程序、环境和依赖项打包成一个独立的容器镜像,使其可以在不同的环境和平台上运行,实现应用程序的可移植性和可扩展性。基础镜像:使用FROM指令可以指定基础镜像,在此基础镜像基础上,我们可以来开发自己的镜像。基础镜像一般包含了基础操作系统(ubuntu/centos)以及一些预装的工具与软件。

2025-08-21 18:42:34 931

原创 Docker在Linux中安装与使用教程

什么是DockerDocker是一个用于开发、发布和运行应用程序的开放平台。Docker使您能够将应用程序从基础设施中分离出来,以便快速交付软件。使用Docker,您可以像管理应用程序一样管理基础架构。通过利用Docker的方法来交付、测试和部署代码,您可以显著减少编写代码和在生产环境中运行代码之间的延迟。什么是Docker镜像镜像是一种轻量级、可执行的独立软件包。它包含运行某个软件所需的所有内容,包含代码、运行时库、环境变量和配置文件。将所有的应用和环境直接打包到docker镜像里,并且可以直接运行。

2025-08-20 20:34:50 2509

原创 Linux Miniconda安装教程与conda常用指令介绍

摘要: Miniconda是一个轻量级Python环境管理工具,支持创建隔离的虚拟环境并管理依赖包。其核心优势包括:体积小巧(相比Anaconda)、跨平台兼容、支持多Python版本共存。安装时可通过官方脚本一键部署,使用conda create创建环境,conda activate激活环境,并通过conda install安装包。支持环境导出(conda env export)与克隆,便于协作。国内用户可配置清华/中科大镜像源加速下载。若Conda源缺失特定包,可在环境中使用pip并指定国内镜像源。常用

2025-08-18 15:16:32 3247

原创 日志管理--g3log

大家在开发项目时,相信都非常希望对自己的日志进行管理操作,今天给大家介绍一个licence友好并开源的日志管理框架g3log,它是由g2log的演变而来,相比g2log有发幅度的性能提升。G3log 主要特性:日志和契约式设计框架异步调用线程安全队列式日志捕获和记录 SIGSEGV 以及其他严重的信号在 Linux/OSX 上严重的信号会生成堆栈记录G3log 跨平台,支持 Windows, Linux 和 OSX。

2025-08-12 18:01:04 384

原创 cuda排序算法--双调排序(Bitonic_Sort)

本篇文章是CUDA系列之排序算法系列的双调排序,将详细介绍排序算法,并附带CUDA代码源码,下面我们来一睹为快。

2025-08-12 14:16:08 1373

原创 cuda算子--softmax算子与优化

本文介绍了softmax函数在CUDA上的实现方法。首先解释了softmax函数的数学原理,该函数能将多个线性输出转化为概率值。随后详细描述了CUDA实现的三步流程:1)求每行最大值;2)计算exp_sum;3)计算概率值。实现中采用了二维线程块设计,x维度处理softmax,y维度和grid维度处理batch。文章提供了完整的CUDA核心代码,包括模板操作、归约计算和向量化处理等关键实现细节,特别展示了如何利用float4类型进行向量化优化以提高计算效率。

2025-08-08 17:31:43 885

原创 CUDA算子 -- Reduce算子

前面我们讲解了很多的CUDA基础知识,后面我们将开始一些CUDA的实战算子与算法分享,以及其所需要掌握的CUDA功能的介绍。

2025-08-05 19:57:09 626

原创 CUDA系列之编程基础

前面我们简单介绍了环境安装以及Runtime API,想必对于CUDA编程充满了好奇,本节将重点讲解一些CUDA异构编程的一些基础知识,希望大家学习后,能写出简单的CUDA kernel。

2025-08-01 16:22:56 583

原创 CUDA系列之常用Runtime API简介

runtime api 简介

2025-07-31 17:53:25 882

原创 CUDA系列之CUDA安装与使用

从本期开始,将由浅入深开始CUDA系列的文章分享,此系列所有文章全部免费,欢迎大家体验白嫖的快乐!其实很早开始就想写CUDA系列,酝酿了很久,CUDA真是一门非常不错的异构编程语言,目前在大模型,AI人工智能,自动驾驶以及CV等领域大放异彩。因为目前我从事的真好跟CUDA相关的工作,希望通过我的分享,让更多的人了解,甚至喜欢上CUDA这门编程语言。Tips推荐书籍: 《CUDA C编程 权威指南》

2025-07-31 16:40:32 490

原创 算法系列之深度优先和广度优先

在图论和算法领域,深度优先搜索(DFS)和广度优先搜索(BFS)是两种基础而强大的遍历策略。它们就像探索未知世界的两种不同性格的冒险家:DFS像一位执着的前行者,一条路走到底再回头;BFS则像一位谨慎的规划者,一层一层向外扩展。本文将深入探讨这两种算法的原理、实现和应用,帮助你全面理解它们的异同点。特性深度优先搜索 (DFS)广度优先搜索 (BFS)核心策略深度优先 (纵向探索)广度优先 (横向探索)数据结构栈 (递归/显式栈)队列空间效率通常较低 (O(h) 或 O(V))

2025-06-19 15:17:33 1000

原创 深入理解 CMake 的 cmake_parse_arguments

在 CMake 中创建可重用的宏或函数时,经常需要处理带选项的参数列表。手动解析 argc 和 argv 风格的参数既繁琐又易错。cmake_parse_arguments 命令提供了优雅的解决方案,支持关键字选项、单值参数和多值参数的解析。本文将结合实际用例详解其用法。可选 VERBOSE 开关必需指定输出文件名 (OUTPUT)多个源文件 (SOURCES)多个编译选项 (OPTIONS)# 定义宏# 定义参数规则# 解析参数ARG${ARGN}# 检查必需参数")

2025-06-18 16:15:42 491

原创 算法系列之树的层序遍历

小伙伴们大家好呀!又给大家可以讲解算法题目了。前面我们讲解了先根、中根、后根遍历,今天我们来介绍另一种常见的。历方式层序遍历。层序遍历顾名思义就是按层一层层遍历定义二叉树char val;

2025-06-16 09:27:21 306

原创 CMake系列之FetchContent 模块使用

在项目开发过程中,经常需要引入一些第三方库,我们可以会使用gitsubmodule来引入,而本文给大家介绍一个cmake的FetchContent 模块,并在文章结尾附上gtest开箱即用的实践用例。能给广大开发人员带来些许帮助是我创造的动力该模块可用于获取外部依赖库,并且只在构建生成文件过程中才会被调用,如果想让工程项目变得比较简洁,是一个不错的选择。

2025-05-23 11:34:19 757

原创 算法系列之十大经典排序算法

我们知道CPU有很多经典的排序算法,比如:快排,归并等等,本节将对这些排序算法做一个总结,并附上c++代码实现算法时间复杂度(average)时间复杂度(max)时间复杂度(min)空间复杂度稳定性归并排序Onlog2nO(nlog_2n)Onlog2​nOnlog2nO(nlog_2n)Onlog2​nOnlog2nO(nlog_2n)Onlog2​nOnO(n)On稳定冒泡排序On2。

2024-12-14 09:35:40 985

原创 一篇文章精通CMake

cmake是大型工程非常常见的软件集成工具,掌握cmake的用法,可以让我们在项目搭建过程中如鱼得水,更新详细的介绍,可以参考官方文档, 本文主要总结一些我们项目构建过程中非常常用的一些功能。

2024-12-14 01:15:02 372

原创 Makefile详解

Makefile 是用于管理项目构建过程的工具,广泛用于 C/C++ 等语言的编译。它通过定义规则和指令,自动化编译、链接等步骤,大大简化了开发者的工作。并且即使是一些其他的编译构建工具,最终也是以生成makefile为目的,比如cmake,所以了解Makefile的一些语法,对于项目构建非常重要make 是工作原理是:读取Makefile中所定义的规则,通过规则来递归遍历所有的依赖以及执行指令,最终完成整个工程的构建上面的意思表示SRC变量就是main.cpp这个字符串,我们可以使用${SRC}或者。

2024-12-12 15:11:33 981

原创 算法系列之左视图和右视图

前一篇文章讲解了二叉树的几种遍历方式(先根,中根和后根遍历), 在此基础上,让我们来进一步理解一下二叉树的左视图和右视图如上图所示,左视图我们形象德看着一个人从左边看这棵树,那么他能看到哪些节点呢?答案是A,B,C,E;同理,右视图则只能看到A,G,H,F。

2024-12-05 18:00:10 583

原创 算法系列之二叉树(先根、中根、后根)遍历

本算法系列会给大家讲解一系列常见的算法,本节主要讲解二叉树的先根、中根、后根遍历, 并附上C++算法源码,方便大家面试时参考本节将以以下这个经典二叉树为例为大家讲解其遍历方法定义二叉树节点char val;

2024-12-05 15:29:00 631

原创 Flash Attention源码学习之安装使用与接口参数说明(第二篇)

前一篇我们讲解了Flash Attention的原理,后续会陆陆续续推出Flash Attention的源码学习笔记,本篇主要讲解如何在本地Flash Attention的安装使用与接口参数说明。

2024-12-03 19:47:41 2538 1

原创 一篇文章精通套接字(Socket) 并附上源码

前面我们讲述了gRPC的通讯协议, 其通讯底层还是使用的套接字技术。本篇文章会详细讲解socket通信流程socket接口定义实现一个一对多的通信源码,开箱即用那么什么是套接字技术呢?套接字就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。要在主机与主机之间进行通讯,只是需要一对套接字,套接字之间的连接过程可以分为三个不走:服务器监听、客户端请求、确认连接服务器监听:是服务器端绑定端口后,进入一种等待连接的状态,实时监控网络状态客户端请求:是指客户端向指定的ip和端口发送连接请求。

2024-12-03 13:39:56 1060

原创 Flash Attention源码学习之原理(第一篇)

V - Value, 内存张量,Shape是[Batch, Seq_len_kv, Head_num, Hide_dim]K - Key, 索引张量,Shape是[Batch, Seq_len_kv, Head_num, Hide_dim]Q - Query, 查询张量,Shape是[Batch, Seq_len, Head_num, Hide_dim]- 特征维度,主要是为了控制矩阵点乘后的范围,以确保softmax的梯度稳定性,经常取值等于Hide_dim。Self-Attention 公式如下。

2024-11-29 08:46:14 1259

原创 gtest进阶之gtest的高级用法

前面一篇【gtest保姆级教程】中我们讲解了一些gtest的入门知识,gtest除了TEST_F和TEST外,还有更加高级的用法,使用这些高级用法,会让你的测试效率极大提高,往往一小段测试代码就可以生成出大量的测试集,让你的测试效率事半功倍。

2024-11-26 21:07:53 1109

原创 gtest保姆级教程

gtest是什么?: gtest是google下面的一块跨平台测试框架,它是为C++测试而生成的,支持自动测试以及丰富的用户断言,并且支持并行运行如果是希望学习python的测试框架,可以进入另一篇文章【熟练掌握pytest 单元测试框架】中进行学习。

2024-11-26 20:08:30 1325

原创 熟练掌握pytest 单元测试框架

pytest是一个非常强大的python测试框架,熟练掌握pytest对于自动化测试工程非常重要,下面来分享一些我的使用经验。

2024-11-26 16:10:03 865

原创 彻底解决Qt6中使用QtGraphicalEffects的问题

本文章讲述我在Qml使用QtGraphicalEffects模块时遇到的一些坑,供大家参考。

2024-11-22 00:41:26 2630 1

原创 gRPC实现第一个C++服务器

本章节将实现C++版本的个人注册页面的gRPC服务器更多基础知识可以参考上一节:GRPC 快速入门要定义服务,需要在login.proto文件中指定一个名为service的内容,另外我们还需要定义一个LoginInfo的消息体用来传递信息//指定版本信息,不指定会报错//package声明符,用来防止不同的消息类型有命名冲突// 注册消息体// 状态码,0表示成功// 返回信息,包含成功或错误描述// 定义服务将.proto 翻译成C++文件。

2024-11-21 19:04:02 672

原创 GRPC 快速入门

我们强烈建议您本地安装 gRPC——使用适当设置的 CMAKE_INSTALL_PREFIX——因为在您全局安装 gRPC 后,没有简单的方法将其卸载。您需要 cmake 的 3.13 版或更高版本。请按照以下说明进行安装。您刚刚使用 gRPC 运行了一个客户端-服务器应用程序。使用cmake进行源码编译。

2024-11-19 20:20:38 362

原创 Protobuf详解以及入门指南

Protobuf(Protocol Buffers)协议是由 Google 开发的二进制序列化格式技术它提供了一种高效、简洁和可扩展的方式来序列化和交换数据

2024-08-26 16:19:34 1589

原创 Opencv学习笔记(一)

什么是OpenCVOpenCV是一个开源的计算机视觉库,可以从http://opencv.org获取。OpenCV库用C和C++语言编写,可以在Windows、Linux、MacOS等系统运行。同时也积极开发Python、Java、Matlab以及其他一些语言的接口。从Git获取最新的OpenCV在Windows上,如果想要从Git获取OpenCV最新版本,你需要访问https://gitbub.com/opencv/opencv.git在linux上,只需要输入如下指令:git clone ht

2020-09-05 12:46:08 234

ros串口通讯c++实现

使用前,先安装sudo apt install ros-kinetic-serial 库,再进行编译

2020-08-31

g3log 日志管理

这是一个开源的日志管理系统,但是现有接口过于落后,不过很成熟与稳定,个人长期使用,可以将该接口进一步封装成更加友好的接口进行使用。

2020-08-31

基于g3log日志管理

该日志管理系统基于g3log使用,请先安装g3log再进行编译;同时该日志管理系统继承了ros的日志使用习惯,方便熟悉ros的朋友使用。

2020-08-31

空空如也

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

TA关注的人

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