I think it is sometimes puzzling to transform between these following data type:

Tensor
Variable
cuda Variable

Some operations such as torch.index_select does not support Variable, while I think it is better to support them both.
Seems that the key difference between a Tensor and a Variable is whether to keep the gradient history, however some operations do not need that in most cases.