CUDA_cudaFree_释放Stream_cudaError_t 错误类型码解释

devtools/2024/9/19 0:46:36/ 标签: 人工智能, linux, 深度学习, CUDA

官方网站 :

CUDA Runtime API :: CUDA Toolkit Documentation

cudaFree() 说明

cudaFree()CUDA 中用于释放由 cudaMalloc()cudaMallocManaged() 分配的设备内存的函数。它的参数是一个指向设备内存的指针,用于指示要释放的内存块的起始地址。

用法说明如下:

cudaError_t cudaFree(void *devPtr);

参数 devPtr 是一个指向要释放的设备内存块的指针。这个指针必须是由 cudaMalloc()cudaMallocManaged() 或类似函数返回的指针,指向通过 CUDA 运行时 API 分配的内存。如果 devPtrnullptr,则 cudaFree() 会忽略并返回 cudaSuccess

通常情况下,cudaFree() 应该在不再需要设备内存时被调用,以释放之前通过 CUDA 运行时 API 分配的内存,以便重用或释放给系统。

请注意,调用 cudaFree() 并不会自动将指针 devPtr 设置为 nullptr。因此,在调用 cudaFree() 后,为了避免悬空指针问题,建议将指针显式设置为 nullptr,或者进行适当的指针管理。

另外,cudaFree() 返回一个 cudaError_t 类型的错误码,用于指示函数是否执行成功。

cudaError_t 类型的错误码

一些常见的 cudaError_t 值及其含义:

  1. cudaSuccess:函数调用成功完成。

  2. cudaErrorMemoryAllocation:内存分配失败。

  3. cudaErrorIllegalInstruction:设备执行了非法的指令。

  4. cudaErrorMisalignedAddress:指针未对齐。

  5. cudaErrorInvalidValue:传递给函数的某些参数无效。

  6. cudaErrorLaunchFailure:在设备上执行内核函数时发生错误。

  7. cudaErrorNoDevice:没有可用的 CUDA 设备。

  8. cudaErrorNotInitializedCUDA 运行时尚未初始化。

  9. cudaErrorInvalidDevice:提供的 CUDA 设备标识符无效。

  10. cudaErrorInvalidConfiguration:内核启动配置无效。

  11. cudaErrorInvalidPitchValue:传递给 cudaMallocPitch() 的 pitch 值无效。

  12. cudaErrorInvalidMemcpyDirectioncudaMemcpy() 方向参数无效。

  13. cudaErrorInvalidSymbol:传递给内核函数的符号无效。

  14. cudaErrorMapBufferObjectFailed:映射缓冲对象到设备地址空间失败。

  15. cudaErrorCudartUnloadingCUDA 运行时库正在卸载。

  16. cudaErrorProfilerDisabledCUDA 分析器不可用。

cudaErrorCudartUnloading:CUDA 运行时库正在卸载 什么意思?什么情况下会发生? 

cudaErrorCudartUnloading 表示 CUDA 运行时库正在卸载。这个错误码表明当前正在尝试使用 CUDA 运行时 API 的某个函数,但是 CUDA 运行时库正在被卸载的过程中,因此无法正常执行该函数。

这种情况可能发生在以下情况下:

  1. 应用程序结束时:当应用程序退出时,操作系统会清理所有分配的资源,包括 CUDA 运行时库。在清理过程中,如果有 CUDA 函数被调用,就会出现 cudaErrorCudartUnloading 错误。

  2. 显式卸载 CUDA 运行时库:在某些情况下,程序员可能会显式地卸载 CUDA 运行时库。这可能是因为程序的特定需求,或者是为了进行调试或测试。在这种情况下,任何尝试使用 CUDA 运行时 API 的函数都可能导致 cudaErrorCudartUnloading 错误。

当出现 cudaErrorCudartUnloading 错误时,建议检查程序的生命周期和资源管理,确保在尝试使用 CUDA 运行时 API 函数之前,CUDA 运行时库仍然是可用的。此外,确保在应用程序退出之前正确地清理并释放所有的 CUDA 资源。

CUDA 运行时库 是什么?包含哪些东西?

CUDA(Compute Unified Device Architecture)运行时库是 NVIDIA 提供的用于支持 GPU 计算的软件库。它包含了一系列函数和工具,用于在 CUDA 设备(如 NVIDIA GPU)上执行并行计算任务。CUDA 运行时库提供了一种在 CPU 和 GPU 之间交互的框架,使得开发人员能够利用 GPU 的并行计算能力来加速应用程序的运行。

