6.3. 使用CUDA加速求解

6.3.1. CUDA调用方式

MindOpt 已支持使用原始-对偶方法(Primal-dual Method, PDM)求解线性规划问题。可以使用参数Method=3启动该方法。目前,方法拥有CPU和GPU两种执行方式, MindOpt 会通过参数PDM/ComputePreference来决定。CPU版本可以在所有平台使用,GPU版本支持在windows x86和linux x86平台上使用,如果需要执行GPU版本,需要有CUDA相关环境和可用的GPU设备。

6.3.2. GPU/CUDA环境要求

MindOpt 使用GPU运行原始-对偶方法需要CUDA Toolkit version >= 12.0。可以直接从CUDA官方网站(https://developer.nvidia.com/cuda-downloads)选择合适版本进行安装,同时也会安装相应的显卡驱动。安装完成后,可以执行命令nvidia-smi以验证安装结果。

MindOpt 原始-对偶方法依赖于以下CUDA库文件:

  • CUDA Driver API: libcuda.so (Linux) or nvcuda.dll (Windows).

  • CUDA Toolkit: cudart, cublas, and cusparse.

需要在运行前进行环境变量的配置:

  • Windows: 安装CUDA时自动配置环境变量。

  • Linux: 手动设置 LD_LIBRARY_PATH 来引入CUDA依赖 (如CUDA路径: /usr/local/cuda/lib64).

若在求解时出现“GPU/CUDA is not available.”提示,或在强制采用GPU执行时出现“CUDA error occured while running PDM.”错误,建议检查CUDA库的安装和环境变量的配置情况。 同时,该方法运行依赖于GPU设备。可以使用命令nvidia-smi检查GPU设备的可用情况。在多GPU设备上,使用PDM/Device可以指定运行的Device ID。Mindopt PDM 支持 Maxwell(GeForce 700系列)及其之后的架构。

6.3.3. CUDA错误码

如果 MindOpt 在原始-对偶方法在执行过程中出现CUDA错误,会在错误码中给出相关的错误信息。CUDA相关错误码为-45000~-47999。代码结构如下:

  • -45xxx: CUDA Driver/Runtime API 错误.

  • -46xxx: cuBLAS API 错误.

  • -47xxx: cuSPARSE API 错误.

当后三位数出现非零值时,其代表具体的CUDA错误代码,可以在CUDA官方文档中查询具体含义。例如:

  • 错误码-45002,代表出现error code为2的CUDA错误,查询后为“cudaErrorMemoryAllocation”,即CUDA API无法分配足够的显存。

  • 错误码-45200,代表出现error code为200的CUDA错误,查询后为“cudaErrorInvalidKernelImage”,建议检查CUDA版本是否满足要求。