I’m not sure how you are using different threads, so you might need to explain this use case a bit more.
However, if your GPU has to wait for the next batch of samples, you would have to speed up the data creation process.
If you are running two separate processes and this speeds up your training (or yields a higher GPU utilization, this could point towards a not fully utilized CPU, which would be used for the data creation.