CUDA 运行时库包含了以下主要组件和功能:

  1. CUDA Runtime APICUDA Runtime API 是一组用于在应用程序中调用的函数,用于管理设备、内存、执行内核函数等。开发人员可以使用 CUDA Runtime API 来编写使用 GPU 加速的并行计算任务。

  2. GPU 设备管理CUDA 运行时库提供了一系列函数,用于在应用程序中管理 GPU 设备。这些函数包括了设备查询、设备属性获取、设备选择等,使得开发人员能够有效地利用系统中的 GPU 资源。

  3. 内存管理CUDA 运行时库提供了一套内存管理函数,用于在主机(CPU)和设备(GPU)之间进行数据传输,并在 GPU 上分配和释放内存。这些函数包括了内存分配、内存复制、内存释放等。

  4. 执行模型CUDA 运行时库定义了一种执行模型,用于描述如何在 GPU 上执行并行计算任务。这个模型包括了线程、线程块、网格等概念,并提供了相应的函数和指令,用于在 GPU 上启动和执行内核函数。

  5. 工具和实用程序CUDA 运行时库还包含了一些用于开发和调试的实用工具和实用程序,如性能分析工具、调试器等。

总的来说,CUDA 运行时库是一套完整的软件库,用于支持在 NVIDIA GPU 上进行并行计算的开发和执行。它为开发人员提供了丰富的函数和工具,使得利用 GPU 加速的并行计算变得更加容易和高效。

调用什么函数 卸载 CUDA 运行时库?

在常规的应用程序中,通常不需要显式地卸载 CUDA 运行时库。CUDA 运行时库的加载和卸载由操作系统和应用程序的生命周期管理自动处理。当应用程序结束时,操作系统会负责释放应用程序使用的所有资源,包括 CUDA 运行时库。

然而,如果你确实需要在应用程序中显式地卸载 CUDA 运行时库,这通常意味着你需要在程序中调用操作系统相关的函数来结束进程或卸载动态链接库(CUDA 运行时库)。

在类 Unix/Linux 系统中,可以使用 dlclose() 函数来卸载动态链接库。但是,请注意,卸载 CUDA 运行时库可能会导致程序崩溃或不可预测的行为,因为程序可能依赖于 CUDA 运行时库提供的函数和资源。

在 Windows 系统中,可以使用 FreeLibrary() 函数来卸载动态链接库。同样地,这可能会导致程序崩溃或不可预测的行为。

总的来说,除非你有特定的需求,否则不建议在应用程序中显式地卸载 CUDA 运行时库。正常情况下,操作系统会在程序退出时自动清理资源,包括 CUDA 运行时库。

cudaError_t 类型的错误码 官方内容翻译

CUDA Runtime API :: CUDA Toolkit Documentation

枚举 
cudaError
CUDA 错误类型


cudaSuccess = 0
API 调用返回时没有错误。对于查询调用,在操作完成时也表示操作已完成(参见 cudaEventQuery() 和 cudaStreamQuery())。

cudaErrorInvalidValue = 1
这表示传递给 API 调用的一个或多个参数不在可接受的值范围内。

cudaErrorMemoryAllocation = 2
API 调用失败,因为它无法分配足够的内存或其他资源来执行请求的操作。

cudaErrorInitializationError = 3
API 调用失败,因为 CUDA 驱动程序和运行时无法初始化。

cudaErrorCudartUnloading = 4
这表示 CUDA 运行时 API 调用无法执行,因为它是在进程关闭期间调用的,在 CUDA 驱动程序卸载之后的某个时刻。

cudaErrorProfilerDisabled = 5
这表示分析器未为此运行初始化。这可能发生在应用程序使用外部分析工具(如可视化分析器)运行时。

cudaErrorProfilerNotInitialized = 6
已弃用
此错误返回已在 CUDA 5.0 中弃用。尝试在未初始化的情况下通过 cudaProfilerStart 或 cudaProfilerStop 启用/禁用分析器不再是错误。


cudaErrorProfilerAlreadyStarted = 7
已弃用
此错误返回已在 CUDA 5.0 中弃用。当已经启用分析器时调用 cudaProfilerStart() 不再是错误。


cudaErrorProfilerAlreadyStopped = 8
已弃用
此错误返回已在 CUDA 5.0 中弃用。当已经禁用分析器时调用 cudaProfilerStop() 不再是错误。


