Lesson 28← back to roadmap
GPU support is optional, compile-time-selectable, and entirely behind a port. Nothing in the planner mentions CUDA.
The 13-method GpuPort (include/elips/gpu_engine/GpuPort.hpp)
cpp
class GpuPort {
public:
[[nodiscard]] virtual std::expected<void, GpuError>
initialize(const GpuConfig&) = 0;
virtual void shutdown() noexcept = 0;
[[nodiscard]] virtual GpuDeviceInfo device_info() const noexcept = 0;
[[nodiscard]] virtual bool is_available() const noexcept = 0;
[[nodiscard]] virtual std::expected<GpuBuffer, GpuError>
allocate_device(size_t bytes) = 0;
virtual void free_device(GpuBuffer&&) noexcept = 0;
[[nodiscard]] virtual std::expected<void, GpuError>
upload(const void*, GpuBuffer&, size_t) = 0;
[[nodiscard]] virtual std::expected<void, GpuError>
download(const GpuBuffer&, void*, size_t) = 0;
[[nodiscard]] virtual std::expected<void, GpuError>
compute_distances_batch(
std::span<const float> queries, std::span<const float> db,
std::span<float> out, size_t nq, size_t nb, size_t dim,
elips::Metric) = 0;
[[nodiscard]] virtual std::expected<void, GpuError>
top_k(std::span<const float> distances,
std::span<uint32_t> idx, std::span<float> val,
size_t nq, size_t nb, size_t k) = 0;
virtual void synchronize() = 0;
[[nodiscard]] virtual bool is_idle() const noexcept = 0;
};All operations return std::expected<T, GpuError>. The error enum: DeviceNotFound, InsufficientMemory, KernelLaunchFailed, TransferFailed, IndexBuildFailed, UnsupportedMetric, InitializationFailed, BackendUnavailable.