GPU、CUDA 和 cuDNN 学习研究【笔记】
分享自己在入门显存优化时看过的一些关于 GPU 和 CUDA 和 cuDNN 的网络资料。
更多内容见:
- Ubuntu 22.04 LTS 安装 PyTorch + CUDA 深度学习环境-CSDN博客
- CUDA 计算平台 & CUDA 兼容性【笔记】-CSDN博客
文章目录
- GPU
- CUDA
- CUDA Toolkit都包含什么?
- NVIDIA Docker CUDA容器化原理分析
- 什么是CUDA Runtime,cudart,和CUDA Driver
- CUDA 版本兼容性
- CUDA 内存管理 API
- CUDA Stream: Asynchronous & Synchronize
- cuDNN
GPU
以下内容来自 B 站视频:《解密GPU - 探寻计算机中的"神笔马良"》,原视频已下架
按照产品的应用场景可以划分为三大系列:消费级系列、专业级系列、数据中心级。RTX 代表具备光线追踪能力,GTX 是不具备光追功能里最好的。4080是具体的型号,40表示的是第几代,80表示同一代里的不同档次。标注为黄色的微架构仅用于显示卡,蓝色的仅用于计算卡,红色的则是二者兼具,绿色的则是从2014年开始推出的嵌入式平台(一般用于移动设备或边缘计算设备)。
带有global前缀的函数被称为核函数,是CPU或称host向GPU或称device发送的执行逻辑。用三个<号和>号包裹起来的部分是host对发送到device上整个任务的一个维度切分操作。
整个任务被称为grid,逗号前后代表的是两个大的分割维度,前面是要把一个grid切分成多少个block,后面则是把一个block切分为多少个thread。这里的thread可以等价理解为task要执行的任务,也就是上面这个核函数里面的具体逻辑。
从代码逻辑角度来看,用户写的CUDA程序会被映射为grid,grid再切分为block,block再切分为thread。切分好之后的任务包被发送到GPU上,最终每个block会被分配到一个指定的SM上。block的整个执行逻辑都会固定在某一个SM上。
以下内容来自:Nvidia GPU虚拟化 - 知乎
在深度学习领域,Nvidia GPU的软件调用栈大致如下图所示,从上至下分别为:
- User APP:业务层,如训练或推理任务等
- Framework:框架层,如tensorflow、pytorch、paddle、megengine等
- CUDA Runtime:CUDA Runtime及周边生态库,如cudart、cublas、cudnn、cufft、cusparse等
- CUDA User Driver:用户态CUDA Driver,如cuda、nvml等
- CUDA Kernel Driver:内核态CUDA Driver,参考官方开源代码,如nvidia.ko等
- Nvidia GPU HW:GPU硬件

