My development setup

My development machine uses an NVIDIA GeForce RTX 5070 Ti with 16 GB of dedicated VRAM, an AMD Ryzen 9 5900X, 64 GB of system RAM, and an ASUS TUF Gaming X570-Pro WiFi motherboard. In the captured Task Manager reading, the GPU is using 4.2 GB of dedicated memory at 3% utilization and 40°C. DirectX reports Feature Level 12.2 and the driver version is 32.0.16.1742.

  • Dedicated GPU memory: 16 GB
  • Shared GPU memory: 47.9 GB
  • Total available GPU memory: 63.9 GB
  • Shared memory is system RAM available to the GPU, not additional dedicated VRAM.

What DolphinExplorer processes

DolphinExplorer is the application I use to work with sidescan sonar (SSS), multibeam echosounder (MBES) bathymetry, sub-bottom profiler (SBP), and marine magnetometer data. The files are large, the samples are dense, and the useful view is often interactive. That combination makes file size, memory usage, rendering speed, and input latency practical engineering constraints rather than abstract benchmarks.

C++ and Qt architecture

I use C++ and Qt to keep the desktop application responsive while data is loaded, decoded, transformed, and displayed. The interface, data models, processing stages, and rendering layers need clear boundaries so a change in one part does not make the rest of the application harder to profile or reason about.

OpenGL and GPU acceleration

The main GPU work is interactive visualization, including sidescan sonar waterfall displays and repeated image transforms. I move work to the GPU when the workload is parallel enough to benefit and when CPU-to-GPU transfer and synchronization do not cost more than the computation saves.

  • Render sonar and geospatial data interactively with OpenGL.
  • Keep large buffers in GPU-friendly representations where possible.
  • Compare GPU and optimized CPU paths on the same dataset before keeping the added complexity.

Memory management and XTF processing

The application reads XTF files, handles sonar samples, and prepares data for visualization. My focus is reducing unnecessary copies and avoiding full-file work on the interaction path. Reusing buffers, staging predictable chunks, and processing only what the current view needs are more useful than simply adding more parallel work.

How I measure improvements

I record the bottleneck, the change I tested, the measurement used, and the limits of the result. Frame time, memory growth, upload cost, processing throughput, and input-to-pixel latency tell me whether an optimization improves the actual workflow on this machine.

Machine learning experiments

I am also investigating where GPU inference could support automated interpretation of survey data. The important questions are how inference fits into the existing pipeline, how results are shown to a survey user, and how to preserve enough evidence that an automated suggestion can be reviewed.

What is documented

I separate completed implementations from experimental and planned features. Each note aims to record the problem, relevant code, design decisions, measurements, limitations, and lessons learned so the result is useful to developers working with scientific visualization, geospatial software, and computationally demanding applications.