DistributedDataParallel should be more efficient than DataParallel and might thus increase the GPU utilization, but you would have to check it for your use case.
Multiple workers should do the same and it’s unexpected that loading the data in the main thread is faster than in the background.
I would recommend to profile the data loading separately and check the loading times using num_workers=0 and multiple workers to see why you are seeing a slowdown.