cudaErrorInvalidConfiguration = 9
这表示一个内核启动正在请求当前设备无法满足的资源。请求每个块的共享内存超过设备支持的将触发此错误,请求太多的线程或块也将触发此错误。请参阅 cudaDeviceProp 了解更多设备限制。

cudaErrorInvalidPitchValue = 12
这表示传递给 API 调用的一个或多个与间距相关的参数不在间距的可接受范围内。

cudaErrorInvalidSymbol = 13
这表示传递给 API 调用的符号名称/标识符不是有效的名称或标识符。

cudaErrorInvalidHostPointer = 16
已弃用
此错误返回已在 CUDA 10.1 中弃用。

这表示传递给 API 调用的至少一个主机指针不是有效的主机指针。


cudaErrorInvalidDevicePointer = 17
已弃用
此错误返回已在 CUDA 10.1 中弃用。

这表示传递给 API 调用的至少一个设备指针不是有效的设备指针。


cudaErrorInvalidTexture = 18
这表示传递给 API 调用的纹理不是有效的纹理。

cudaErrorInvalidTextureBinding = 19
这表示纹理绑定无效。如果您调用 cudaGetTextureAlignmentOffset() 时使用未绑定的纹理,就会发生这种情况。

cudaErrorInvalidChannelDescriptor = 20
这表示传递给 API 调用的通道描述符无效。如果格式不是 cudaChannelFormatKind 指定的格式之一,或者其中一个维度无效,则会发生这种情况。

cudaErrorInvalidMemcpyDirection = 21
这表示传递给 API 调用的 memcpy 方向不是 cudaMemcpyKind 指定的类型之一。

cudaErrorAddressOfConstant = 22
已弃用
此错误返回已在 CUDA 3.1 中弃用。常量内存中的变量现在可以通过运行时通过 cudaGetSymbolAddress() 获取其地址。

这表示用户已获取常量变量的地址,直到 CUDA 3.1 发布之前是被禁止的。


cudaErrorTextureFetchFailed = 23
已弃用
此错误返回已在 CUDA 3.1 中弃用。设备仿真模式已在 CUDA 3.1 中删除。

这表示无法执行纹理获取。以前用于设备仿真纹理操作。


cudaErrorTextureNotBound = 24
已弃用
此错误返回已在 CUDA 3.1 中弃用。设备仿真模式已在 CUDA 3.1 中删除。

这表示尝试访问未绑定的纹理。以前用于设备仿真纹理操作。


cudaErrorSynchronizationError = 25
已弃用
此错误返回已在 CUDA 3.1 中弃用。设备仿真模式已在 CUDA 3.1 中删除。

这表示同步操作失败。以前用于某些

设备仿真函数。


cudaErrorInvalidFilterSetting = 26
这表示正在使用线性滤波访问非浮点纹理。CUDA 不支持这种操作。

cudaErrorInvalidNormSetting = 27
这表示尝试将非浮点纹理读取为归一化浮点值。CUDA 不支持这种操作。

cudaErrorMixedDeviceExecution = 28
已弃用
此错误返回已在 CUDA 3.1 中弃用。设备仿真模式已在 CUDA 3.1 中删除。

不允许混合设备和设备仿真代码。


cudaErrorNotYetImplemented = 31
已弃用
此错误返回已在 CUDA 4.1 中弃用。

这表示 API 调用尚未实现。CUDA 的正式发布永远不会返回此错误。


cudaErrorMemoryValueTooLarge = 32
已弃用
此错误返回已在 CUDA 3.1 中弃用。设备仿真模式已在 CUDA 3.1 中删除。

这表示模拟设备指针超出了 32 位地址范围。


cudaErrorStubLibrary = 34
这表示应用程序加载的 CUDA 驱动程序是存根库。在使用存根而不是真实驱动程序加载的应用程序中,CUDA API 将返回此错误。

cudaErrorInsufficientDriver = 35
这表示安装的 NVIDIA CUDA 驱动程序早于 CUDA 运行时库。这不是受支持的配置。用户应安装更新的 NVIDIA 显示驱动程序以使应用程序能够运行。

cudaErrorCallRequiresNewerDriver = 36
这表示 API 调用需要比当前安装的 CUDA 驱动程序更新的 CUDA 驱动程序。用户应安装更新的 NVIDIA CUDA 驱动程序以使 API 调用成功。

