CUDA C:查看GPU设备信息
相关阅读
CUDA Chttps://blog.csdn.net/weixin_45791458/category_12530616.html?spm=1001.2014.3001.5482
了解自己设备的性能是很有必要的,为此CUDA 运行时(runtime)API给用户也提供了一些查询设备信息的函数,下面的函数用于查看GPU设备的一切信息。
__host__ cudaError_t cudaGetDeviceProperties (cudaDeviceProp* prop, int device)Parameters
prop -设备属性指针
device -设备编号
其中参数prop是指向设备属性结构cudaDeviceProp的指针,它的定义如下所示。
struct cudaDeviceProp {char name[256];cudaUUID_t uuid;size_t totalGlobalMem;size_t sharedMemPerBlock;int regsPerBlock;int warpSize;size_t memPitch;int maxThreadsPerBlock;int maxThreadsDim[3];int maxGridSize[3];int clockRate;size_t totalConstMem;int major;int minor;size_t textureAlignment;size_t texturePitchAlignment;int deviceOverlap;int multiProcessorCount;int kernelExecTimeoutEnabled;int integrated;int canMapHostMemory;int computeMode;int maxTexture1D;int maxTexture1DMipmap;int maxTexture1DLinear;int maxTexture2D[2];int maxTexture2DMipmap[2];int maxTexture2DLinear[3];int maxTexture2DGather[2];int maxTexture3D[3];int maxTexture3DAlt[3];int maxTextureCubemap;int maxTexture1DLayered[2];int maxTexture2DLayered[3];int maxTextureCubemapLayered[2];int maxSurface3D[3];int maxSurface1DLayered[2];int maxSurface2DLayered[3];int maxSurfaceCubemap;int maxSurfaceCubemapLayered[2];size_t surfaceAlignment;int concurrentKernels;int ECCEnabled;int pciBusID;int pciDeviceID;int pciDomainID;int tccDriver;int asyncEngineCount;int unifiedAddressing;int memoryClockRate;int memoryBusWidth;int l2CacheSize;int persistingL2CacheMaxSize;int maxThreadsPerMultiProcessor;int streamPrioritiesSupported;int globalL1CacheSupported;int localL1CacheSupported;size_t sharedMemPerMultiprocessor;int regsPerMultiprocessor;int managedMemory;int isMultiGpuBoard;int multiGpuBoardGroupID;int singleToDoublePrecisionPerfRatio;int pageableMemoryAccess;int concurrentManagedAccess;int computePreemptionSupported;int canUseHostPointerForRegisteredMem;int cooperativeLaunch;int cooperativeMultiDeviceLaunch;int pageableMemoryAccessUsesHostPageTables;int directManagedMemAccessFromHost;int accessPolicyMaxWindowSize;
}
这些信息的含义如下所示。
name:ASCII字符串,用于标识设备。
uuid:16字节的唯一标识符。
totalGlobalMem:设备上可用的全局内存总量(以字节为单位)。
sharedMemPerBlock:线程块可用的最大共享内存量(以字节为单位)。
regsPerBlock:线程块可用的最大32位寄存器数量。
warpSize:线程束(warp)大小(以线程数为单位)。
memPitch:由cudaMallocPitch()分配的内存区域允许的最大pitch(以字节为单位)。
maxThreadsPerBlock:每个块中的最大线程数。
maxThreadsDim:块的每个维度的最大尺寸(数组,包含3个元素)。
maxGridSize:网格的每个维度的最大尺寸(数组,包含3个元素)。
clockRate:时钟频率(以千赫为单位)。
totalConstMem:设备上可用的常量内存总量(以字节为单位)。
major、minor:定义设备计算能力的主要和次要修订号。
textureAlignment:纹理对齐要求;对齐到textureAlignment字节的纹理基地址无需应用偏移量。
texturePitchAlignment:绑定到pitched内存的2D纹理引用的pitch对齐要求。
deviceOverlap:如果设备可以在执行内核时并发地在主机和设备之间复制内存,则为1;否则为0。已弃用,请改用asyncEngineCount。
multiProcessorCount:设备上的多处理器数量。
kernelExecTimeoutEnabled:如果设备上执行的内核有运行时限制,则为1;否则为0。
integrated:如果设备是集成(主板)GPU,则为1;如果是独立(卡)组件,则为0。
canMapHostMemory:如果设备可以将主机内存映射到CUDA地址空间以供cudaHostAlloc()/cudaHostGetDevicePointer()使用,则为1;否则为0。
computeMode:设备当前处于的计算模式。可用模式包括:cudaComputeModeDefault、cudaComputeModeProhibited、cudaComputeModeExclusiveProcess。
maxTexture1D:最大1D纹理尺寸。
maxTexture1DMipmap:最大1D mipmap纹理尺寸。
maxTexture1DLinear:绑定到线性内存的1D纹理的最大尺寸。
maxTexture2D:最大2D纹理尺寸(数组,包含2个元素)。
maxTexture2DMipmap:最大2D mipmap纹理尺寸(数组,包含2个元素)。
maxTexture2DLinear:绑定到pitch linear内存的2D纹理的最大尺寸(数组,包含3个元素)。
maxTexture2DGather:如果需要执行纹理聚集操作,则包含最大2D纹理尺寸(数组,包含2个元素)。
maxTexture3D:最大3D纹理尺寸(数组,包含3个元素)。
maxTexture3DAlt:最大替代3D纹理尺寸(数组,包含3个元素)。
maxTextureCubemap:最大立方体纹理宽度或高度。
maxTexture1DLayered:最大1D分层纹理尺寸(数组,包含2个元素)。
maxTexture2DLayered:最大2D分层纹理尺寸(数组,包含3个元素)。
maxTextureCubemapLayered:最大立方体分层纹理尺寸(数组,包含2个元素)。
maxSurface1D:最大1D表面尺寸。
maxSurface2D:最大2D表面尺寸(数组,包含2个元素)。
maxSurface3D:最大3D表面尺寸(数组,包含3个元素)。
maxSurface1DLayered:最大1D分层表面尺寸(数组,包含2个元素)。
maxSurface2DLayered:最大2D分层表面尺寸(数组,包含3个元素)。
maxSurfaceCubemap:最大立方体表面宽度或高度。
maxSurfaceCubemapLayered:最大立方体分层表面尺寸(数组,包含2个元素)。
surfaceAlignment:表面的对齐要求。
concurrentKernels:如果设备支持在同一上下文中同时执行多个内核,则为1;否则为0。不能保证设备上同时存在多个内核,因此不应依赖此功能以确保正确性。
ECCEnabled:如果设备已启用ECC支持,则为1;否则为0。
pciBusID:设备的PCI总线标识符。
pciDeviceID:设备的PCI设备(有时称为插槽)标识符。
pciDomainID:设备的PCI域标识符。
tccDriver:如果设备正在使用TCC驱动程序,则为1;否则为0。
asyncEngineCount:当设备可以在执行内核时并发地在主机和设备之间复制内存时为1。当设备可以在主机和设备之间双向并发地复制内存并同时执行内核时为2。如果两者都不支持,则为0。
unifiedAddressing:如果设备与主机共享统一的地址空间,则为1;否则为0。
memoryClockRate:内存时钟峰值频率(以千赫为单位)。
memoryBusWidth:内存总线宽度(以位为单位)。
l2CacheSize:L2缓存大小(以字节为单位)。
persistingL2CacheMaxSize:L2缓存的最大持久化行大小(以字节为单位)。
maxThreadsPerMultiProcessor:每个多处理器的最大常驻线程数。
streamPrioritiesSupported:如果设备支持流优先级,则为1;否则为0。
globalL1CacheSupported:如果设备支持在L1缓存中缓存全局内存,则为1;否则为0。
localL1CacheSupported:如果设备支持在L1缓存中缓存局部内存,则为1;否则为0。
sharedMemPerMultiprocessor:多处理器可用的最大共享内存量(以字节为单位);此量由所有同时驻留在多处理器上的线程块共享。
regsPerMultiprocessor:多处理器可用的最大32位寄存器数量;此数量由所有同时驻留在多处理器上的线程块共享。
managedMemory:如果设备支持在此系统上分配托管内存,则为1;否则为0。
isMultiGpuBoard:如果设备位于多GPU板上(例如Gemini卡),则为1;否则为0。
multiGpuBoardGroupID:与同一板上关联的设备组的唯一标识符。位于同一多GPU板上的设备将共享相同的标识符。
hostNativeAtomicSupported:如果设备与主机之间的链接支持本机原子操作,则为1;否则为0。
singleToDoublePrecisionPerfRatio:单精度性能(以浮点运算每秒为单位)与双精度性能之比。
pageableMemoryAccess:如果设备支持在没有调用cudaHostRegister的情况下一致地访问分页内存,则为1;否则为0。
concurrentManagedAccess:如果设备可以与CPU并发地一致访问托管内存,则为1;否则为0。
computePreemptionSupported:如果设备支持计算抢占,则为1;否则为0。
canUseHostPointerForRegisteredMem:如果设备可以在CPU处使用主机注册的内存的相同虚拟地址,则为1;否则为0。
cooperativeLaunch:如果设备支持通过cudaLaunchCooperativeKernel启动协作内核,则为1;否则为0。
cooperativeMultiDeviceLaunch:如果设备支持通过cudaLaunchCooperativeKernelMultiDevice启动协作内核,则为1;否则为0。
sharedMemPerBlockOptin:可由特殊选择使用的每个设备的最大块共享内存(字节)。
pageableMemoryAccessUsesHostPageTables:如果设备通过主机的页表访问分页内存,则为1;否则为0。
directManagedMemAccessFromHost:如果主机可以直接访问设备上的托管内存而无需迁移,则为1;否则为0。
maxBlocksPerMultiProcessor:每个多处理器上可驻留的最大线程块数。
accessPolicyMaxWindowSize:cudaAccessPolicyWindow::num_bytes的最大值。
reservedSharedMemPerBlock:CUDA驱动程序保留的每个块的共享内存(以字节为单位)。
hostRegisterSupported:如果设备支持通过cudaHostRegister注册主机内存,则为1;否则为0。
sparseCudaArraySupported:如果设备支持稀疏CUDA数组和稀疏CUDA mipmap数组,则为1;否则为0。
hostRegisterReadOnlySupported:如果设备支持使用cudaHostRegister标志cudaHostRegisterReadOnly注册必须映射为只读的内存,则为1;否则为0。
timelineSemaphoreInteropSupported:如果设备支持外部时间线信号量交互,则为1;否则为0。
memoryPoolsSupported:如果设备支持使用cudaMallocAsync和cudaMemPool系列API,则为1;否则为0。
gpuDirectRDMASupported:如果设备支持GPUDirect RDMA API,则为1;否则为0。
gpuDirectRDMAFlushWritesOptions:根据cudaFlushGPUDirectRDMAWritesOptions枚举解释的位掩码。
gpuDirectRDMAWritesOrdering:请参阅cudaGPUDirectRDMAWritesOrdering枚举以获取数值。
memoryPoolSupportedHandleTypes:与内存池基于IPC支持的句柄类型的位掩码。
deferredMappingCudaArraySupported:如果设备支持延迟映射CUDA数组和CUDA mipmap数组,则为1;否则为0。
ipcEventSupported:如果设备支持IPC事件,则为1;否则为0。
unifiedFunctionPointers:如果设备支持统一指针,则为1;否则为0。
可以注意到,cudaGetDeviceProperties函数需要设备编号作为参数,如何知道自己有多少设备呢?可以使用cudaGetDeviceCount函数,如下所示。
__host__ __device__ cudaError_t cudaGetDeviceCount (int* count)Parameters
count -计算能力大于2.0的设备数指针
有时候我们需要知道设备的CUDA驱动API版本和CUDA运行时API版本,可以分别使用下面的两个函数。
__host__ cudaError_t cudaDriverGetVersion (int* driverVersion)
__host__ __device__ cudaError_t cudaRuntimeGetVersion (int* runtimeVersion)Parameters
driverVersion -指向驱动版本号的指针
runtimeVersion -指向运行时版本号的指针
这两个版本号的组成方式是:1000*主版本号+10*小版本号。例如对于9.1版本,版本号是9010;对于10.3版本,版本号是10030。
下面给出了一段程序,查询了大家一般感兴趣的设备属性。
#include <cuda_runtime.h>
#include <stdio.h>#define CHECK(call) \
{ \const cudaError_t error = call; \if (error != cudaSuccess) \{ \fprintf(stderr, "Error: %s:%d, ", __FILE__, __LINE__); \fprintf(stderr, "code: %d, reason: %s\n", error, \cudaGetErrorString(error)); \exit(1); \} \
}int main(int argc, char **argv)
{printf("%s Starting...\n", argv[0]);int deviceCount = 0;cudaGetDeviceCount(&deviceCount);if (deviceCount == 0){printf("There are no available device(s) that support CUDA\n");}else{printf("Detected %d CUDA Capable device(s)\n", deviceCount);printf("\n");}int dev = 0, driverVersion = 0, runtimeVersion = 0;for(dev = 0; dev < deviceCount; dev++){CHECK(cudaSetDevice(dev));cudaDeviceProp deviceProp;CHECK(cudaGetDeviceProperties(&deviceProp, dev));printf("Device %d: \"%s\"\n", dev, deviceProp.name);cudaDriverGetVersion(&driverVersion);cudaRuntimeGetVersion(&runtimeVersion);printf(" CUDA Driver Version / Runtime Version %d.%d / %d.%d\n",driverVersion / 1000, (driverVersion % 100) / 10,runtimeVersion / 1000, (runtimeVersion % 100) / 10);printf(" CUDA Capability Major/Minor version number: %d.%d\n",deviceProp.major, deviceProp.minor);printf(" Total amount of global memory: %.2f GBytes (%llu ""bytes)\n", (float)deviceProp.totalGlobalMem / pow(1024.0, 3),(unsigned long long)deviceProp.totalGlobalMem);printf(" GPU Clock rate: %.0f MHz (%0.2f ""GHz)\n", deviceProp.clockRate * 1e-3f,deviceProp.clockRate * 1e-6f);printf(" Memory Clock rate: %.0f Mhz\n",deviceProp.memoryClockRate * 1e-3f);printf(" Memory Bus Width: %d-bit\n",deviceProp.memoryBusWidth);if (deviceProp.l2CacheSize){printf(" L2 Cache Size: %d bytes\n",deviceProp.l2CacheSize);}printf(" Max Texture Dimension Size (x,y,z) 1D=(%d), ""2D=(%d,%d), 3D=(%d,%d,%d)\n", deviceProp.maxTexture1D,deviceProp.maxTexture2D[0], deviceProp.maxTexture2D[1],deviceProp.maxTexture3D[0], deviceProp.maxTexture3D[1],deviceProp.maxTexture3D[2]);printf(" Max Layered Texture Size (dim) x layers 1D=(%d) x %d, ""2D=(%d,%d) x %d\n", deviceProp.maxTexture1DLayered[0],deviceProp.maxTexture1DLayered[1], deviceProp.maxTexture2DLayered[0],deviceProp.maxTexture2DLayered[1],deviceProp.maxTexture2DLayered[2]);printf(" Total amount of constant memory: %lu bytes\n",deviceProp.totalConstMem);printf(" Total amount of shared memory per block: %lu bytes\n",deviceProp.sharedMemPerBlock);printf(" Total number of registers available per block: %d\n",deviceProp.regsPerBlock);printf(" Warp size: %d\n",deviceProp.warpSize);printf(" Maximum number of threads per multiprocessor: %d\n",deviceProp.maxThreadsPerMultiProcessor);printf(" Number of multiprocessor: %d\n",deviceProp.multiProcessorCount);printf(" Maximum number of threads per block: %d\n",deviceProp.maxThreadsPerBlock);printf(" Maximum sizes of each dimension of a block: %d x %d x %d\n",deviceProp.maxThreadsDim[0],deviceProp.maxThreadsDim[1],deviceProp.maxThreadsDim[2]);printf(" Maximum sizes of each dimension of a grid: %d x %d x %d\n",deviceProp.maxGridSize[0],deviceProp.maxGridSize[1],deviceProp.maxGridSize[2]);printf(" Maximum memory pitch: %lu bytes\n",deviceProp.memPitch);printf("\n");}exit(EXIT_SUCCESS);
}
下面是一个服务器上测试的输出结果。
./checkDeviceInfor Starting...
Detected 3 CUDA Capable device(s)Device 0: "Tesla P100-PCIE-16GB"CUDA Driver Version / Runtime Version 11.4 / 10.1CUDA Capability Major/Minor version number: 6.0Total amount of global memory: 15.90 GBytes (17071734784 bytes)GPU Clock rate: 1329 MHz (1.33 GHz)Memory Clock rate: 715 MhzMemory Bus Width: 4096-bitL2 Cache Size: 4194304 bytesMax Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072,65536), 3D=(16384,16384,16384)Max Layered Texture Size (dim) x layers 1D=(32768) x 2048, 2D=(32768,32768) x 2048Total amount of constant memory: 65536 bytesTotal amount of shared memory per block: 49152 bytesTotal number of registers available per block: 65536Warp size: 32Maximum number of threads per multiprocessor: 2048Number of multiprocessor: 56Maximum number of threads per block: 1024Maximum sizes of each dimension of a block: 1024 x 1024 x 64Maximum sizes of each dimension of a grid: 2147483647 x 65535 x 65535Maximum memory pitch: 2147483647 bytesDevice 1: "Tesla P100-PCIE-16GB"CUDA Driver Version / Runtime Version 11.4 / 10.1CUDA Capability Major/Minor version number: 6.0Total amount of global memory: 15.90 GBytes (17071734784 bytes)GPU Clock rate: 1329 MHz (1.33 GHz)Memory Clock rate: 715 MhzMemory Bus Width: 4096-bitL2 Cache Size: 4194304 bytesMax Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072,65536), 3D=(16384,16384,16384)Max Layered Texture Size (dim) x layers 1D=(32768) x 2048, 2D=(32768,32768) x 2048Total amount of constant memory: 65536 bytesTotal amount of shared memory per block: 49152 bytesTotal number of registers available per block: 65536Warp size: 32Maximum number of threads per multiprocessor: 2048Number of multiprocessor: 56Maximum number of threads per block: 1024Maximum sizes of each dimension of a block: 1024 x 1024 x 64Maximum sizes of each dimension of a grid: 2147483647 x 65535 x 65535Maximum memory pitch: 2147483647 bytesDevice 2: "Tesla P100-PCIE-16GB"CUDA Driver Version / Runtime Version 11.4 / 10.1CUDA Capability Major/Minor version number: 6.0Total amount of global memory: 15.90 GBytes (17071734784 bytes)GPU Clock rate: 1329 MHz (1.33 GHz)Memory Clock rate: 715 MhzMemory Bus Width: 4096-bitL2 Cache Size: 4194304 bytesMax Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072,65536), 3D=(16384,16384,16384)Max Layered Texture Size (dim) x layers 1D=(32768) x 2048, 2D=(32768,32768) x 2048Total amount of constant memory: 65536 bytesTotal amount of shared memory per block: 49152 bytesTotal number of registers available per block: 65536Warp size: 32Maximum number of threads per multiprocessor: 2048Number of multiprocessor: 56Maximum number of threads per block: 1024Maximum sizes of each dimension of a block: 1024 x 1024 x 64Maximum sizes of each dimension of a grid: 2147483647 x 65535 x 65535Maximum memory pitch: 2147483647 bytes 2147483647 bytes
相关文章:

CUDA C:查看GPU设备信息
相关阅读 CUDA Chttps://blog.csdn.net/weixin_45791458/category_12530616.html?spm1001.2014.3001.5482 了解自己设备的性能是很有必要的,为此CUDA 运行时(runtime)API给用户也提供了一些查询设备信息的函数,下面的函数用于查看GPU设备的一切信息。 …...
深度学习如何入门?——从“小白”到“大牛”的深度学习之旅
大家好,今天我要和大家分享的主题是“深度学习如何入门”。深度学习作为人工智能领域的重要分支,已经取得了许多令人瞩目的成果。然而,对于初学者来说,深度学习可能显得有些神秘和难以入手。那么,如何才能快速入门深度…...

编译 qsqlmysql.dll QMYSQL driver not loaded
Qt 连接MySQL数据库,没有匹配的qsqlmysql.dll, 需要我们跟进自己Mysql 以及QT版本自行编译的。异常如下图: 安装环境为 VS2019 Qt5.12.12(msvc2017_64、以及源码) 我的安装地址:D:\Qt\Qt5.12.12 Mysql 8.1.0 默认安…...
Android日历提醒增删改查事件、添加天数不对问题
Android日历提醒是非常好的提醒功能,笔者在做的过程中,遇到的一些问题,现整理出来,以供参考。 一、申请日历的读写权限 <uses-permission android:name"android.permission.WRITE_CALENDAR" /> <uses-permiss…...

