OK, what you said has lot of sense.
I thought there is a way and that PyTorch has some routines  doing basically this:
// Declare data storage
std::vector<float> my_data;
float *d_my_data;
 
// Read input file
std::ifstream fin("my_data_file.txt");
while (!fin.eof()) {
	float data;
	fin >> data;
	if (!fin.eof()) {
		my_data.push_back(data);
	}
}
fin.close();
 
// Allocate memory on the GPU and copy data
cudaMalloc((void **)&d_my_data, my_data.size()*sizeof(float));
cudaMemcpy(d_my_data, my_data.data(), my_data.size()*sizeof(float),
		   cudaMemcpyHostToDevice);
 
// Do something with the data
my_CUDA_kernel<<<num_blocks,num_threads>>>(d_my_data);
 
// Copy data back to the host
cudaMemcpy(my_data.data(), d_my_data, my_data.size()*sizeof(float),
		   cudaMemcpyDeviceToHost);
 
// Free the GPU memory when your done
cudaFree(d_my_data);

This code I just saw, but the idea to ask the question was a blitz.
I don’t know if this is comparable with super duper DataLoader, but I guess this would not be the path you would recommend, right?