diff --git a/backtest_gpu.py b/backtest_gpu.py index 4e76d7c..f7b0f19 100644 --- a/backtest_gpu.py +++ b/backtest_gpu.py @@ -42,14 +42,36 @@ if hasattr(sys.stdout, "reconfigure"): sys.stdout.reconfigure(encoding="utf-8") # ── GPU backend ─────────────────────────────────────────────────── +# Register NVIDIA pip-package DLL directories before importing CuPy. +# nvidia-cuda-nvrtc-cu12 / nvidia-curand-cu12 etc. drop their DLLs into +# site-packages/nvidia//bin/ — they are NOT on PATH by default. +def _register_nvidia_dlls() -> None: + import pathlib, site, warnings + for sp in site.getsitepackages(): + nvidia_base = pathlib.Path(sp) / "nvidia" + if not nvidia_base.is_dir(): + continue + for sub in nvidia_base.iterdir(): + bin_dir = sub / "bin" + if bin_dir.is_dir(): + try: + os.add_dll_directory(str(bin_dir)) + except (OSError, AttributeError): + pass # add_dll_directory is Windows-only; skip on Linux/Mac + +_register_nvidia_dlls() + try: - import cupy as cp # type: ignore + import warnings as _w + with _w.catch_warnings(): + _w.simplefilter("ignore") # suppress "CUDA path could not be detected" + import cupy as cp # type: ignore _GPU = True - _BACKEND = "CuPy (GPU)" -except ImportError: + _BACKEND = f"CuPy {cp.__version__} (RTX GPU)" +except Exception: cp = np # type: ignore[assignment] _GPU = False - _BACKEND = "NumPy (CPU — install cupy-cuda12x for GPU)" + _BACKEND = "NumPy (CPU — install cupy-cuda12x + nvidia-cuda-nvrtc-cu12 for GPU)" from config import PlatformConfig, Timeframe, USDJPY, PIP_VALUE from data_provider import ForexDataProvider