What are the approaches to private computations? I'm talking about the ability to safely run a virtual machine on a physical device that is not trusted. It is necessary that the owner can not access the data that the virtual machine operates on. I am interested in what theoretical or practical implementations exist without special hardware.

I know about homomorphic computations (this in theory fully satisfies my question), but for now it's incredibly slow. It will take many years before the protocols of homomorphic calculations just approach application in practice.

I also read about Intel SGX, which implements enclaves. The RAM stores only encrypted data, which is decrypted at the input to the processor and is again encrypted at the output. The disadvantage of Intel SGX is that you need special hardware. How could you do something like this without a special hardware? How can we store a key for decrypting data from RAM so that the owner of this physical device can not recognize this key?
If the VM actually has anything that needs protection, running the VM on untrusted hosts is not secure (period). There is nothing that will change that.  

Going to homomorphic encryptions etc. implies that even the VM doesn't know any secrets, only the source of the data (outside of VM and host) does. In this case, having a VM or not isn't even relevant.
There are of course still problems with the authenticity of the results etc. - just encrypting is never enough.  

Using Intel SGX from within VMs relies on the support/cooperation of the VM software - meaning, it might be useful for separating VMs fom each other, but it can not help VMS against their malicious host.
Given that VMs are, well, virtualized, any hardware support is useless in your scenario. If the host and the virtualization software can't be trusted, your VM is not secure.