Проста відповідь полягає в тому, що GPU працює найкраще, коли вам потрібно зробити досить невеликі, досить прості обчислення кожного з дуже великої кількості елементів. Щоб значно досягти цього способу, обчислення кожного елемента повинні бути незалежними від обчислень для інших елементів. Якщо існує (як правило) деяка залежність між одним елементом та іншим, вам, як правило, потрібно придумати який-небудь спосіб його розбити, перш ніж ви збираєтеся сильно реалізувати цей код у графічному процесорі. Якщо залежність взагалі не може бути зламана або потрібна занадто велика робота, щоб зламати, код може працювати швидше на процесорі.
Більшість поточних процесорів також підтримують досить багато типів операцій, які поточні графічні процесори просто не намагаються підтримувати (наприклад, захист пам’яті для багатозадачності).
Дивлячись на це з дещо іншого напрямку, процесори були (в значній мірі) розроблені таким чином, щоб бути зручно для програмістів, а апаратні люди зробили все можливе (і прокляте гарне найкраще!), Щоб створити апаратне забезпечення, яке підтримує цю зручну модель для програміст, але все одно виконується якнайшвидше.
Графічні процесори підходять до речі з протилежного напрямку: вони розроблені значною мірою для зручності дизайнера апаратури, а такі речі, як OpenCL, намагалися забезпечити максимально розумну модель програмування, враховуючи обмеження обладнання.
Написання коду для запуску на графічний процесор, як правило, займе більше часу та зусиль (тому це коштуватиме дорожче), ніж робити те ж саме на процесорі. Таким чином, в першу чергу це має сенс, коли / якщо:
- Проблема настільки паралельна, що можна очікувати великого виграшу від мінімальних зусиль, або
- Підвищення швидкості настільки важливе, що виправдовує багато зайвої роботи.
Є кілька очевидних можливостей для кожного - але величезна кількість додатків явно навіть не близька ні до одного. Я був би дуже здивований, побачивши (наприклад, програму CRUD, що незабаром працює на графічному процесорі (і якщо це станеться, це, мабуть, станеться тому, що хтось поставив перед собою таку точну ціль, не обов'язково щось наближається до оптимальної співвідношення витрат / вигод).
Реальність полягає в тому, що для багатьох програм (я спокусився сказати "більшість") типовий процесор набагато більше, ніж досить швидкий, а зручність програмування (що призводить до таких речей, як простіший розвиток нових функцій) набагато важливіше, ніж швидкість виконання.