当前位置: 首页 > news >正文

NVIDIA 完全过渡到开源 GPU 内核模块

目录

  • 支持的 GPU
  • 安装程序更改
  • 将包管理器与 CUDA 元包配合使用
  • 使用 runfile
  • 使用安装帮助程序脚本
  • 包管理器详细信息
    • apt:基于 Ubuntu 和 Debian 的发行版
    • dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linux
    • zypper:SUSE Linux Enterprise Server 或 OpenSUSE
  • 包管理器摘要
  • 适用于 Linux 的 Windows 子系统
  • CUDA工具包
  • Github
    • 如何构建
    • 支持的目标 CPU 体系结构
    • 其他构建旋钮
    • 支持的工具链
    • 支持的 Linux 内核版本
    • 如何贡献
    • 如何报告问题
    • 内核模块的内核接口和与操作系统无关的组件
    • 目录结构布局
    • Nouveau 设备驱动程序集成
    • 兼容的 GPU
  • Forums
  • 参考链接

借助 R515 驱动程序,NVIDIA 于 2022 年 5 月发布了一组 Linux GPU 内核模块,作为具有 GPL 和 MIT 双重许可的开源模块。初始版本以数据中心计算 GPU 为目标,GeForce 和 Workstation GPU 处于 alpha 状态。

当时,NVIDIA宣布后续版本将提供更强大、功能更齐全的 GeForce 和 Workstation Linux 支持,NVIDIA 开放内核模块最终将取代闭源驱动程序。

NVIDIA GPU 共享通用的驱动程序架构和功能集。适用于台式机或笔记本电脑的同一驱动程序可在云中运行世界上最先进的 AI 工作负载。对我们来说,恰到好处地做到这一点非常重要。

两年过去了,NVIDIA通过开源 GPU 内核模块实现了同等或更好的应用程序性能,并增加了大量新功能:

  • 异构内存管理 (HMM)
  • 支持机密计算
  • Grace 平台的一致内存架构
  • 还有更多…

NVIDIA现在正处于完全过渡到开源 GPU 内核模块的正确举措,NVIDIA将在即将发布的 R560 驱动程序版本中做出这一改变。

支持的 GPU

并非每个 GPU 都与开源 GPU 内核模块兼容。

对于 NVIDIA Grace Hopper 或 NVIDIA Blackwell 等尖端平台,必须使用开源 GPU 内核模块。这些平台不支持专有驱动程序。

对于来自 Turing、Ampere、Ada Lovelace 或 Hopper 架构的较新 GPU,NVIDIA 建议切换到开源 GPU 内核模块。

对于 Maxwell、Pascal 或 Volta 架构中较旧的 GPU,开源 GPU 内核模块与这些平台不兼容。需要继续使用 NVIDIA 专有驱动程序。

对于在同一系统中使用较旧和新 GPU 的混合部署,请继续使用专有驱动程序。

如果不确定,NVIDIA 会提供一个新的检测帮助程序脚本来帮助指导您选择哪个驱动程序。有关详细信息,请参阅本文后面的“使用安装帮助程序脚本”部分。

安装程序更改

通常,所有安装方法安装的驱动程序的默认版本都是从专有驱动程序切换到开源驱动程序。有几个特定方案值得特别注意:

  • 使用 CUDA 元包的包管理器
  • 运行文件
  • 安装帮助程序脚本
  • 包管理器详细信息
  • 适用于 Linux 的 Windows 子系统
  • CUDA工具包

将包管理器与 CUDA 元包配合使用

使用包管理器(而不是 .run 文件)安装 CUDA Toolkit 时,安装CUDA 元包存在并且常用。通过安装顶级软件包,您可以安装 CUDA 工具包和关联的驱动程序版本的组合。例如,通过在 CUDA 12.5 发布时间范围内安装 cuda,您可以获得专有的 NVIDIA 驱动程序 555 以及 CUDA 工具包 12.5。

图 1 显示了此包结构。
在这里插入图片描述
以前,使用开源 GPU 内核模块意味着可以使用顶级元包。您必须安装特定于发行版的 NVIDIA 驱动程序开放包以及您选择的 cuda-toolkit-X-Y 包。

从 CUDA 12.6 版本开始,流程有效地切换了位置(图 2)。
图 1.CUDA Toolkit 12.6 之前的 CUDA 包

使用 runfile

