Adding GPU support.
Related issues: #315 (closed), #316 (closed), #317 (closed), #318 (closed), #319 (closed)