CUDA
根据 CUDA 专区 - 资源库 | NVIDIA 开发者 的介绍:在 GPU 加速应用程序中,工作负载的顺序部分在 CPU 上运行,而应用程序的计算密集型部分则在数千个 GPU 核心上并行运行。CUDA 是 NVIDIA 开发的一个并行计算平台和编程模型,用于在图形处理单元 (GPU) 上进行通用计算。借助 CUDA,开发者能够利用 GPU 的强大功能显著加快计算应用程序的运行速度。
CUDA Toolkit都包含什么?
以下内容来自:CUDA相关 | CUDA Toolkit都包含什么? - 知乎
见上图第四个方块,CUDA分为两部分,CUDA Toolkit和CUDA Driver。其中,CUDA Toolkit是一个全面的工具集,提供了一系列工具和库,包括GPU加速的库、编译器、开发工具和CUDA Runtime,用于开发、优化和部署GPU加速的应用程序。
- CUDA Runtime (cudart) Libraries:用于支持GPU上的并行计算的运行时库,包括CUDA API。
- CUDA NVCC:NVIDIA CUDA编译器,用于将CUDA源代码编译为GPU可执行文件。
- CUDA加速的库:
- CUDA cuBLAS:用于执行基本线性代数子程序(BLAS),加速矩阵和向量运算。
- CUDA cuFFT:用于执行快速傅立叶变换,加速信号和频谱分析。
- ……
- CUDA 开发工具(Development Tools):
- CUDA nvprof:用于性能分析的工具,帮助开发人员优化CUDA应用程序。
- Nsight Compute:用于性能分析和调试CUDA应用程序的工具。
- Nsight Systems:用于系统性能分析的工具,支持多个操作系统。
- NVIDIA Drivers:
- NVIDIA Linux Driver:NVIDIA的Linux驱动程序,用于支持NVIDIA GPU的运行,支持多个体系结构。
- NVIDIA Windows Driver:NVIDIA的Windows驱动程序,用于支持NVIDIA GPU的运行,支持Windows和WSL。
为了方便用户,NVIDIA驱动程序通常会随CUDA Toolkit一起安装。但是,这个驱动程序是为了开发目的而安装的。这意味着它主要用于开发和调试CUDA应用程序,以帮助开发人员在其工作站上进行开发和测试。这个驱动程序不建议在生产环境中与Tesla GPU一起使用。在生产环境中,通常需要专门的、经过验证的驱动程序以确保系统的稳定性和性能。用户在安装CUDA Toolkit时,具体取决于操作系统和安装方式,可以选择是否安装NVIDIA驱动程序。
NVIDIA Docker CUDA容器化原理分析
以下内容来自:NVIDIA Docker CUDA容器化原理分析-腾讯云开发者社区-腾讯云
CUDA API体系包括:CUDA函数库(CUDA Libraries),CUDA运行时API(CUDA Runtime API),CUDA驱动API(CUDA Driver API),结构图如下
CUDA Driver API:GPU设备的抽象层,通过提供一系列接口来操作GPU设备,性能最好,但编程难度高,一般不会使用该方式开发应用程序。
CUDA Runtime API:对CUDA Driver API进行了一定的封装,调用该类API可简化编程过程,降低开发难度;
CUDA Libraries:是对CUDA Runtime API更高一层的封装,通常是一些成熟的高效函数库,开发者也可以自己封装一些函数库便于使用;
应用程序可调用CUDA Libraries或者CUDA Runtime API来实现功能,当调用CUDA Libraries时,CUDA Libraries会调用相应的CUDA Runtime API,CUDA Runtime API再调用CUDA Driver API,CUDA Driver API再操作GPU设备。
什么是CUDA Runtime,cudart,和CUDA Driver
以下内容来自:CUDA相关 | 什么是CUDA Runtime,cudart,和CUDA Driver - 知乎
- CUDA Driver 类似于搬砖工人;
- CUDA Runtime 类似于分发任务的包工头;
- CUDA Library 类似于建筑设计师。
在CUDA生态里,最底层的是CUDA Driver,直接负责访问GPU硬件。
CUDA Runtime是一个库。它建立在CUDA driver API之上,包含了与CUDA Driver交互的函数和工具,帮助程序员管理设备内存、调度并行任务和进行数据传输等操作。更具体来说,它包括一组函数和工具,用于管理GPU设备、分配内存、执行核函数(Kernel Functions,即在GPU上并行执行的函数),以及在主机(CPU)和设备(GPU)之间进行数据传输。
cudart就是 CUDA Runtime的实现,rt就是Runtime的缩写。
CUDA Runtime被实现在cudart库中,cudart库用于与应用程序链接。因此报错与cudart.so相关时,可以考虑是不是编译cuda程序时的cuda runtime库与运行cuda程序时的cuda runtime库版本不一致,导致动态链接出问题。详见CUDA相关 | libcudart.so是什么(静态链接与动态链接)。
CUDA Driver和CUDA Runtime都有各自的API接口,为上层的软件提供调用接口。
对于许多应用来说,使用CUDA Runtime已经足够了,并不需要使用CUDA driver API。CUDA driver API提供了更底层的控制,可以直接暴露一些较低级别的概念,比如CUDA上下文(contexts)和CUDA模块(modules)。
而其他一些库在运行时需要调用CUDA Runtime库。CUDA Runtime是一个库!和numpy类似,就是一个库,只不过提供的功能比较复杂高级!它提供了一些可以控制GPU的功能,所以其他要使用GPU的库要调用它。(虽然说CUDA Runtime这些功能最后又是通过调用CUDA driver API实现的。)
CUDA 版本兼容性
以下内容来自:CUDA相关 | 版本兼容性 - 知乎
运行CUDA应用程序需要满足一些硬件和软件要求。
- 首先,系统必须拥有支持CUDA的NVIDIA GPU,因为CUDA是GPU加速计算的技术。
- 此外,系统必须安装与构建应用程序时使用的CUDA Toolkit兼容的NVIDIA显示驱动程序。不同版本的CUDA Toolkit可能需要不同版本的NVIDIA驱动程序,以确保应用程序能够正常运行。
- 对于一些CUDA应用程序,它们可能依赖于外部库,这些库需要在运行时与应用程序进行动态链接。如果应用程序使用这些外部库,系统必须安装与应用程序要求的库版本兼容的库文件。
CUDA driver API 的向后兼容:CUDA driver API是用于管理GPU、编译和执行GPU代码的一组函数和工具。随着版本升级,CUDA驱动API可能修复错误或提供改进的性能。即,驱动API是向后兼容的。使用1.0版的驱动API编译的程序在2.0版的GPU设备驱动上可以运行。如图:

CUDA Runtime版本一致性:如果应用程序使用了插件和库,这些插件和库必须使用相同版本的CUDA Runtime,除非它们通过静态链接到Runtime。需要注意的是,如果使用nvcc链接应用程序,静态版本的CUDA Runtime库将默认使用,并且CUDA Toolkit库都是静态链接到CUDA Runtime的。
CUDA 内存管理 API
不做重点研究,相关内容可参考:
- CUDA Runtime API :: CUDA Toolkit Documentation
- NVIDIA CUDA Library: Memory Management
- CUDA GPU编程指南:内存的申请,释放与拷贝 - 半个C++程序员-大脸猫
- CUDA编程入门之处理Device显存的三个CUDA API-CSDN博客
CUDA Stream: Asynchronous & Synchronize
不做重点研究,相关内容可参考:
- 如何在 CUDA C/C++ 中实现数据传输的重叠 - NVIDIA 技术博客
- CUDA ---- Stream and Event - 苹果妖 - 博客园
- CUDA随笔之Stream的使用 - 知乎
- cuda基础之异步启动 - 知乎
cuDNN
以下内容来自:CUDA系列 | 什么是cuDNN? - 知乎
cuDNN全称NVIDIA CUDA® Deep Neural Network library, 是一个用于深度神经网络的GPU加速库。
cuDNN包含了为神经网络中常见的计算任务提供高度优化的实现。包括前向卷积、反向卷积、注意力机制、矩阵乘法(matmul)、池化(pooling)和归一化(normalization)等。
cuDNN的最常见用途是在深度学习框架(如TensorFlow或PyTorch)的开发中。深度学习框架开发者在编写框架时,通常会调用cuDNN,从而几乎不直接与CUDA进行交互。
直接使用CUDA的情况只在以下两种情况下出现:
- 实现自定义层(custom layer):如果需要创建一个深度学习模型中的自定义层,该层的计算不是标准的深度学习操作,那么你可能需要直接使用CUDA编写这些自定义操作。
- 为了提高计算效率,合并多个层:在某些情况下,你可能希望将多个标准层合并为一个更大的操作,以提高计算效率。这可能需要直接使用CUDA来执行这些合并操作。
对于普通深度学习应用的终端用户来说,通常不需要使用cuDNN。
CUDA Toolkit不包含cuDNN:
- CUDA Toolkit是一个更底层的工具包,其中的库针对的是更基础的操作,比如线性代数(cuBLAS: 加速矩阵和向量运算)、信号分析(cuFFT: 用于执行快速傅立叶变换)。
- cuDNN是专门为深度学习的各种运算所设计的库。它需要使用CUDA Toolkit中的一些库。
上图出自:Types oNVIDIA GPU Architectures For Deep Learning
相关文章:
GPU、CUDA 和 cuDNN 学习研究【笔记】
分享自己在入门显存优化时看过的一些关于 GPU 和 CUDA 和 cuDNN 的网络资料。 更多内容见: Ubuntu 22.04 LTS 安装 PyTorch CUDA 深度学习环境-CSDN博客CUDA 计算平台 & CUDA 兼容性【笔记】-CSDN博客 文章目录 GPUCUDACUDA Toolkit都包含什么?NVID…...
AI-学习路线图-PyTorch-我是土堆
1 需求 PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili PyTorch 深度学习快速入门教程 配套资源 链接 视频教程 https://www.bilibili.com/video/BV1hE411t7RN/ 文字教程 https://blog.csdn.net/xiaotudui…...
Android Camera API 介绍
一 StreamConfigurationMap 1. StreamConfigurationMap 的作用 StreamConfigurationMap 是 Android Camera2 API 中的一个核心类,用于描述相机设备支持的输出流配置,包含以下信息: 支持的格式与分辨率:例如 YUV_420_888、JPEG、…...
活动预告 |【Part 1】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁
课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…...
RabbitMQ 消息顺序性保证
方式一:Consumer设置exclusive 注意条件 作用于basic.consume不支持quorum queue 当同时有A、B两个消费者调用basic.consume方法消费,并将exclusive设置为true时,第二个消费者会抛出异常: com.rabbitmq.client.AlreadyClosedEx…...
web第二次作业
一.后台管理系统首页代码 1.html代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>实验&l…...
AI 编程开发插件codeium Windsurf(vscode、editor) 安装
1、vscode中安装: 2、vscode中使用 3、输入注册的账号密码,就可以使用。 4、或者直接下载editor 5、安装editor 下一步,下一步,直到安装成功,中间可以改下安装位置,如果C盘空间不够。 同样提示注册或者登录…...
变压器-000000
最近一个项目是木田12V的充电器,要设计变压器,输出是12V,电压大于1.5A12.6*1.518.9W. 也就是可以将变压器当成初级输入的一个负载。输入端18.9W. 那么功率UI 。因为变压器的输入是线性上升的,所以电压为二份之一,也就是1/2*功率…...
C# OpenCvSharp 部署MOWA:多合一图像扭曲模型
目录 说明 效果 项目 代码 下载 参考 C# OpenCvSharp 部署MOWA:多合一图像扭曲模型 说明 算法模型的paper名称是《MOWA: Multiple-in-One Image Warping Model》 ariv链接 https://arxiv.org/pdf/2404.10716 效果 Stitched Image 翻译成中文意思是&…...
Ai无限免费生成高质量ppt教程(deepseek+kimi)
第一步:打开deepseek官网(DeepSeek) 1.如果deepseek官网网络繁忙,解决方案如下: (1)使用easychat官网(EasyChat)使用deepseek模型,如图所示: (2)本地部署&…...
LLMs之DeepSeek r1:Logic-RL的简介、安装和使用方法、案例应用之详细攻略
LLMs之DeepSeek r1:Logic-RL的简介、安装和使用方法、案例应用之详细攻略 目录 Logic-RL的简介 1、Logic-RL的特点 2、性能 Logic-RL 的安装和使用方法 1、安装 2、使用方法 数据准备 基础模型 指令模型 训练执行 实现细节 Logic-RL的案例应用 Logic-RL…...
解决跨域问题
相信大多数的伙伴在第一次通过vue spring 做项目的时候都会遇到这个问题 什么是同源策略和跨域问题 同源策略指的就是,浏览器出于安全考虑,实施的一种策略,即只允许来自同一源(即协议域名端口都相同)的请求访问资源. 否则就会导致跨域问题 例如: http://xxx.com -> http…...
网络工程师 (28)IEEE802标准
前言 IEEE 802标准是由电气和电子工程师协会(IEEE)制定的一组局域网(LAN)和城域网(MAN)标准,定义了网络中的物理层和数据链路层。 一、起源与背景 IEEE 802又称为LMSC(LAN/MAN Stand…...
Playwright 与 Selenium 的关系
Playwright 与 Selenium 的关系 Playwright 和 Selenium 都是流行的浏览器自动化测试工具,它们都可以用于 Web 应用的端到端测试,但它们在设计理念、架构和功能上存在一些差异。 以下是两者的主要关系对比: 特性PlaywrightSelenium开发语言JavaScript (Node.js)多种语言 (…...
保研考研机试攻略:python笔记(4)
🐨🐨🐨15各类查找 🐼🐼二分法 在我们写程序之前,我们要定义好边界,主要是考虑区间边界的闭开问题。 🐶1、左闭右闭 # 左闭右闭 def search(li, target): h = len(li) - 1l = 0#因为都是闭区间,h和l都可以取到并且相等while h >= l:mid = l + (h - l) // 2…...
Matplotlib基础01( 基本绘图函数/多图布局/图形嵌套/绘图属性)
Matplotlib基础 Matplotlib是一个用于绘制静态、动态和交互式图表的Python库,广泛应用于数据可视化领域。它是Python中最常用的绘图库之一,提供了多种功能,可以生成高质量的图表。 Matplotlib是数据分析、机器学习等领域数据可视化的重要工…...
Spring Boot: 使用 @Transactional 和 TransactionSynchronization 在事务提交后发送消息到 MQ
Spring Boot: 使用 Transactional 和 TransactionSynchronization 在事务提交后发送消息到 MQ 在微服务架构中,确保消息的可靠性和一致性非常重要,尤其是在涉及到分布式事务的场景中。本文将演示如何使用 Spring Boot 的事务机制和 TransactionSynchron…...
解析3DMAX转OBJ
3ds Max 是一款功能强大的三维建模、动画和渲染软件,而 OBJ 是一种常用的三维模型文件格式,以下是关于 3ds Max 转 OBJ 的相关解析: 3ds Max 转 OBJ 的原因 兼容性需求: OBJ 格式被众多三维软件和渲染器所支持,将 3…...
html为<td>添加标注文本
样式说明: /*为td添加相对定位点*/ .td_text {position: relative; }/*为p添加绝对坐标(相对于父元素中的定位点)*/ .td_text p {position: absolute;top: 80%;font-size: 8px; }参考资料:...
AI驱动的智能流程自动化是什么
在当今快速发展的数字化时代,企业正在寻找更高效、更智能的方式来管理日常运营和复杂任务。其中,“AI驱动的智能流程自动化”(Intelligent Process Automation, IPA)成为了一个热门趋势。通过结合人工智能(AIÿ…...
vue动态table 动态表头数据+动态列表数据
效果图: <template><div style"padding: 20px"><el-scrollbar><div class"scrollbar-flex-content"><div class"opt-search"><div style"width: 100px"> </div><div class"opt-b…...
ubuntu下迁移docker文件夹
在 Ubuntu 系统中迁移 Docker 文件夹(如 Docker 数据存储文件夹 /var/lib/docker)到另一个磁盘或目录,通常是为了释放系统盘空间。以下是迁移过程的详细步骤: 1. 停止 Docker 服务 在进行迁移之前,必须停止 Docker 服…...
Neo4j图数据库学习(二)——SpringBoot整合Neo4j
一. 前言 本文介绍如何通过SpringBoot整合Neo4j的方式,对图数据库进行简单的操作。 Neo4j和SpringBoot的知识不再赘述。关于Neo4j的基础知识,有兴趣可以看看作者上一篇的文章:Neo4j图数据库学习(一)——初识CQL 二. 前置准备 新建SpringBo…...
离散型变量的 PSI-群体稳定性指标计算
文章目录 PSI-群体稳定性指标(离散型)单个指标计算所有指标计算 PSI-群体稳定性指标(离散型) 单个指标计算 代码 import pandas as pddf pd.read_csv(/Users/mengzhichao/Desktop/文件/图表/小微企业用电量数据.csv)X_train df.sample(n7000) X_test df.sample(n3000)计算单…...
docker grafana安装
mkdir /root/grafana-storage chmod 777 -R /root/grafana-storage docker run -d -p 3000:3000 --namedocker-apisix-grafana-1 --network docker-apisix_apisix -v /root/grafana-storage:/var/lib/grafana grafana/grafana:9.1.0 浏览器访问: http://192.…...
NetCore Consul动态伸缩+Ocelot 网关 缓存 自定义缓存 + 限流、熔断、超时 等服务治理 + ids4鉴权
网关 OcelotGeteway 网关 Ocelot配置文件 {//单地址多实例负载均衡Consul 实现动态伸缩"Routes": [{// 上游 》》 接受的请求//上游请求方法,可以设置特定的 HTTP 方法列表或设置空列表以允许其中任何方法"UpstreamHttpMethod": [ "Get", &quo…...
【进度条实现】Python中tqdm使用示例
tqdm 是 Python 中一个非常流行的进度条库,可以快速为循环或长时间运行的任务添加进度提示。以下是 tqdm 的常见用法和示例: 1. 安装 pip install tqdm2. 基本用法 在循环中使用 最简单的用法是用 tqdm 包装一个可迭代对象(如列表、range …...
Chirpy3D:用于创意 3D 鸟类生成的连续部分潜在特征
Chirpy3D框架可以将细粒度的2D图像理解提升至3D生成的全新境界。当前的3D生成方法往往只关注于重构简单的对象,缺乏细致的特征和创造性。Chirpy3D通过结合多视角扩散模型和连续的部件潜在空间,能够生成全新且合理的3D鸟类模型。该系统不仅能够保持细致的…...
李飞飞团队 S1 与 DeepSeek R1 技术对比
李飞飞团队 S1 与 DeepSeek R1 技术对比 李飞飞团队的 S1 模型和 DeepSeek R1 模型都是在 AI 推理领域具有重要影响力的模型,它们在技术原理、性能表现和训练成本等方面存在一些差异。 技术原理 S1 模型:S1 模型采用了监督微调(SFT…...
LeetCode 3444.使数组包含目标值倍数的最小增量
给你两个数组 nums 和 target 。 在一次操作中,你可以将 nums 中的任意一个元素递增 1 。 返回要使 target 中的每个元素在 nums 中 至少 存在一个倍数所需的 最少操作次数 。 示例 1: 输入:nums [1,2,3], target [4] 输出:…...
Node.js 中模块化
随着软件开发项目的规模和复杂性的增加,如何有效地组织代码、提高可维护性和促进团队协作成为了一个重要的课题。Node.js 提供了强大的模块系统,使得开发者能够将代码分割成独立的、可重用的模块,从而简化大型应用的开发过程。本文将详细介绍…...
jdk8新特性
目录 1 lambda表达式 1.1 类型推断 1.2 局部变量限制 2 函数式接口 2.1 Predicate 函数式接口 2.2 Supplier函数式接口 2.3 Consumer函数式接口 2.4 Function函数式接口 2.5 Runnable函数式接口 3 方法引用和构造器引用 3.1 对象方法引用 3.2 静态方法引用 3.3 构造方法引用 4 …...
ZooKeeper 和 Dubbo 的关系:技术体系与实际应用
引言 在现代微服务架构中,服务治理和协调是至关重要的环节。ZooKeeper 和 Dubbo 是两个在分布式系统中常用的技术工具,它们之间有着紧密的联系。本文将详细探讨 ZooKeeper 和 Dubbo 的关系,从基础概念、技术架构、具体实现到实际应用场景&am…...
ESP32-S3模组上跑通esp32-camera(43)
接前一篇文章:ESP32-S3模组上跑通esp32-camera(42) 一、OV5640初始化 2. 相机初始化及图像传感器配置 上一回继续对reset函数的后一段代码进行解析。为了便于理解和回顾,再次贴出reset函数源码,在components\esp32-camera\sensors\ov5640.c中,如下: static int reset…...
解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException
解决Spring Boot中MySQL数据库报错“Bad SQL Grammar”的问题 目录 解决Spring Boot中MySQL数据库报错“Bad SQL Grammar”的问题 问题描述解决步骤解决方案结论附:MySql常用配置参数及使用场景 在使用Spring Boot连接MySQL数据库时,有时候会遇到“B…...
NCV4275CDT50RKG 车规级LDO线性电压调节器芯片——专为新能源汽车设计的高可靠性电源解决方案
产品概述: NCV4275CDT50RKG 是一款符合 AEC-Q100 车规认证的高性能LDO(低压差线性稳压器),专为新能源汽车的严苛工作环境设计。该芯片支持 输出调节为 5.0 V 或 3.3 V,最大输出电流达 450mA,具备超低静态电流…...
DeepSeek Window本地私有化部署
前言 最近大火的国产AI大模型Deepseek大家应该都不陌生。除了在手机上安装APP或通过官网在线体验,其实我们完全可以在Windows电脑上进行本地部署,从而带来更加便捷的使用体验。 之前也提到过,本地部署AI模型有很多好处,比如&…...
镜头放大倍率和像素之间的关系
相互独立的特性 镜头放大倍率:主要取决于镜头的光学设计和结构,决定了镜头对物体成像时的缩放程度,与镜头的焦距等因素密切相关。比如,微距镜头具有较高的放大倍率,能将微小物体如昆虫、花朵细节等放大成像࿰…...
【RabbitMQ重试】重试三次转入死信队列
以下是基于RabbitMQ死信队列实现消息重试三次后转存的技术方案: 方案设计要点 队列定义改造(核心参数配置) Bean public Queue auditQueue() {Map<String, Object> args new HashMap<>();args.put("x-dead-letter-exchan…...
【一文读懂】卫星轨道的轨道参数(六根数)和位置速度矢量转换及其在终端距离、相对速度和多普勒频移计算中的应用
卫星轨道的六根数参数及其在终端距离、相对速度和多普勒频移计算中的应用 卫星轨道运动的描述离不开开普勒六要素(也称为六根数参数),它们完整地刻画了一颗卫星在引力场中的轨道信息。本文将介绍这六个参数的意义,并探讨如何利用…...
车载诊断框架 --- 使用CAPL脚本实现诊断测试吧(中)
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...
Lockdir加密忘记密码:解锁数据恢复之道
Lockdir加密忘记密码现象解析 Lockdir作为一款知名的文件夹加密软件,因其强大的加密功能和便捷的操作体验而广受用户好评。然而,当谈及Lockdir加密忘记密码这一情况时,不少用户却面露难色。Lockdir加密忘记密码,简而言之…...
SQL优化方式
避免select *:开发中禁止使用select * 。它会增加查询解析器成本,无法走索引覆盖而产生回表操作,还会增加网络消耗,浪费CPU和内存资源,应指定具体查询字段。小表驱动大表:关联查询时,用数据量小…...
java项目之基于推荐算法的图书购物网站源码(ssm+mybatis+mysql)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的基于推荐算法的图书购物网站项目。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于推荐算法的…...
java中的线程安全
线程安全的定义 线程安全:一个类或方法在多线程环境下可以被多个线程同时访问,而不会导致数据的不一致或错误。 线程不安全:一个类或方法在多线程环境下不能被多个线程同时访问,否则可能导致数据的不一致或错误。线程安全的实现 线…...
day44 QT核心机制
头文件: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QLabel> //标签类头文件 #include<QPushButton> //按钮类头文件 #include<QLineEdit> //行编辑器类头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …...
字节跳动后端一面
📍1. Gzip压缩技术详解 Gzip是一种流行的无损数据压缩格式,它使用DEFLATE算法来减少文件大小,广泛应用于网络传输和文件存储中以提高效率。 🚀 使用场景: • 网站优化:通过压缩HTML、CSS、JavaScript文件来…...
WebSocket推送数据快,条数多导致前端卡顿问题解决
WebSocket推送数据快,条数多导致前端卡顿问题解决 前言方案优化消息频率使用高效的数据格式Protobuf 和 MessagePack的对比 启用压缩前端性能优化 WebSocket使用注意事项连接管理处理断开连接负载均衡监控和维护日志记录定期维护安全最佳实践限流 最后 前言 在项目…...
android动态设置是否允许应用卸载
摘要:通过广播设置全局参数控制应用是否允许卸载,全局参数在Launcher和PackageInstaller两个模块中使用到。此功能可用于MDM后台控制是否允许设备卸载应用。 1. 静态注册广播 由于系统安装和卸载的功能集中在PackageInstaller模块中,为了更…...
【C/C++】每日温度 [ 栈的应用 ] 蓝桥杯/ACM备赛
数据结构考点:栈 题目描述: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高࿰…...