如果您使用该文件安装 CUDA 或 NVIDIA 驱动程序,安装程序会查询您的硬件并自动为您的系统安装最适合的驱动程序。UI 切换也可用于在专有驱动程序和开源驱动程序之间进行选择,具体取决于您的选择。

如果通过 CUDA .run 文件并使用用户界面进行安装,则现在会看到类似于以下内容的菜单:
在这里插入图片描述

如果通过驱动程序 .run 文件进行安装,则会看到类似的选择(图 3)。
图3.新的 runfile 交互式选择(驱动程序安装程序)

您还可以使用命令行传递覆盖,以便在没有用户界面的情况下进行安装,或者如果您使用的是 Ansible 等自动化工具。

# sh ./cuda_12.6.0_560.22_linux.run --override --kernel-module-type=proprietary# sh ./NVIDIA-Linux-x86_64-560.run --kernel-module-type=proprietary

使用安装帮助程序脚本

如前所述,如果您不确定要为系统中的 GPU 选择哪个驱动程序,NVIDIA 创建了一个帮助程序脚本来指导您完成选择过程。

要使用它,请先使用包管理器安装包,然后运行脚本:nvidia-driver-assistant

$ nvidia-driver-assistant

包管理器详细信息

为了获得一致的体验,NVIDIA 建议您使用包管理器来安装 CUDA 工具包和驱动程序。但是,不同发行版使用哪些包管理系统或软件包的结构的具体细节可能因特定发行版而异。

本部分概述了各种平台所需的特定详细信息、注意事项或迁移步骤。

apt:基于 Ubuntu 和 Debian 的发行版

运行以下命令:

$ sudo apt-get install nvidia-open

要在 Ubuntu 20.04 上使用 metapackage 进行升级,请先切换到打开内核模块:cuda

$ sudo apt-get install -V nvidia-kernel-source-open$ sudo apt-get install nvidia-open

dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linux

运行以下命令:

$ sudo dnf module install nvidia-driver:open-dkms

要在基于 dnf 的发行版上使用元包进行升级,必须禁用模块流:cuda

$ echo "module_hotfixes=1" | tee -a /etc/yum.repos.d/cuda*.repo
$ sudo dnf install --allowerasing nvidia-open
$ sudo dnf module reset nvidia-driver

zypper:SUSE Linux Enterprise Server 或 OpenSUSE

运行以下命令之一:

# default kernel flavor
$ sudo zypper install nvidia-open
# azure kernel flavor (sles15/x86_64)
$ sudo zypper install nvidia-open-azure
# 64kb kernel flavor (sles15/sbsa) required for Grace-Hopper
$ sudo zypper install nvidia-open-64k

包管理器摘要

为简化起见,我们以表格格式压缩了包管理器建议。驱动程序版本 560 和 CUDA 工具包 12.6 之后的所有版本都将使用这些打包约定。

发行版	安装最新的	安装特定版本
Fedora/RHEL/Kylin	dnf module install nvidia-driver:open-dkms	dnf module install nvidia-driver:560-open
openSUSE/SLES	zypper install nvidia-open{-azure,-64k}	zypper install nvidia-open-560{-azure,-64k}
Debian 的	apt-get install nvidia-open	apt-get install nvidia-open-560
Ubuntu的	apt-get install nvidia-open	apt-get install nvidia-open-560
表 1.包管理器安装建议

有关更多信息,请参阅 NVIDIA 数据中心驱动程序。

适用于 Linux 的 Windows 子系统

适用于 Linux 的 Windows 子系统 (WSL) 使用主机 Windows 操作系统中的 NVIDIA 内核驱动程序。您不应专门在此平台中安装任何驱动程序。如果使用的是 WSL,则无需进行任何更改或操作。

CUDA工具包

CUDA Toolkit 的安装通过包管理器保持不变。运行以下命令:

$ sudo apt-get/dnf/zypper install cuda-toolkit

更多信息
有关如何安装 NVIDIA 驱动程序或 CUDA 工具包的更多信息,包括在目前无法迁移到开源 GPU 内核模块时如何确保安装专有驱动程序,请参阅《CUDA 安装指南》中的驱动程序安装。

Github

https://github.com/NVIDIA/open-gpu-kernel-modules

NVIDIA Linux 开放 GPU 内核模块源代码
这是 NVIDIA Linux 开放 GPU 内核模块的源代码版本, 版本 550.100。

如何构建

要构建:

make modules -j$(nproc)

