Da un punto di vista del supercalcolo è meglio non pensare al carico in CPU / GPU in percentuale, ma piuttosto determinare quante operazioni sono necessarie al proprio problema e quindi confrontarle con le massime prestazioni del sistema.
Se si ottiene il 100% di utilizzo della CPU, ciò non significa necessariamente che tutte le prestazioni vengano fuori dal sistema. Le CPU spesso possono fare più cose contemporaneamente allo stesso tempo, ad esempio una divisione e un'aggiunta. Se puoi iniziare la divisione in anticipo, può eventualmente essere sovrapposta con l'aggiunta. Molto probabilmente la tua CPU desktop ha un'unità fuori servizio che riordinerà le dichiarazioni al fine di beneficiare di tali sovrapposizioni. O se hai il seguente programma:
if (expr1)
expr2;
else
expr3;
Una CPU riordinante proverà a calcolare le tre espressioni contemporaneamente e quindi a eliminare il risultato di una di esse. Questo lo rende più veloce nel complesso. Se hai qualche blocco nel tuo programma e non puoi riordinare, allora stai utilizzando meno corsie nella CPU, ma probabilmente mostrerà ancora il 100%.
Quindi hai funzioni SIMD nelle CPU che sono operazioni vettoriali. È come la luce GPGPU, nel senso che di solito hai solo quattro o otto operazioni contemporaneamente, le GPU fanno come 32 o 64. Tuttavia devi usarlo per avviare i FLOPS.
Roba come la falsa condivisione può comportare un costo di sincronizzazione pesante che di solito si presenta come caricamento del kernel in Linux. La CPU è completamente utilizzata ma non si dispone di un throughput molto utile.
Ho programmato su una macchina IBM Blue Gene / Q. Ha molti livelli gerarchici ( schematico di Blue Gene / L obsoleto ) ed è quindi difficile da programmare in modo efficiente. Dovrai utilizzare l'intera gerarchia fino a SIMD e SMT (Intel chiama HyperThreading) per ottenere prestazioni ottimali.
E poi la rete spesso ti limita. Pertanto si scopre che è più veloce nel tempo (orologio da parete) calcolare le cose su più CPU contemporaneamente invece di comunicarle sulla rete. Ciò caricherà maggiormente le CPU e renderà il programma più veloce. Ma la velocità effettiva del programma non è buona come sembra dai numeri grezzi.
Se aggiungi GPU al mix, diventerà ancora più difficile orchestrare tutto questo per ottenere prestazioni. Questa sarà una delle cose che inizierò a fare nella mia tesi di laurea magistrale in QCD tra un paio di mesi.
NO-OP
s contemporaneamente, il che comporterà un carico del 100%.