cudaErrorInvalidSurface = 37
这表示传递给 API 调用的表面不是有效的表面。

cudaErrorDuplicateVariableName = 43
这表示多个全局或常量变量(在应用程序的不同 CUDA 源文件中)共享相同的字符串名称。

cudaErrorDuplicateTextureName = 44
这表示多个纹理(在应用程序的不同 CUDA 源文件中)共享相同的字符串名称。

cudaErrorDuplicateSurfaceName = 45
这表示多个表面(在应用程序的不同 CUDA 源文件中)共享相同的字符串名称。

cudaErrorDevicesUnavailable = 46
这表示所有 CUDA 设备当前都忙碌或不可用。设备通常因使用 cudaComputeModeProhibited、cudaComputeModeExclusiveProcess 或长时间运行的 CUDA 内核已填满 GPU 并阻止新工作开始而忙碌/不可用。它们也可能因已在执行活动 CUDA 工作的设备上的内存约束而不可用。

cudaErrorIncompatibleDriverContext = 49
这表示当前上下文与 CUDA 运行时不兼容。只有在使用 CUDA 运行时/驱动程序互操作性并使用驱动程序 API 创建了现有驱动程序上下文时,才会出现此错误。驱动程序上下文可能不兼容,因为驱动程序上下文是使用较旧版本的 API 创建的,因为运行时 API 调用期望主驱动程序上下文并且驱动程序上下文不是主要的,或者因为驱动程序上下文已被销毁。有关更多信息,请参阅与 CUDA 驱动程序 API 的交互"。

cudaErrorMissingConfiguration = 52
正在调用的设备函数(通常通过 cudaLaunchKernel())之前未通过 cudaConfigureCall() 函数进行配置。

cudaErrorPriorLaunchFailure = 53
已弃用
此错误返回已在 CUDA 3.1 中弃用。设备仿真模式已在 CUDA 3.1 中删除。

这表示先前的内核启动失败。以前用于设备仿真内核启动。


cudaErrorLaunchMaxDepthExceeded = 65
此错误表示设备运行时网格启动未发生,因

为子网格的深度将超过支持的最大嵌套网格启动数。

cudaErrorLaunchFileScopedTex = 66
此错误表示未发生网格启动,因为内核使用不受设备运行时支持的文件范围纹理。通过设备运行时启动的内核仅支持使用 Texture Object API 创建的纹理。

cudaErrorLaunchFileScopedSurf = 67
此错误表示未发生网格启动,因为内核使用不受设备运行时支持的文件范围表面。通过设备运行时启动的内核仅支持使用 Surface Object API 创建的表面。

cudaErrorSyncDepthExceeded = 68
此错误表示从设备运行时发起的 cudaDeviceSynchronize 调用失败,因为调用是在比默认值(2 级网格)或用户指定的设备限制 cudaLimitDevRuntimeSyncDepth 更大的网格深度下进行的。为了能够成功地在启动使用设备运行时的内核之前,在使用设备运行时启动内核的主机端启动 cudaDeviceSynchronize 的最大嵌套深度必须在 cudaDeviceSetLimit api 中通过 cudaLimitDevRuntimeSyncDepth 限制指定。请注意,额外的同步深度级别需要运行时保留大量的设备内存,该内存不能用于用户分配。请注意,设备运行时从设备运行时进行的 cudaDeviceSynchronize 仅受支持小于 9.0 的计算能力设备。

cudaErrorLaunchPendingCountExceeded = 69
此错误表示设备运行时网格启动失败,因为启动将超出限制 cudaLimitDevRuntimePendingLaunchCount。要使此启动成功进行,必须调用 cudaDeviceSetLimit 设置 cudaLimitDevRuntimePendingLaunchCount 以使其高于可以发出到设备运行时的未完成启动的上限。请注意,提高待处理设备运行时启动的限制将要求运行时保留设备内存,该内存不能用于用户分配。

cudaErrorInvalidDeviceFunction = 98
请求的设备函数不存在或未针对正确的设备体系结构编译。

cudaErrorNoDevice = 100
这表示未检测到任何支持 CUDA 的设备。

cudaErrorInvalidDevice = 101
这表示用户提供的设备序数与有效的 CUDA 设备不对应,或请求的操作对指定的设备无效。

cudaErrorDeviceNotLicensed = 102
这表示设备没有有效的网格许可证。

