a `e @srddlZddlZddlZddlZddlmZddlmZddZeddddZ eddd d d Z d d Z dS)N)log) lru_cachecCsttjdS)NZ ODM_NO_GPU)boolosenvirongetrr/code/opendm/gpu.pygpu_disabled_by_user_envsr )maxsizec Csz@td\}}|dks&|dkr>|dkr>td||fWdSWn8tyx}z tdt|WYd}~dSd}~00z*ddlm}|t|dt|dWSt t fyYdSty}zt t|WYd}~dSd}~00dS) NrzQCUDA compute platform is not supported (detected: %s.%s but we need at least 3.5)Fz$Using CPU for feature extraction: %s) pypopsiftgRQ?) get_cuda_compute_versionrODM_INFO ExceptionstropensfmrZ fits_textureintModuleNotFoundError ImportError ODM_WARNING)widthheight compute_major compute_minorerrrr "has_popsift_and_can_handle_texsize s    rcCs.d}tjdkr6tjtjddd}tj|s6d}tj |}tj f|j _ tj|j _| ddkrntdttjf|j_ tj|j_t}|t|dkrtd|jdkrtd ttjttjtjf|j_ tj|j_t}t}|t|t||dkr"td |j|jfS) Nz libcuda.sowin32 SYSTEMROOTsystem32 nvcuda.dllrzCannot initialize CUDAzCannot get device countz No deviceszCannot get CUDA compute version)sysplatformrpathjoinrrisfilectypescdll LoadLibraryc_uint32ZcuInitargtypesc_int32ZrestypesrPOINTERZcuDeviceGetCountbyrefvalueZcuDeviceComputeCapability) device_idZcuda_libZnvcudaZ device_countrrrrr r"s0          rcCstrtddS|jr(tddStjdkrttjtj ddd}tj |rdtdd Std dSn t d durtd d SdSdS) Nz*Disabling GPU features (ODM_NO_GPU is set)Fz(Disabling GPU features (--no-gpu is set)rrr r!zCUDA drivers detectedTz#No CUDA drivers detected, using CPUz nvidia-smiznvidia-smi detected)r rrno_gpur"r#rr$r%rrr&shutilwhich)argsZ nvcuda_pathrrr has_gpuFs"       r5)r) rr"r2r'opendmr repoze.lrurr rrr5rrrr s    #