【力扣hot100】刷题笔记Day15
前言 今天要刷的是图论,还没学过,先看看《代码随想录》这部分的基础 深搜DFS理论基础 深搜三部曲 确认递归函数、参数确认终止条件处理目前搜索节点出发的路径 代码框架 void dfs(参数) {if (终止条件) {存放结果;return;}for (选择:本节点…...
vue-显示数据
v-text和v-html专门用来展示数据, 其作用和插值表达式类似。v-text和v-html可以避免插值闪烁问题. 当网速比较慢时, 使用{{}}来展示数据, 有可能会产生插值闪烁问题。 插值闪烁: 在数据未加载完成时,页面会显示出原始的{{}}, 过一会才会展示正常数据.语法…...
kali linux常用命令
1. 网络扫描 功能:网络扫描是用来发现网络中的设备、服务和开放端口的过程。 命令:nmap 例子:nmap -sP 192.168.1.0/24 这个命令使用 Nmap 进行网络扫描,列出 192.168.1.0/24 网段中的所有活跃主机。 2. 密码破解 功能…...

HTML5:七天学会基础动画网页4
backgorund-size 值与说明 length(单位像素):设置背景图片高度和宽度,第一个值设置宽度,第二个值设置高度,如果只给出一个值,第二个是设置为auto。 percentage(百分比):以父元素的百分比来设置背景图像的宽度和高度,…...
Web安全之接口鉴权
目录 接口鉴权定义 为什么会有cookie还有session还有token这种技术的存在?...
shardingsphere 集成springboot【水平分表】
创建sharding_sphere数据库 在数据库中创建两张表,t_order_1和t_order_2 分片规则:如果订单编号是偶数添加到t_order_1,如果是奇数添加到t_order_2 创建实体类 public class Order { private Integer id; private Integer orderType; private Int…...

GO 的 Web 开发系列(六)—— 遍历路径下的文件
文件 IO 处理是程序的基础功能,WEB 程序中通过文件 IO 实现附件的上传与下载。在 GO 中,有多种方式可以遍历文件目录,获取文件路径,本文从使用层面上论述这些函数。 预先准备一个包含子目录的目录,用于遍历测试&#…...
Flutter 处理异步操作并根据异步操作状态动态构建界面的方法FutureBuilder
概述 当界面的内容需要依靠网络请求的数据,就需要处理苦恼的,状态是空,非空的逻辑了,不然页面构建可能会报错,而FutureBuilder提供了一个非常好的解决方法,直接看代码 代码 异步操作函数 即网络请求函数…...

Git教程-Git的基本使用
Git是一个强大的分布式版本控制系统,它不仅用于跟踪代码的变化,还能够协调多个开发者之间的工作。在软件开发过程中,Git被广泛应用于协作开发、版本管理和代码追踪等方面。以下是一个详细的Git教程,我们将深入探讨Git的基本概念和…...
Java解决长度为K子的数组中的的最大和
Java解决长度为K子的数组中的的最大和 01 题目 给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和: 子数组的长度是 k,且子数组中的所有元素 各不相同 。 返回满足题面要求的最大子数组和。如果不存在子…...

【手机端测试】adb基础命令
一、什么是adb adb(Android Debug Bridge)是android sdk的一个工具 adb是用来连接安卓手机和PC端的桥梁,要有adb作为二者之间的维系,才能让用户在电脑上对手机进行全面的操作。 Android的初衷是用adb这样的一个工具来协助开发人…...

【数据结构】深入探讨二叉树的遍历和分治思想(一)
🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:数据结构 🔥该文章主要讲述二叉树的递归结构及分治算法的思想。 目录: 🌍前言:🌍…...
jQuery AJAX get() 和 post() 方法—— W3school 详解 简单易懂(二十四)
jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。 HTTP 请求:GET vs. POST 两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST。 GET - 从指定的资源请求数据POST - 向指定的资源提交要处理的数据 GET 基本…...
Linux中如何进行LVM逻辑卷扩容?
#注意:如果lv所在的vg有空间直接扩容就ok了! 1.创建pv pvcreate /dev/sdb 执行以上命令得到以下内容: Physical volume "/dev/sdb" successfully created. 2.直接vgextend扩容 vgextend vg1 /dev/sdb #卷组名字,将…...
现代企业架构框架——应用架构
现代企业架构框架——应用架构。 现代企业架构中的应用架构是指企业在构建和维护应用系统时所采用的一种架构框架。应用架构旨在实现应用系统的可扩展性、灵活性、可维护性和可重用性,以满足企业在数字化时代对应用系统的快速交付和持续创新的需求。下面将详细介绍应用架构的…...

期货开户保证金保障市场正常运转
期货保证金是什么?在期货市场上,采取保证金交易制度,投资者只需按期货合约的价值,交一定比率少量资金即可参与期货合约买卖交易,这种资金就是期货保证金。期货保证金(以下简称保证金〕按性质与作用的不同。…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...