My question is, how does a program tell a graphics card to process something instead of the CPU?
La risposta breve è che ogni scheda grafica deve avere un driver che implementa un'API grafica standard come OpenGL o DirectX, in modo che il codice in esecuzione sulla CPU possa chiamare funzioni standard da tale API. Quando scrivi il tuo codice, questo è in gran parte indistinguibile dalla codifica contro qualsiasi altra libreria.
Tuttavia, un'enorme parte della programmazione grafica prevede il passaggio di programmi speciali denominati "shader" alla scheda grafica, in modo che possano essere eseguiti lì. Questi sono generalmente scritti in una lingua diversa specificamente progettata per gli shader.
Does the program talk to the GPU directly? Or does the CPU determine what to give the graphics card?
"Il programma" è già in esecuzione sulla CPU (e tutti gli shader forniti sono in esecuzione sulla GPU) quindi non sono sicuro di cosa stia cercando di chiedere.
It seems like the benefits of processing with a GPU would be negated somewhat if the CPU had to tell the GPU each instruction to process.
In effetti, questo può accadere. Lo spostamento dei dati dalla CPU alla GPU è un collo di bottiglia comune nei programmi ad alta intensità grafica. In effetti, alcune funzionalità delle versioni OpenGL più recenti sono specificamente progettate per generare dati sulla GPU, in modo da non dover passare tanto dalla CPU.
Ovviamente, se il collo di bottiglia è nella CPU, la GPU o la comunicazione tra i due dipende interamente dal singolo programma.