要安装,请先卸载所有现有的 NVIDIA 内核模块。然后 作为 root:

make modules_install -j$(nproc)

请注意,此处构建的内核模块必须与 GSP 一起使用 固件和用户空间 NVIDIA GPU 驱动程序组件来自相应的 550.100 驱动程序版本。这可以通过安装来实现 使用 .run 文件中的 NVIDIA GPU 驱动程序。例如,–no-kernel-modules

sh ./NVIDIA-Linux-[...].run --no-kernel-modules

支持的目标 CPU 体系结构

目前,内核模块可以针对 x86_64 或 aarch64 构建。 如果是交叉编译,请在 make 命令行上设置以下变量:

TARGET_ARCH=aarch64|x86_64
CC
LD
AR
CXX
OBJCOPY

例如,

# compile on x86_64 for aarch64
make modules -j$(nproc)         \TARGET_ARCH=aarch64         \CC=aarch64-linux-gnu-gcc    \LD=aarch64-linux-gnu-ld     \AR=aarch64-linux-gnu-ar     \CXX=aarch64-linux-gnu-g++   \OBJCOPY=aarch64-linux-gnu-objcopy

其他构建旋钮

NV_VERBOSE - 将其设置为“1”以打印执行的每个完整命令; 否则,将打印简洁的“CC”行。

DEBUG - 将此值设置为“1”以将内核模块构建为调试。默认情况下, 生成编译,不调试信息。这也使 内核模块中的各种调试日志消息。

这些变量可以在 make 命令行上设置。例如,

make modules -j$(nproc) NV_VERBOSE=1

支持的工具链

任何相当现代的 GCC 或 Clang 版本都可用于构建 内核模块。请注意,内核的内核接口层 模块必须使用用于构建 内核。

支持的 Linux 内核版本

NVIDIA 开放内核模块支持相同范围的 Linux 内核 专有 NVIDIA 内核模块支持的版本。 目前是 Linux 内核 3.10 或更高版本。

如何贡献

可以通过在 https://github.com/NVIDIA/open-gpu-kernel-modules 上创建拉取请求来做出贡献,我们将通过 GitHub 进行响应。

请注意,提交拉取请求时,系统将提示您接受 贡献者许可协议。

该代码库与 NVIDIA 的专有驱动程序共享,并且各种 对共享代码执行处理以生成源代码,即 在这里发布。这对可预见的未来有几个影响:

  • GitHub 存储库将主要用作每个驱动程序的快照 释放。
  • 我们不希望能够为个人提供修订历史记录 对 NVIDIA 的共享代码库所做的更改。可能会有 每个驱动程序版本只有一个 Git 提交。
  • 我们可能无法将个人贡献作为单独的贡献来反映 GitHub 存储库中的 git 提交。
  • 由于代码在发布之前会经过各种处理, 此处所做的贡献需要手动合并才能应用于共享 代码库。因此,此处进行的大型重构更改可能难以合并并接受回共享代码库。如果你有大 重构建议,请提前联系我们,以便我们进行协调。

如何报告问题

特定于 Open GPU 内核模块的问题可以在 https://github.com/NVIDIA/open-gpu-kernel-modules 存储库的“问题”部分。

此外,任何现有的错误报告场所都可用于通信 NVIDIA的问题,例如我们的论坛:

https://forums.developer.nvidia.com/c/gpu-graphics/linux/148

或 linux-bugs@nvidia.com。

请参阅“NVIDIA 联系信息和其他资源”部分 的 NVIDIA GPU 驱动程序自述文件了解详情。

如果您符合以下条件,请参阅单独的 SECURITY.md 文档 相信您已在此软件中发现了安全漏洞。

内核模块的内核接口和与操作系统无关的组件

NVIDIA的大多数内核模块都分为两个组件:

  • “与操作系统无关”的组件:这是每个内核模块的组件 这与操作系统无关。
  • “内核接口层”:这是每个内核模块的组件 特定于 Linux 内核版本和配置。

打包在 NVIDIA .run 安装包中时,与操作系统无关的 组件以二进制形式提供:它很大且耗时 编译,因此提供了预构建版本,以便用户执行 不必在每次驱动程序安装期间对其进行编译。对于 nvidia.ko 内核模块,此组件名为“nv-kernel.o_binary”。 对于 nvidia-modeset.ko 内核模块,此组件名为 “nv-modeset-kernel.o_binary”。nvidia-drm.ko 和 nvidia-uvm.ko 都不是 具有与操作系统无关的组件。