cudaErrorSoftwareValidityNotEstablished = 103
默认情况下,CUDA 运行时可以执行一组最小的自我测试,以及 CUDA 驱动程序测试,以建立两者的有效性。在 CUDA 11.2 中引入,此错误返回指示其中一个测试失败,无法建立运行时或驱动程序的有效性。

cudaErrorStartupFailure = 127
这表示 CUDA 运行时中的内部启动失败。

cudaErrorInvalidKernelImage = 200
这表示设备内核图像无效。

cudaErrorDeviceUninitialized = 201
这通常表示当前线程没有绑定上下文。如果传递给 API 调用的上下文无效(例如,对其调用了 cuCtxDestroy() 的上下文),则还可以返回此错误。如果用户混合使用不同的 API 版本(例如,3010 上下文与 3020 API 调用),也可能返回此错误。有关更多详细信息,请参阅 cuCtxGetApiVersion()。

cudaErrorMapBufferObjectFailed = 205
这表示无法映射缓冲区对象。

cudaErrorUnmapBufferObjectFailed = 206
这表示无法取消映射缓冲区对象。

cudaErrorArrayIsMapped = 207
这表示指定的数组当前已映射,因此无法销毁。

cudaErrorAlreadyMapped = 208
这表示资源已经映射。

cudaErrorNoKernelImageForDevice = 209
这表示没有可用于设备的内核图像。当用户为特定 CUDA 源文件指定代码生成选项时,这可能会发生,这些选项不包括相应的设备配置。

cudaErrorAlreadyAcquired = 210
这表示资源已经被获取。

cudaErrorNotMapped = 211
这表示资源未映射。

cudaErrorNotMappedAsArray = 212
这表示映射的资源不可用于作为数组访问。

cudaErrorNotMappedAsPointer = 213
这表示映射的资源不可用于作为指针访问。

cudaErrorECCUncorrectable = 214
这表示在执行过程中检测到无法纠正的 ECC 错误。

cudaErrorUnsupportedLimit = 215
这表示传递给 API 调用的 cudaLimit 不受当前设备支持。

cudaErrorDeviceAlreadyInUse = 216
这表示尝试访问已被其他线程使用的独占线程设备。

cudaErrorPeerAccessUnsupported = 217
此错误表示不支持给定设备之间的 P2P 访问。

cudaErrorInvalidPtx = 218
PTX 编译失败。如果应用程序不包含当前设备的合适二进制文件,则运行时可能会回退到编译 PTX。

cudaErrorInvalidGraphicsContext = 219
这表示 OpenGL 或 DirectX 上下文存在错误。

cudaErrorNvlinkUncorrectable = 220
这表示在执行过程中检测到无法纠正的 NVLink 错误。

cudaErrorJitCompilerNotFound = 221
这表示找不到 PTX JIT 编译器库。JIT 编译器库用于 PTX 编译。如果应用程序不包含当前设备的合适二进制文件,则运行时可能会回退到编译 PTX。

cudaErrorUnsupportedPtxVersion = 222
这表示提供的 PTX 是使用不受支持的工具链编译的。这种情况最常见的原因是 PTX 是由比 CUDA 驱动程序和 PTX JIT 编译器支

持的工具链生成的。

cudaErrorInvalidSource = 300
此错误表示提供的参数无效。

cudaErrorFileNotFound = 301
此错误表示指定的文件无法找到。

cudaErrorSharedObjectSymbolNotFound = 302
此错误表示无法找到指定的共享对象符号。

cudaErrorSharedObjectInitFailed = 303
此错误表示无法初始化指定的共享对象。

cudaErrorOperatingSystem = 304
此错误表示操作系统提供的错误。

cudaErrorInvalidHandle = 400
此错误表示提供的句柄无效。

cudaErrorNotFound = 500
此错误表示请求的资源不存在。


cudaErrorNotReady = 600
此错误表示请求的资源未就绪,通常在对异步操作进行轮询时返回。

cudaErrorIllegalAddress = 700
此错误表示尝试访问没有授权访问的内存地址。通常是因为错误地访问了设备内存,比如空指针引用。

cudaErrorLaunchOutOfResources = 701
此错误表示尝试启动内核时设备上已经没有足够的资源了,比如太多的线程块或太多的线程。

cudaErrorLaunchTimeout = 702
此错误表示内核执行超时。这可能是由于内核执行时间太长或内核卡住了而引起的。

cudaErrorLaunchIncompatibleTexturing = 703
此错误表示内核启动失败,因为使用了不兼容的纹理。

