Well, being new is not an excuse! 

Yes, I am missing args, because torch.multiprocessing will invoke your function X_power_func(rank), the default argument is the rank of the started process.
If you want to print results outside of main, you main print it in the invoked function:def X_power_func(j):
     X_power = X.cuda()**j
     print(X_power)
     return X_power


No, in order to properly return results, you should either use torch.multiprocessing.pool or passing a pipe object or anything that can be used to perform inter-process communication.
Torch multiprocessing module is a very thin wrapper of the original multiprocessing module, it basically just registers some customized serializers.