必须构建每个内核模块的内核接口层组件 对于目标内核。

目录结构布局

  • kernel-open/内核接口层
  • kernel-open/nvidia/nvidia.ko 的内核接口层
  • kernel-open/nvidia-drm/nvidia-drm.ko 的内核接口层
  • kernel-open/nvidia-modeset/nvidia-modeset.ko 的内核接口层
  • kernel-open/nvidia-uvm/nvidia-uvm.ko 的内核接口层
  • src/与操作系统无关的代码
  • src/nvidia/nvidia.ko 的与操作系统无关的代码
  • src/nvidia-modeset/nvidia-modeset.ko 的与操作系统无关的代码
  • src/common/nvidia.ko 和 nvidia-modeset.ko 中的一个或多个使用的实用程序代码
  • nouveau/用于与 Nouveau 设备驱动程序集成的工具

Nouveau 设备驱动程序集成

“nouveau”目录中的 Python 脚本用于提取一些 在源代码中编码的固件二进制映像(和相关数据)和 将它们存储为不同的文件。这些文件由 Nouveau 设备使用 驱动程序加载并与 GSP 固件通信。

二进制文件的布局如nouveau_firmware_layout.ods中描述, 这是一个 OpenDocument 电子表格文件,与大多数电子表格兼容 软件应用程序。

兼容的 GPU

NVIDIA 开放内核模块可用于任何图灵或更高版本的 GPU (具体见Github链接)。但是,在 DRIVER_VERION 版本中,GeForce 和 工作站支持被认为是 Beta 质量的。开放的内核模块 适合广泛使用,NVIDIA 会就任何问题请求反馈 遇到特定于他们。

有关功能支持和限制的详细信息,请参阅 NVIDIA GPU 驱动程序 最终用户自述文件:

https://us.download.nvidia.com/XFree86/Linux-x86_64/550.100/README/kernel_open.html

有关 vGPU 支持,请参阅 vGPU 主机中打包的 README.vgpu 打包了解更多详情。

在下表中,如果列出了三个 ID,则第一个是 PCI 设备 ID,第二个是 PCI 子系统供应商 ID,第三个是 PCI 子系统设备 ID。

Forums

https://forums.developer.nvidia.com/c/gpu-graphics/linux/148

参考链接

https://developer.nvidia.com/blog/nvidia-transitions-fully-towards-open-source-gpu-kernel-modules/
https://developer.nvidia.com/zh-cn/blog/nvidia-releases-open-source-gpu-kernel-modules/

相关文章:

NVIDIA 完全过渡到开源 GPU 内核模块

目录 支持的 GPU安装程序更改将包管理器与 CUDA 元包配合使用使用 runfile使用安装帮助程序脚本包管理器详细信息apt:基于 Ubuntu 和 Debian 的发行版dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linuxzypper:SUSE …...

learning-cxx 学习cpp 环境配置 + bug解决

学习CPP网址 https://github.com/LearningInfiniTensor/learning-cxx 安装环境 1.配置xmake的环境 xmake是c的构建工具 最简单的配置方法就是安装mcvs,然后选择必要的那两个包 查看版本,是否安装成功 gcc --version g --version2.安装xmake 我的是…...

PHP 多线程和异步编程的常见陷阱

本文由 ChatMoney团队出品 在PHP开发中,多线程和异步编程是提高应用性能和响应速度的重要手段。然而,这些技术也带来了许多挑战和陷阱,如共享状态冲突、死锁、超时、资源泄漏以及调试困难等。本文将详细探讨这些陷阱,并提供相应的…...

STL 哈希 学习总结

概述 基础概念 哈希是通过特定的算法,将任意长度的数据映射为固定长度的数据串中。该映射的结果就被称为哈希值,也可以称为散列值。 例如在存储一个10000这个数据的时候,如果使用数组的话,则需要开辟对应大小空间内存&#xff…...

vue3页面编写-导入导出excel、展开查询项等

数据保持 <router-view v-slot"{ Component, route }"><keep-alive><component :is"Component" :key"route.name" v-if"route.meta.keepAlive" /></keep-alive><component :is"Component" :key…...

Java学习 - Spring Boot整合 Thymeleaf 实例

