了解cuda的统一内存
1. CUDA 6中的统一内存
在CUDA 6中,从Kepler GPU架构(计算能力3.0或更高)开始,在64位Windows 7、8和Linux操作系统(内核2.6.18+)上开始支持统一内存.
从CUDA 6开始,NVIDIA推出了CUDA平台历史上最引人注目的编程模型改进之一 ---- 统一内存
。
在当今典型的PC或集群节点中,CPU和GPU的内存在物理上是不同的,并由PCI Express总线分隔。
在CUDA 6之前,程序员必须这样看待事物。CPU和GPU之间共享的数据必须在两个内存中分配,并由程序在它们之间明确复制。这给CUDA程序增加了很多复杂性。
统一内存创建了一个在CPU和GPU之间共享的托管内存池,弥合了CPU-GPU的鸿沟。
CPU和GPU都可以使用单个指针访问托管内存。关键在于,系统会自动在主机和设备之间迁移统一内存中分配的数据,使其看起来像CPU内存当在CPU上运行代码时,而在GPU上运行代码时像是GPU内存。
在这篇文章中,我将向您展示统一内存如何大大简化GPU加速应用程序中的内存管理。
下图显示了一个非常简单的例子。这两个代码都从磁盘加载文件,对其中的字节进行排序,然后在释放内存之前在CPU上使用排序后的数据。右侧的代码使用CUDA和统一内存在GPU上运行.
两个代码的唯一的区别是GPU版本启动内核函数(并在启动后进行同步),并使用新的API cudaMallocManaged()
为加载的文件在统一内存中分配空间.
如果你以前用过CUDA C/C++编程,你无疑会被右边代码的简洁性所打动。请注意,我们只分配了一次内存,并且我们有一个指向主机和设备都可以访问的数据的指针。我们可以直接从文件读取内容到分配的内存,然后将指针直接传递给在设备上运行的CUDA内核。然后,在等待内核完成之后,我们可以再次从CPU访问数据。CUDA运行时隐藏了所有的复杂性,自动将数据迁移到访问它的地方。
2 统一内存提供了什么
程序员从统一内存中受益的主要方式有两种。
2.1 更简单的编程和内存模型
统一内存降低了CUDA平台上并行编程的门槛,通过使设备内存管理成为一种优化,而不是一种要求
有了统一内存,现在程序员可以直接开发并行CUDA内核,而不会陷入分配和复制设备内存的细节中。
这将使学习CUDA平台的编程和将现有代码移植到GPU更简单。但这不仅仅适用于初学者。
本文后面的示例展示了统一内存如何使复杂的数据结构更容易与设备代码一起使用,以及它与C++结合时的强大功能。
2.2 通过数据本地化提升性能
通过在CPU和GPU之间按需迁移数据,统一内存可以在GPU上提供本地数据的性能,同时提供全局共享数据的易用性。此功能的复杂性被隐藏在CUDA驱动程序和运行时的保护之下,确保应用程序代码更易于编写。迁移的目的是实现每个处理器的全带宽;250 GB/s的GDDR5内存对于提升开普勒GPU的计算吞吐量至关重要。
一个重要的点是,一个经过精心调优的CUDA程序,它使用流和cudaemcpyAsync来有效地将执行与数据传输重叠,可能会比只使用统一内存的CUDA软件表现得更好。容易理解的是:CUDA运行时永远不会像程序员那样了解需要数据的位置和时间!CUDA程序员仍然可以访问显式设备内存分配和异步内存副本,以优化数据管理和CPU-GPU并发性。统一内存首先是一种生产力功能,它为并行计算提供了更平滑的入口,而不会剥夺CUDA为高级用户提供的任何功能。
3 统一内存还是统一虚拟寻址?
CUDA自CUDA 4以来一直支持统一虚拟寻址(UVA),虽然统一内存依赖于UVA,但它们不是一回事。UVA为系统中的所有内存提供了一个单一的虚拟内存地址空间,并允许从GPU代码访问指针,无论它们位于系统的哪个位置,无论是设备内存(在相同或不同的GPU上)、主机内存还是片上共享内存。它还允许使用cudaMemcpy,而无需指定输入和输出参数的确切位置。UVA支持“零拷贝”内存,即设备代码可以直接通过PCI Express访问的固定主机内存,无需memcpy。Zero Copy提供了统一内存的一些便利,但没有提供任何性能,因为它总是使用PCI Express的低带宽和高延迟进行访问。
UVA不会像统一内存那样自动将数据从一个物理位置迁移到另一个。由于统一内存能够在主机和设备内存之间自动迁移单个页面级别的数据,因此需要大量的工程来构建,因为它需要CUDA运行时、设备驱动程序甚至操作系统内核中的新功能。以下示例旨在让您了解其功能。
3.1 例子:消除深拷贝
统一内存的一个关键好处是简化了异构计算内存模型,因为在访问GPU内核中的结构化数据时不需要深度副本。将包含指针的数据结构从CPU传递到GPU需要进行“深度复制”,如下图所示。
dataElem结构如下
struct dataElem {int prop1;int prop2;char *name;
}
要在设备上使用此结构,我们必须复制结构本身及其数据成员,然后复制结构指向的所有数据,然后更新结构副本中的所有指针。这导致了以下复杂的代码,只是为了将数据元素传递给内核函数。
void launch(dataElem *elem) {dataElem *d_elem;char *d_name;int namelen = strlen(elem->name) + 1;// Allocate storage for struct and namecudaMalloc(&d_elem, sizeof(dataElem));cudaMalloc(&d_name, namelen);// Copy up each piece separately, including new “name” pointer valuecudaMemcpy(d_elem, elem, sizeof(dataElem), cudaMemcpyHostToDevice);cudaMemcpy(d_name, elem->name, namelen, cudaMemcpyHostToDevice);cudaMemcpy(&(d_elem->name), &d_name, sizeof(char*), cudaMemcpyHostToDevice);// Finally we can launch our kernel, but CPU & GPU use different copies of “elem”Kernel<<< ... >>>(d_elem);
}
可以想象,在CPU和GPU代码之间共享复杂数据结构所需的额外主机端代码对生产率有重大影响。在统一内存中分配我们的dataElem结构消除了所有多余的设置代码,只剩下内核启动,它与宿主代码在同一指针上运行。这是一个很大的进步!
void launch(dataElem *elem) {kernel<<< ... >>>(elem);
}
但这不仅仅是代码复杂性的一大改进。统一内存还可以做以前无法想象的事情。让我们来看另一个例子:
3.2 例子: CPU/GPU之间共享链表
链表是一种非常常见的数据结构,但由于它们本质上是由指针组成的嵌套数据结构,在内存空间之间传递它们非常复杂。如果没有统一内存,CPU和GPU之间共享链表是无法管理的。唯一的选择是在零拷贝内存(固定主机内存)中分配列表,这意味着GPU访问仅限于PCI express性能。通过在统一内存中分配链表数据,设备代码可以在GPU上正常跟随指针,并具有设备内存的全部性能。该程序可以维护一个链表,可以在主机或设备上添加和删除列表元素.
将具有现有复杂数据结构的代码移植到GPU曾经是一项艰巨的任务,但统一内存使这变得更加容易。我预计统一内存将为CUDA程序员带来巨大的生产力提升。
4. c++中使用统一内存
统一内存在C++数据结构中大放异彩。C++通过使用带有复制构造函数的类简化了深度复制问题。复制构造函数是一个函数,它知道如何创建类的对象,为其成员分配空间,并从另一个对象复制它们的值。C++还允许重载new和delete内存管理运算符。这意味着我们可以创建一个基类,我们称之为Managed,它在重载的new运算符中使用cudaAllocManaged(),如下代码所示。
class Managed {
public:void *operator new(size_t len) {void *ptr;cudaMallocManaged(&ptr, len);cudaDeviceSynchronize();return ptr;}void operator delete(void *ptr) {cudaDeviceSynchronize();cudaFree(ptr);}
};
然后,我们可以让String类从Managed类继承,并实现一个复制构造函数,为复制的字符串分配统一内存。
// Deriving from “Managed” allows pass-by-reference
class String : public Managed {int length;char *data;public:// Unified memory copy constructor allows pass-by-valueString (const String &s) {length = s.length;cudaMallocManaged(&data, length);memcpy(data, s.data, length);}// ...
};
同样,我们使dataElem类继承Managed。
// Note “managed” on this class, too.
// C++ now handles our deep copies
class dataElem : public Managed {
public:int prop1;int prop2;String name;
};
通过这些更改,C++类在统一内存中分配存储,并自动处理深度副本。我们可以像任何C++对象一样在统一内存中分配dataElem。
dataElem *data = new dataElem;
请注意,您需要确保继承树中的每个类都继承自Managed,否则您的内存映射中会出现漏洞。实际上,您可能需要在CPU和GPU之间共享的所有内容都应该继承Managed。如果你更喜欢简单地使用统一内存来处理所有事情,你可以在全局范围内重载new和delete,但这只有在没有仅CPU数据的情况下才有意义,否则数据将不必要地迁移。
现在,当我们将对象传递给内核函数时,我们有一个选择;与C++中的正常情况一样,我们可以按值传递或按引用传递,如下面的示例代码所示。
// Pass-by-reference version
__global__ void kernel_by_ref(dataElem &data) { ... }// Pass-by-value version
__global__ void kernel_by_val(dataElem data) { ... }int main(void) {dataElem *data = new dataElem;...// pass data to kernel by referencekernel_by_ref<<<1,1>>>(*data);// pass data to kernel by value -- this will create a copykernel_by_val<<<1,1>>>(*data);
}
得益于统一内存,深度拷贝、按值传递和按引用传递都能正常工作。这为在GPU上运行C++代码提供了巨大的价值。
这篇文章中的例子可以在Github上找到。
5. 统一内存的光明未来
CUDA 6中统一内存最令人兴奋的事情之一是它只是一个开始。cuda围绕统一内存计划了一个漫长的改进和功能路线图。
统一内存的第一个版本旨在使CUDA编程更容易,特别是对于初学者。从CUDA 6开始,cudaemcpy()不再是必需的。通过使用cudaAllocManaged(),您可以有一个指向数据的指针,并且可以在CPU和GPU之间共享复杂的C/C++数据结构。这使得编写CUDA程序变得更加容易,因为您可以直接编写内核,而不是编写大量数据管理代码并维护所有数据的重复主机和设备副本。您仍然可以自由地使用cudaemcpy()(特别是cudamemppyAsync()
)来提高性能,但这不是一项要求,而是一种优化。
CUDA的未来版本可能会通过添加数据预取和迁移提示来提高使用统一内存的应用程序的性能。统一内存还将增加对更多操作系统的支持。nv的下一代GPU架构将带来一系列硬件改进,以进一步提高性能和灵活性.
相关文章:
了解cuda的统一内存
1. CUDA 6中的统一内存 在CUDA 6中,从Kepler GPU架构(计算能力3.0或更高)开始,在64位Windows 7、8和Linux操作系统(内核2.6.18)上开始支持统一内存. 从CUDA 6开始,NVIDIA推出了CUDA平台历史上…...
MySQL索引
2.1 索引概述 2.1.1 介绍 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就…...
会话控制(cookie、session 和 token)
1. 介绍 所谓会话控制就是 对会话进行控制HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户,而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题。 常见的会话控制…...
stm32 rtc 详解
目录 L151 RTC 唤醒代码 方式一 通过 RTC Alarm Interrupt:(基本和F1系列一样): L151 RTC 唤醒代码 方式二 通过 RTC WakeUp Interrupt F103VE RTC 闹钟唤醒代码 (103RC 没有闹钟中断): RTC(real time…...
D 咖智能饮品机器人:开启商业新篇
在科技迅猛发展的当下,智能机器人正逐步渗透到各个商业领域,D 咖智能饮品机器人便是其中的佼佼者,它的出现为饮品行业带来全新的发展契机,有望开启商业新篇。 从大环境来看,消费者对于饮品的需求日益多元化和个性化。他…...
使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。
以下代码来自Let’s Go further节选。具体说明均为作者本人理解。 编辑邮件模版 主要包含三个template: subject:主题plainBody: 纯文本正文htmlBody:超文本语言正文 {{define "subject"}}Welcome to Greenlight!{{end}} {{def…...
重拾设计模式--模板方法模式
文章目录 一、模板方法模式概述二、模板方法模式UML图三、优点1代码复用性高2可维护性好3扩展性强 四、缺点五、使用场景六、C 代码示例1七、 C 代码示例2 一、模板方法模式概述 定义:定义一个操作中的算法骨架,而降一些步骤延迟到子类中。模板方法使得…...
二、windows环境下vscode使用wsl教程
本篇文件介绍了在windows系统使用vscode如何连接使用wsl,方便wsl在vscode进行开发。 1、插件安装 双击桌面vscode,按快捷键CtrlShiftX打开插件市场,搜索【WSL】点击安装即可。 2、开启WSL的linux子系统 点击左下方图标【Open a Remote Win…...
我们的电视Our tv 3.6.0安卓+TV 一款全新电视直播软件-内置稳定直播源
应用简介 我们的电视(ourtv)是一款完全无广告的电视直播软件,清晰度可选择高清,超清,蓝光等播放。安装即可使用,再也不用费劲去找各种不稳定的直播源了。 “我们的电视”播放线路(直播源&…...
批处理理解
初识批处理 如何批处理: 命名:.bat 方法:创建一个记事本文件,然后将其扩展改为.bat 批处理作用:自上而下成批处理每一条DOS命令,直到执行到最后一条。运行环境:当然是我们cmd了 回归我学过的…...
高效准确的PDF解析工具,赋能企业非结构化数据治理
目录 准确性高:还原复杂版面元素 使用便捷:灵活适配场景 贴心服务:快速响应机制 在数据为王的时代浪潮中,企业数据治理已成为组织优化运营、提高竞争力的关键。随着数字化进程的加速,企业所积累的数据量呈爆炸式增长…...
Go框架比较:goframe、beego、iris和gin
由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web"框架"为主。这里稍微打了个引号,因为大部分"框架"从设计和功能定位上来讲,充其量都只能算是一个组件&…...
【ETCD】【实操篇(三)】【ETCDCTL】如何向集群中写入数据
在分布式系统中,etcd 是一个高可用的键值存储,用于存储和共享配置信息、服务发现、协调等。向 etcd 写入数据可以通过多种方式进行,常见的方式是使用 etcd 提供的 HTTP API 或者通过客户端库来进行操作。 目录 一、使用EtcdCtl工具来写入数据…...
2025年春节档的《哪吒2》,光线传媒动画梦的关键一战
没想到《哪吒之魔童闹海》会以这种形式重回大众视野。 距离2025年春节还有不到两个月,春节档电影大战已经打响,原本市场还在猜测2024年频频“胎动”的《哪吒之魔童闹海》(以下简称《哪吒2》)会不会参与这场“神仙打架”ÿ…...
windows C#-实例构造函数
声明一个实例构造函数,以指定在使用 new 表达式创建某个类型的新实例时所执行的代码。 要初始化静态类或非静态类中的静态变量,可以定义静态构造函数。 如以下示例所示,可以在一种类型中声明多个实例构造函数: class Coords {pu…...
FPGA-PS端编程1:
目标 在小梅哥的zynq 7015上,完成以下目标: 读取 S1 按键的电平, 当 S1 按键为按下状态时,驱动 PS LED 以 1S 的频率闪烁(注意理解 1S 的频率闪烁和 1S的时间翻转两种描述之间的差别), 当 S1 释放后,停止…...
【JavaEE进阶】第一个Spring Boot程序
目录 🌴安装插件 🎄Spring Boot介绍 🌳Spring Boot项目创建 🚩创建Spring Boot项目 🏀jar 包下载不下来问题 🚩启动项目 🌲目录介绍 🚩src文件 🚩target文件 &…...
RunCam WiFiLink连接手机图传测试
RunCam WiFiLink中文手册从这里下载 一、摄像头端 1.连接天线(易忘) 2.打开摄像头前面的盖子(易忘) 3.接上直流电源,红线为正,黑线为负 4.直流电源设置电压为14v,电流为3.15A, 通…...
使用Chat-LangChain模块创建一个与用户交流的机器人
当然!要使用Chat-LangChain模块创建一个与用户交流的机器人,你需要安装并配置一些Python库。以下是一个基本的步骤指南和示例代码,帮助你快速上手。 安装依赖库 首先,你需要安装langchain库,它是一个高级框架&#x…...
地级市2011-2020数字经济 博士研究生自用数据
赵涛评价指标数据,具体指标见图片 参考文献: [1]赵涛,张智,梁上坤.数字经济、创业活跃度与高质量发展——来自中国城市的经验证据[J].管理世界,2020,36(10):65-76. 每百人移动电话数,是模仿赵涛的,指人均再➗100 数据来源,中国城…...
呼叫中心部门如何使用开源大模型智能呼叫中心,对接已有系统实现降本增效
呼叫中心部门如何使用开源大模型智能呼叫中心,对接已有系统实现降本增效 作者:开源大模型智能呼叫中心FreeIPCC 随着人工智能技术的快速发展,特别是大规模语言模型(LLM)的应用,企业可以通过将开源大模型与…...
Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)
效果预览 第一步: 告诉chatgpt: 将latex格式中的英文翻译为中文(符号和公式不要动),给出latex格式第二步: Latex 转换为 Word(使用GrindEQ ) 视频 https://www.bilibili.com/video/BV1f242…...
多态中虚函数调用问题
在多态中,一般通过虚函数表会调用子类重写的虚函数,然而,有一种情况调用的还是父类的虚函数,就是在父类的构造函数中调用的是父类的虚函数,无论子类是否重写。 #include <iostream> #include <list> #inc…...
【NLP 18、新词发现和TF·IDF】
目录 一、新词发现 1.新词发现的衡量标准 ① 内部稳固 ② 外部多变 2.示例 ① 初始化类 NewWordDetect ② 加载语料信息,并进行统计 ③ 统计指定长度的词频及其左右邻居字符词频 ④ 计算熵 ⑤ 计算左右熵 编辑 ⑥ 统计词长总数 ⑦ 计算互信息 ⑧ 计算每个词…...
windows服务器Oracle TNS 远程监听器中毒
修复Oracle TNS 监听器远程中毒漏洞 1.1 修改监听文件 如何快速找到listener.ora ? cmd输入 tnsping localhost 修改配置文件,路径以自己的实际路径为准,我都在D盘 listener.ora内容如下: #listener.ora Network Configuration F…...
GitLab的安装和使用
1.GitLab 环境说明 系统版本 CentOS 7.2 x86_64 软件版本 gitlab-ce-10.8.4 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能…...
常用的JVM启动参数有哪些?
大家好,我是锋哥。今天分享关于【常用的JVM启动参数有哪些?】面试题。希望对大家有帮助; 常用的JVM启动参数有哪些? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM启动参数用于配置Java虚拟机(JVM)的运行时行为…...
MobaXterm 连接不上VMware 的Ubuntu 虚拟机
想在window11的笔记本上通过VMWare安装Ubuntu操作系统,但是在两个桌面见来回切换,十分的麻烦,于是通过远程服务访问客户端软件MateXterm来访问虚拟机的Linux系统,但是从CSDN上搜到的教程都没有成功,于是,尝…...
异步BUCK二极管损耗计算
异步BUCK工作原理 Q闭合时(Ton),输入电压Vin为电感L和输出电容Cout充电,同时为负载供电;Q断开时(Toff),电感L为负载供电,电流通过续流二极管D回流到电感L; 之…...
【WPF】把DockPanel的内容生成图像
要在WPF中将一个 DockPanel 的内容生成为图像并保存,可以按照与之前类似的步骤进行,但这次我们将专注于 DockPanel 控件而不是整个窗口。 DockPanel的使用 WPF(Windows Presentation Foundation)中的 DockPanel 是一种布局控件&…...
STM32定时器对象捕获功能测量市电频率
在很多嵌入式系统中,精确地测量外部信号的频率是一个常见需求,尤其是对于需要同步外部电源(如市电)的应用。市电频率(50Hz或60Hz)是电力系统中一个至关重要的参数。在许多场景下,特别是UPS&…...
[react]5、React脚手架
1、前端脚手架 1、Vue的脚手架:vue-cli 2、Angular的脚手架:angular-cli 3、React的脚手架:create-react-app 目前这些脚手架都是使用node编写的,并且都是基于webpack的,需要在电脑上安装node环境 脚手架的作用是帮助我…...
uni-app开发个人中心页面
目录 一:功能实现 二:功能实现 一:功能实现 个人中心主要展示用户的个人信息,订单信息以及其他模块信息包含收藏,我的地址,我的钱包等。页面分为三个部分,底部显示用户信息和个人设置等。中间部分显示订单信息可以点击查看订单列表,底部显示其他模块信息。 二:功…...
Ubuntu 20.04 卸载和安装 MySQL8.0
卸载 首先,检查一下系统安装的软件包有哪些,使用dpkg -l | grep mysql命令: 为了将MySQL卸载干净,这些文件都需要被删除。 在Ubuntu20.04系统下,卸载干净MySQL8.0以确保下一次安装不会出错,可以按照以下…...
【深度学习-论文】通俗易懂的理解多标签识别
文章目录 1. 文章主要内容2. 通俗易懂的理解多标签分类到底是如何实现的通俗易懂的多标签分类实现介绍实现步骤为什么这么做?小结论文题目:Rada r emitter multi-la bel recognition based on residual network 基于残差网络的雷达发射机多标签识别1. 文章主要内容 《基于残…...
“TA”说|表数据备份还原:SQLark 百灵连接助力项目部署验收
💬 南飞雁|应用开发工程师 有些重要项目的部署验收,会在生产环境完成,验收完成后,又需要把这部分数据清空。这时就需要对数据表进行备份和还原,虽然可以通过命令直接实现,但是有一些操作门槛&am…...
android studio方便快捷保存数据读取数据(SharedPreferences)
原理:会自动生成一个xml文件,然后保存参数。xml文件的名字就是要读取的文件的名字。可以创建多个这样的xml文件。(储存方式是键值对方式,一个名字 对应 一个值) 首先先创建两个对象 private SharedPreferences shar…...
31.设计模式
单例模式 比如工具类,进需要一个实例,即可以在各处处理。用以节省创建类对象的开销和内存的开销。 保证一个类只有一个实例,而客户可以从一个众所周知的访问点访问它。 实现一个简单的单例 在一个python文件中定义一个类,并创…...
RTOS之邮箱
邮箱 邮箱 (Mailbox) 服务是实时操作系统中一种常用的线程间通信机制。它提供了一种高效、低开销的消息传递方式,允许线程之间交换固定大小的数据。 1. 邮箱的应用场景 考虑一个简单的示例:线程 1 负责检测按键状态并将状态信息发送出去,线程…...
Linux setfacl 命令详解
文章目录 Linux setfacl 命令详解一、ACL 和 setfacl 简介二、基本语法三、常用操作1. 查看 ACL2. 为用户设置权限3. 为组设置权限4. 删除 ACL 条目5. 设置默认 ACL6. 递归设置 ACL 四、示例操作1. 创建示例目录和文件2. 设置 ACL3. 验证 ACL 五、注意事项六、总结 Linux setfa…...
OpenCV 学习记录:首篇
最近在学习机器视觉,希望能通过记录博客的形式来鞭策自己坚持学完,同时也把重要的知识点记录下来供参考学习。 1. OpenCV 介绍与模块组成 什么是 OpenCV? OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软…...
Java游戏开发基础:从零开始制作一个简单的2D游戏
目录 游戏开发概述 开发工具 项目结构 1. 创建游戏窗口 2. 游戏面板 解释: 3. 玩家类 解释: 4. 障碍物类 解释: 5. 游戏循环与碰撞检测 总结 在现代游戏开发中,Java被广泛应用于创建各种类型的游戏,特别是…...
入门STL(map/multiset)
目录 编辑 1.map 输入 输出 样例 输入 输出 解题代码: 2.multiset 输入 输出 样例 输入 输出 解题代码: 留下你的足迹吧!谢谢。 1.map map函数是一个内置函数,它允许你对一个序列)的每个元素应用…...
【mysql】1205 -Lock wait timeout exceeded; try restarting transaction
问题: mysql8执行SQL提示下面错误: 1205 -Lock wait timeout exceeded; try restarting transaction 1205-超过锁定等待超时;尝试重新启动事务 可能的原因: 事务冲突:多个事务同时尝试修改同一行数据,导…...
【开源免费】基于SpringBoot+Vue.JS在线宠物用品交易网站(JAVA毕业设计)
本文项目编号 T 092 ,文末自助获取源码 \color{red}{T092,文末自助获取源码} T092,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
postman读取文件执行
要从文件获取的变量 text 在pre-request 中写从文件获取数据的脚本。脚本实现了,设置了text默认值,从文件读取text列,将text存入环境变量 //获取text参数 var text "济南天气"; if(data.text){ text data.text } pm.environment.…...
UDP系统控制器_音量控制、电脑关机、文件打开、PPT演示、任务栏自动隐藏
UDP系统控制器(ShuiYX) 帮助文档 概述 本程序设计用于通过UDP协议接收指令来远程控制计算机的音量、执行特定命令和其他功能。为了确保程序正常工作,请确认防火墙和网络设置允许UDP通信,并且程序启动后会最小化到托盘图标。 命令格式及说明 音量控制…...
pydantic BaseModel
1. Pydantic 是什么? Pydantic 是一个Python库,主要用于数据验证和设置管理。它通过定义数据模型(Model)来确保输入数据的类型和结构符合预期。 Pydantic 的核心功能是基于Python的类型提示(Type Hints)&a…...
[创业之路-202]:任正非管理华为的思想与毛泽东管理党、军队、国家的思想的相似性与差异性
目录 一、相似性 1、指导思想 2、管理策略 3、危机意识与自我否定 4、理想主义与奋斗精神 二、差异性 1、哲学基础与思想倾向 2、管理方法与策略 3、组织文化与价值观 一、相似性 任正非管理华为的思想与毛泽东管理党、军队、国家的思想在多个方面存在相似性。 以下…...
【渗透测试】|brupsuit的使用
一、 1.1爆破模块: 1、将拦截发送到intruder模块 2、在intruder模块设置pyaload位置 3、选择攻击类型 4、 5、设置好攻击类型和payload集就可以点击开始攻击,点击后弹出具体攻击详情 6、【payloads】模块相关 6.1 payload集为【简单列表】 添加&…...