cudaErrorPeerAccessAlreadyEnabled = 704
此错误表示对等访问已经启用。

cudaErrorPeerAccessNotEnabled = 705
此错误表示对等访问没有启用。

cudaErrorSetOnActiveProcess = 708
此错误表示无法在 CUDA 驱动程序中更改某些属性,因为当前进程有一个活动的 CUDA 上下文。

cudaErrorContextIsDestroyed = 709
此错误表示上下文已被销毁,通常在上下文销毁后访问 CUDA 对象时返回。

cudaErrorAssert = 710
此错误表示在设备执行期间发生了断言错误。

cudaErrorTooManyPeers = 711
此错误表示在设备上尝试创建太多的对等连接。

cudaErrorHostMemoryAlreadyRegistered = 712
此错误表示尝试重复注册已注册的主机内存地址。

cudaErrorHostMemoryNotRegistered = 713
此错误表示尝试注销未注册的主机内存地址。

cudaErrorHardwareStackError = 714
此错误表示硬件堆栈遇到错误。

cudaErrorIllegalInstruction = 715
此错误表示设备执行了非法指令。

cudaErrorMisalignedAddress = 716
此错误表示尝试访问未对齐的内存地址。

cudaErrorInvalidAddressSpace = 717
此错误表示尝试访问无效地址空间。

cudaErrorInvalidPc = 718
此错误表示尝试读取或写入无效的程序计数器(PC)值。

cudaErrorIllegalAddressSpace = 719
此错误表示尝试在不允许的地址空间中执行操作。

cudaErrorInvalidPtxPointer = 720
此错误表示提供的 PTX 指针无效。

cudaErrorInvalidGraphicsContext = 721
此错误表示上下文与绑定它的图形 API 上下文不兼容。

cudaErrorStartupFailure = 0x7f
此错误表示 CUDA 运行时中的内部启动失败。

cudaErrorApiFailureBase = 10000
这是一个基本错误代码,表示错误在 API 调用中。


http://www.ppmy.cn/devtools/13347.html

相关文章

Linux时间同步练习

题目如下: 一.配置server主机要求如下: 1.server主机的主机名称为 ntp_server.example.com 2.server主机的IP为: 172.25.254.100 3.server主机的时间为1984-11-11 11:11:11 4.配置server主机的时间同步服务要求可以被所…

C++设计模式:适配器模式(十四)

1、定义与动机 定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。 动机: 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境…

2024 年中国VR行业研究报告

核心内容: 概述了当前 VR 行业的发展阶段、市场规模、产业环节及趋势,并对核心硬件、软件技术、内容应用等方面进行了详细介绍和分析。 概述: 1、行业发展阶段:新旧玩家推陈出新,特别是 Vision Pro 产品的问世&…

Linux(引导过程与服务控制)

目录 1.linux操作系统引导过程 1.1引导过程总览 ​编辑1.2 linux操作系统的引导过程 1.3 系统初始化进程 1.4 Systemd单元类型 1.5 运行级别所对应的systemd目标 2.排除启动类故障 2.1 修复MBR扇区故障 2.2 实例:修复MBR扇区故障 2.3 实例:…

Python的一些中级用法

Python的中级用法涵盖了更复杂的编程技巧和概念,包括函数式编程、面向对象编程、模块化设计、文件操作、异常处理等。下面是Python的一些中级用法: 1.列表推导式 使用简洁的语法创建列表。 # 生成一个包含1到10的平方的列表 squares [x**2 for x in …

0-1背包问题:贪心算法与动态规划的比较

0-1背包问题:贪心算法与动态规划的比较 1. 问题描述2. 贪心算法2.1 贪心策略2.2 伪代码 3. 动态规划3.1 动态规划策略3.2 伪代码 4. C语言实现5. 算法分析6. 结论7. 参考文献 1. 问题描述 0-1背包问题是组合优化中的一个经典问题。假设有一个小偷在抢劫时发现了n个…

正则表达式学习笔记

正则表达式 正则匹配函数简单的模式:字符匹配2.1 元字符2.2 概括字符集2.3 数量词2.4 边界匹配 ^和$2.5 组 ( )2.6 匹配模式参数2.7 re.sub替换字符串2.8 把函数做为参数传递2.9 group分组 正则表达式的一些建议 正则匹配函数 1.1 re.compile re.compile是将正则表…

37. UE5 RPG创建自定义的Ability Task