什么是 Thymeleaf Thymeleaf 是新一代的 Java 模板引擎&#xff0c;类似于 Velocity、FreeMarker 等传统引擎&#xff0c;其语言和 HTML 很接近&#xff0c;而且扩展性更高&#xff1b; Thymeleaf 的主要目的是将优雅的模板引入开发工作流程中&#xff0c;并将 HTML 在浏览器中…...

ubuntu20.04安装终端终结者并设置为默认终端

1、安装 terminator sudo apt-get install terminator 2、Ctrl Alt T 试一下打开什么终端&#xff0c;我的默认启动的是terminator;如果想换换默认的终端&#xff0c;还需以下一步 3、安装dconf-tools&#xff0c;这个是设置默认终端的必须 sudo apt-get install dconf-tools…...

以Zookeeper为例 浅谈脑裂与奇数节点问题

一、脑裂现象的定义与影响 脑裂&#xff08;split-brain&#xff09;是指在分布式系统中&#xff0c;因网络分区或其他故障导致系统被切割成两个或多个相互独立的子系统&#xff0c;每个子系统可能独立选举出自己的领导节点。这一现象在依赖中心领导节点&#xff08;如Elastic…...

最新版kubeadm搭建k8s(已成功搭建)

kubeadm搭建k8s&#xff08;已成功搭建&#xff09; 环境配置 主节点 k8s-master&#xff1a;4核8G、40GB硬盘、CentOS7.9&#xff08;内网IP&#xff1a;10.16.64.67&#xff09; 从节点 k8s-node1&#xff1a; 4核8G、40GB硬盘、CentOS7.9&#xff08;内网IP&#xff1a;10…...

C++学习笔记-友元函数的定义与使用

一、引言 在C中&#xff0c;友元函数&#xff08;Friend Function&#xff09;是一个独特而强大的特性&#xff0c;它打破了类的封装性&#xff0c;允许一个或多个非成员函数访问类的私有&#xff08;private&#xff09;和保护&#xff08;protected&#xff09;成员。尽管这…...

熵、交叉熵、KL散度

这里写目录标题 熵KL散度引入交叉熵。交叉熵的二分类公式&#xff1a; 再次理解SoftMax函数结束 熵 熵&#xff0c;是一个物理上的概念&#xff0c;表示一个系统的不确定性程度&#xff0c;或者表示一个系统的混乱程序。 下边是信息熵的演示&#xff1a; 信息熵的公式如下&…...

THS配置keepalive(yjm)

启动完THS管理控制台和THS后&#xff0c;登录控制台&#xff0c;进入实例管理》节点管理&#xff0c;可以分别使用界面配置和编辑配置设置长连接。 1、界面配置 点击界面配置》集群设置&#xff0c;启用长连接&#xff0c;设置长连接数、最大请求数和超时时间。 2、编辑配置 …...

新加坡裸机云多IP服务器特性

新加坡裸机云多IP服务器是一种高性能、稳定性强&#xff0c;且具备多IP地址特性的服务器。它主要适用于需要高度计算性能、网络连接稳定和高安全性的业务场景&#xff0c;如跨境外贸等。下面将详细探讨该类型服务器的特性&#xff0c;rak部落为您整理发布新加坡裸机云多IP服务器…...

深入理解ADB:Android调试桥详解与使用指南

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Android ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 1. 什么是ADB&#xff1f; ADB的基本原理&#xff1a; 2. ADB的安装与配置 安装ADB工具集&#xff1a; 配置ADB环境变量&am…...

PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能

PACS系统可以覆盖医院现有放射、CT、MR、核医学、超声、内镜、病理、心电等绝大部分DICOM和非DICOM检查设备&#xff0c;支持从科室级、全院机、集团医院级乃至到区域PACS的平滑扩展&#xff0c;能够与医院HIS、集成平台的有效集成和融合&#xff0c;帮助医院实现了全院医学影像…...

无人机搭载无人机反制设备可行性分析

一、引言 随着无人机技术的飞速发展&#xff0c;无人机在各个领域的应用越来越广泛。然而&#xff0c;无人机的不当使用也可能带来安全隐患和隐私问题。因此&#xff0c;无人机反制设备应运而生&#xff0c;用于对非法或危险无人机进行干扰和控制。本文将对无人机搭载无人机反…...

MATLAB绘制方波、锯齿波、三角波、正弦波和余弦波、

