4 ms·
(1) GPUs are special-purpose. They're very good for doing the same floating point calculations, in parallel, on each datum - i.e. if your data can be represen
by DonaldFisk 11y ago
(1) GPUs are special-purpose. They're very good for doing the same floating point calculations, in parallel, on each datum - i.e. if your data can be represented as a picture. They are not much help for processing, for example, large amounts of text, or doing radically different computations on different data.
(2) In any sufficiently complex program, completely different computations are theoretically capable of running concurrently. At the very least, you need multiple CPUs/cores for that, and then you have the problem of assigning tasks to the different cores. Conventional languages are designed around a single processor and do not support this.
(3) Memory access is a bottleneck, which because of caching favours data structures which are compact over those which are scattered over a wide area of memory (such as lists, trees, etc.)
(4) CPUs were once designed to run specific programming languages, e.g. Burroughs mainframes ran Algol natively, and Lisp Machines ran Lisp natively. The PDP-7 and its successor the PDP-11 influenced the design of C. Nowadays, CPUs are designed without apparent reference to the languages which will be compiled onto them, but implicitly favouring the popular languages (C, C++, Java).
So what's happening, and what is likely to happen in future unless we do something about it, is that programs/languages are being shoehorned into processors, rather than different processors being designed to run different types of programs and languages.