在前面的文章中,我们实现了一个火球术的一些基本功能,火球术技能的释放,在技能释放后,播放释放动画,在动画播放到需要释放火球术的位置时,将触发动画通知,在动画通知中触发标签事件,…

初级银行从业资格证知识点(二)

系统内联行清算包括: 全国联行往来、分行辖内往来、支行辖内往来 普通支票既可以支取现金也可以转账;划线支票只能转账不能取现。 进出口业务中采用的结算方式: 汇款、托收、信用证 银行常见的清算模式: 全额清算、净额批量清算、…

私域运营的基础是什么?

私域运营是指在自有平台上进行的一系列运营活动,旨在建立和维护与用户的深度互动关系,提升用户忠诚度和品牌影响力。相比于传统的广告投放和推广方式,私域运营更加注重与用户的沟通和互动,通过提供有价值的内容和个性化的服务&…

selenium_定位输入框并输入值_CLASS_NAME

找到class_name # 导包 from selenium import webdriver from time import sleep# 获取浏览器对象 from selenium.webdriver.common.by import Bydriver webdriver.Edge() # 打开url url r"C:\Users\黄永生\Desktop\软件测试\tpshop\web自动化_day01_课件笔记资料代码\0…

每日一练 | 华为认证真题练习Day220

1.IGMP 版本之间的差异是:(多选) A.1GMPv 1/v 2 不能自己选举查询器,而 IGMP v 3 可以 B.对于成员离开,IGMP v 2/v 3 能够主动离开,而 IGMP v 1 不能. C.IGMP v 1/v 2/v 3 都不能支持 SSM 模型 D.IGMP v 1 不支持特定组查询,而 IGMP v 2 支持. 2.在RSTP协议中定…

NIO之非阻塞模式

NIO支持非阻塞模式,以网络连接和网络数据传输为例。如果使用阻塞模式,ServerSocketChannel在调用accept等待客户端建立连接是阻塞的,没有连接就一直阻塞。从Channel中读取客户端传送的数据也是阻塞的,没有数据就一直阻塞。当我们开…

GVRP协议与动态、静态vlan

一、GVRP协议使用场景 1、当实际组网复杂到网络管理员无法短时间内了解网络的拓扑结构,或者是整个网络的VLAN太多时,工作量会非常大,而且非常容易配置错误。在这种情况下,用户可以通过GVRP的VLAN自动注册功能完成VLAN的配置。 2、…

CentOS常见命令

以下是一些常见的CentOS命令: 管理文件和目录: ls:列出目录中的文件和子目录。cd:切换目录。mkdir:创建一个新的目录。rm:删除文件或目录。cp:复制文件或目录。mv:移动或重命名文件…

python Django中分配库存给用户包括定义库存模型、用户模型、以及一个用于分配库存的逻辑

在Django中分配库存给用户通常涉及几个步骤,包括定义库存模型、用户模型、以及一个用于分配库存的逻辑。以下是一个基本的示例来说明如何执行这个过程: 1. 定义模型 首先,你需要定义两个模型:一个是User模型(可以使用…

MySQL 自建数据库慢日志分析

文章目录 前言1. 参数介绍1.1 慢日志参数1.2 慢日志切割 2. pt-query-digest2.1 离线分析2.2 在线分析2.3 常用参数 总结 前言 慢 SQL 是指 MySQL 中执行时间超过指定阈值的语句将被记录到 Slow log 文件中的查询。慢 SQL 的风险是可能随时都会因为某种原因而被触发&#xff0…

【nmap】基于python实现nmap端口扫描

nmap下载:nmap 将所在路径放入环境变量: D:\Program Files\Nmap\zenmap\bin 安装模块 pip install python-nmap python代码实现: import nmapdef scan(host, min_port, max_port):port_range str(min_port) - str(max_port)nm nmap.Po…

SQL Server Profiler:捕获和分析数据库事件的利器

前言 SQL Server Profiler是一个强大的工具,用于捕获SQL Server实例上发生的各种事件,并提供详细的跟踪信息。本文将介绍SQL Server Profiler的具体用法,帮助您更好地理解这个诊断工具,并利用它来诊断和调试数据库性能问题&#x…

【后端】PyCharm的安装指引与基础配置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、PyCharm是什么二、PyCharm安装指引安装PyCharm社区版安装PyCharm专业版 三、配置PyCharm:四、总结 前言 随着开发语言及人工智能工具的普及&am…