一、引言 MATLAB是一种具有很强的数值计算和数据可视化软件&#xff0c;提供了许多内置函数来简化数学运算和图形的快速生成。在MATLAB中&#xff0c;你可以使用多种方法来快速绘制正弦波、方波和三角波。以下是一些基本的示例&#xff0c;展示了如何使用MATLAB的命令来实现正弦…...

【通信协议-RTCM】MSM语句(2) - RINEXMSM7语句总结(重要!自动化开发计算卫星状态常用)

注释&#xff1a; 在工作中主要负责的是RTCM-MSM7语句相关开发工作&#xff0c;所以主要介绍的就是MSM7语句相关内容 1. 相位校准参考信号 2. MSM1、MSM2、MSM3、MSM4、MSM5、MSM6和MSM7的消息头内容 DATA FIELDDF NUMBERDATA TYPENO. OF BITSNOTES Message Number - 消息编…...

ios CCUIFont.m

// // CCUIFont.h // CCFC // //#import <Foundation/Foundation.h>// 创建字体对象 #define CREATE_FONT(fontSize) [UIFont systemFontOfSize:(fontSize)]interface UIFont(cc) (void)logAllFonts;end // // CCUIFont.m // CCFC // //#import "CCUIFont.h&…...

调度子系统在特定时间执行

时序逻辑调度器设计模式允许您安排Simulink子系统在指定时间执行。以下模型说明了这种设计模式。 时序逻辑调度器图表包含以下逻辑&#xff1a; 时序逻辑调度器的关键行为 时序逻辑调度器图表包含两个状态&#xff0c;它们以不同的速率调度函数调用子系统A1、A2和A3的执行&…...

【QAC】Dashboard服务端如何配置

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决Dashboard服务端如何配置的问题。 2、 问题场景 客户想使用Dashboard&#xff0c;Dashboard服务端如何配置。 3、软硬件环境 1、软件版本&#xff1a;HelixQAC23.04 2、机器环境&#xff1a;Windows 64bit 3…...

深入理解Linux网络(四):TCP接收阻塞

TCP socket 接收函数 recv 发出 recvfrom 系统调用。 进⼊系统调⽤后&#xff0c;⽤户进程就进⼊到了内核态&#xff0c;通过执⾏⼀系列的内核协议层函数&#xff0c;然后到 socket 对象的接收队列中查看是否有数据&#xff0c;没有的话就把⾃⼰添加到 socket 对应的等待队列⾥…...

【iOS】内存五大分区

目录 堆&#xff08;Heap&#xff09;是什么五大分区栈区堆区全局/静态区常量区&#xff08;即.rodata&#xff09;代码区&#xff08;.text&#xff09; 函数栈堆和栈的区别和联系图解 OC语言是C语言的超集&#xff0c;所以先了解C语言的内存模型的内存管理会有很大帮助。C语言…...

Jupyter Notebook: 是一个强大的交互式计算

文章目录 引言Jupyter Notebook的原理基础使用安装与启动单元格&#xff08;Cell&#xff09;操作快捷键 高级使用魔术命令Markdown支持可视化版本控制 优缺点优点缺点 官网链接结论 引言 Jupyter Notebook是一个强大的交互式计算环境&#xff0c;特别适用于数据科学、机器学习…...

【C#学习笔记】变量、变量类型

在C#中&#xff0c;变量是存储数据的容器&#xff0c;每个变量都有其特定的数据类型&#xff0c;这决定了变量可以存储的数据类型和大小。以下是关于C#中变量的由浅入深的详细解释&#xff0c;并附带代码示例和解释&#xff1a; 基础概念 定义&#xff1a; 变量是存储数据的容…...

题解:T480718 eating

eating 题目背景 从前有个荣光的王国&#xff0c;小 A 是里面的国王&#xff0c;今天他要赐予他的子民以仓廪。 题目描述 在一条街上有 n n n 个饭店。小 A 站在这条街的最左端。 第 i i i 个饭店离这条街最左端的距离是 a i a_i ai​&#xff0c;它所售卖的菜品的美味…...

MATLAB中matfile用法

目录 语法 说明 示例 创建 MAT 文件对象 启用对 MAT 文件的写访问权限 加载整个变量 将整个变量保存至现有 MAT 文件 加载和保存部分变量 确定变量大小 参数说明 局限性 提示 matfile的功能是访问和更改 MAT 文件中的变量&#xff0c;而不必将文件加载到内存中。 …...

Spring之Spring Bean的生命周期

Spring Bean的生命周期 通过BeanDefinition获取bean的定义信息调用构造函数实例化beanBean的依赖注入处理Aware接口&#xff08;BeanNameAware、BeanFactoryAware、ApplicationContextAware&#xff09;Bean的后置处理器BeanPostProcessor-前置初始化方法&#xff08;Initiali…...

OSINT 开源情报中的地理定位方法

了解 OSINT 中的地理定位技术、如何获取地理位置数据以及如何将地理定位用于各种调查场景。 OSINT 中的地理定位基础知识 OSINT 代表开源情报&#xff0c;指的是从免费公共来源合法收集的有关个人或组织的信息。这包括在互联网上以及书籍、公共图书馆报告、报纸文章、新闻稿、…...

Java面试题系列 - 第17天

Java中的代理模式与动态代理 背景说明&#xff1a;代理模式是一种结构型设计模式&#xff0c;用于在客户端和目标对象之间提供一个代理或占位符。在Java中&#xff0c;动态代理技术允许在运行时创建代理对象&#xff0c;这在AOP&#xff08;面向切面编程&#xff09;和RPC&…...

开发环境搭建

1、Ubuntu 系统设置 root 用户密码 新安装的ubuntu没有设置 root 用户密码,打开终端,输入 sudo passwd root 执行命令后依次输入密码 2、虚拟机设置网络适配器 3、Ubuntu 系统下搭建 FTP 服务器 sudo apt-get update sudo apt-get install vsftpd sudo apt-get install vim…...

【NLP】关于参数do_sample的解释

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;特别是在使用神经网络模型进行文本生成时&#xff0c;do_sample是一个常见的参数&#xff0c;用于控制模型生成文本的方式。具体来说&#xff0c;do_sample参数决定模型是否采用随机采样&#xff08;sampling&#x…...

Vbox虚拟机+Ubuntu motest测试drm

1. 效果演示 大家做学习drm的时候&#xff0c;没有硬件测试平台不方便测试&#xff0c;这里给大家演示下如何基于Vbox虚拟机Ubuntu测试drm的一些功能,先看下演示视频。 没有光标测试: demo_vwmfgx_test_drm 带有光标测试: demo_vwmfgx_drm_with_cursor 可以看到&#xff0c;有…...

ArcGIS Pro SDK (九)几何 15 转换

ArcGIS Pro SDK &#xff08;九&#xff09;几何 15 转换 文章目录 ArcGIS Pro SDK &#xff08;九&#xff09;几何 15 转换1 创建地理转换2 创建复合地理变换3 创建投影转换4 创建高压基准变换5 创建复合高压基准变换6 决定转换7 地图点 - 地理坐标字符串转换 环境&#xff1…...

Spring IOC DI --- 认识IOC DI

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 文章目录 认识Ioc & DIIoc是什么?DI是什么? 认识Ioc & DI 我们知道,Spring 是一个开源框架,让我们的开发更加简单.但是更加具体来说,实际上Spring 是包含了众多工具方法的Ioc容器 …...

常用的python程序汇总——入门级

只用于记录最近的一些日常程序。 目录 前言 一、文件和目录管理 1.读取文件结构 读取所有文件夹和文件 读取到N级子文件夹和文件 只读取到N级子文件夹 2.遍历文件并处理&#xff08;复制、删除&#xff09; 说明&#xff1a; 二、数据分析和处理 三、数据可视化 四、…...

被问到MQ消息已丢失,该如何处理?

在分布式系统中&#xff0c;消息中间件&#xff08;如 RabbitMQ、RocketMQ、Kafka、Pulsar 等&#xff09;扮演着关键角色&#xff0c;用于解耦生产者和消费者&#xff0c;并确保数据传输的可靠性和顺序性。尽管我们通常会采取多种措施来防止消息丢失&#xff0c;如消息持久化、…...

open3d:ransac分割多个平面(源码)

1、背景介绍 随机采样一致性算法(RANSAC Random Sample Consensus)是一种迭代的参数估计算法,主要用于从包含大量噪声数据的样本中估计模型参数。其核心思想是通过随机采样和模型验证来找到数据中最符合模型假设的点。因此,只要事先给定要提取的参数模型,即可从点云中分割…...

Github 2024-07-17 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-17统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量非开发语言项目3Python项目3Rust项目2TypeScript项目2MDX项目1项目化学习 创建周期:2538 天协议类型:MIT LicenseStar数量:161973 个Fork数量…...

vue3中Composition API写法 <script setup>标签中哪些可以不用导入即可使用?

在 Vue 3 中使用 <script setup> 时&#xff0c;确实有一些全局的 API 和宏可以直接使用&#xff0c;而不需要显式地从 vue 包中导入它们。这是因为 <script setup> 是专门为了提供更简洁的组件编写方式而设计的&#xff0c;它内部利用了编译时的语法糖。 以下是在…...

Facebook Dating:社交平台的约会新体验

随着社交媒体的普及和技术的发展&#xff0c;传统的社交方式正在经历革新&#xff0c;尤其是在约会这个领域。Facebook作为全球领先的社交平台&#xff0c;推出了Facebook Dating&#xff0c;旨在为用户提供一个全新的约会体验。本文将探讨Facebook Dating如何重新定义社交平台…...

【系统架构设计 每日一问】五 搜索型业务,采用MySQL+ES,如何保证数据一致性

将数据从MySQL同步到Elasticsearch&#xff08;ES&#xff09;中并保证一致性是一个常见的需求&#xff0c;特别是在需要快速全文搜索和分析功能的应用中。以下是一些常见的方法和实践来确保数据一致性&#xff1a; 1. 使用双写策略 描述&#xff1a;在应用程序层面&#xff…...

缓存穿透,缓存击穿,缓存雪崩

目录 介绍 缓存穿透 缓存击穿 缓存雪崩 原因 影响 解决方案 缓存穿透 防止缓存穿透->空值缓存案例 缓存击穿 使用互斥锁解决缓存击穿 介绍 缓存穿透 定义&#xff1a;缓存穿透是指用户查询数据&#xff0c;缓存和数据库中都不存在该数据&#xff08;一般是发起恶意…...

运维 | 清理 Linux 磁盘空间方法汇总

清理 Linux 磁盘空间方法汇总 前言 系统磁盘不够用或占满了&#xff0c;导致部分应用或程序无法正常使用。 本章节将记录一些常用或常见的方法清理系统磁盘&#xff08;持续更新中&#xff09;。 常见操作 查看磁盘使用情况 cd / df -Th查找大文件和目录&#xff08;根目…...

googleTest 源码主线框架性分析——TDD 01

TDD&#xff0c;测试驱动开发&#xff0c;英文全称Test-Driven Development&#xff0c;简称TDD&#xff0c;是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码&#xff0c;然后只编写使测试通过的功能代码&#xff0c;通过测试来推…...

Python:对常见报错导致的崩溃的处理

Python的注释&#xff1a; mac用cmd/即可 # 注释内容 代码正常运行会报以0退出&#xff0c;如果是1&#xff0c;则表示代码崩溃 age int(input(Age: )) print(age) 如果输入非数字&#xff0c;程序会崩溃&#xff0c;也就是破坏了程序&#xff0c;终止运行 解决方案&#xf…...

linux系统进程占cpu 100%解决步骤

1.查找进程 ps aux 查看指定进程: ps aux | grep process_name2.根据进程查找对应的主进程 pstree -p | grep process_name 3.查看主进程目录并删除 ps -axu | grep process_name rm -rf /usr/bin/2cbbb...

数据传输安全--IPSEC

目录 IPSEC IPSEC可以提供的安全服务 IPSEC 协议簇 两种工作模式 传输模式 隧道模式 两个通信保护协议&#xff08;两个安全协议&#xff09; AH&#xff08;鉴别头协议&#xff09; 可以提供的安全服务 报头 安全索引参数SPI 序列号 认证数据 AH保护范围 传输模…...

Unity XR Interaction Toolkit的安装(二)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、安装1.打开unity项目2.打开包管理器&#xff08;PackageManage&#xff09;3.导入Input System依赖包4.Interaction Layers unity设置总结 前言 安装前请注意&#xff1a;需要…...

什么是PCB流锡槽焊盘/C型焊盘,如何设计?-捷配笔记

在PCB进行机器组装器件时&#xff08;如波峰焊&#xff09;&#xff0c;为了防止部分需要二次焊接的元器件的焊盘堵孔&#xff0c;就需要在PCB焊盘上面开个过锡槽&#xff0c;以便过波峰焊时&#xff0c;这些焊锡会流掉。开流锡槽就是在焊盘裸铜&#xff08;敷锡&#xff09;部…...