Ho un programma c ++ con libreria opencv che prende un'immagine come input ed esegue la stima della posa, il rilevamento del colore, il phog. Quando eseguo questo programma dalla riga di comando ci vogliono circa 4-5 sec per essere completato. Ci vuole circa il 60% di CPU. Quando provo a eseguire lo stesso programma da due finestre della riga di comando diverse contemporaneamente, il processo richiede circa 10-15 secondi per terminare e il processo termina quasi nello stesso tempo. L'utilizzo della CPU raggiunge fino al 100%.
Ho un sito web che chiama questo exe c ++ usando il comando exec (). Quindi, quando due utenti tentano di caricare un'immagine e l'esecuzione richiede più tempo, come ho spiegato sopra nella riga di comando. Questo perché il programma c ++ comporta un alto calcolo e la CPU raggiunge il 100% rallenta? Ma ho letto che la CPU che raggiunge il 100% non è una brutta cosa dato che il computer sta usando la sua piena capacità per eseguire il programma. Quindi è a causa del mio programma c ++ o è qualcosa a che fare con le mie impostazioni del server (computer)? Questo probabilmente non è il problema del server Apache perché quando provo ad eseguirlo dalla riga di comando rallenta anche. Sto usando un processore quad core e tutte le 4 CPU raggiungono il 100% quando cerco di eseguire lo stesso processo allo stesso tempo, quindi penso che sia distribuito tra tutti i processori. Quindi ho qualche altra domanda:
1) Può essere risolto utilizzando il multithreading nel mio codice c ++? Per ora non lo sto usando, ma il multithreading renderà il codice c ++ più costoso dal punto di vista computazionale e aumenterà l'utilizzo della CPU (se questo è il problema).
2) Quale può essere la ragione del rallentamento? Il processo è in una coda e ogni processo viene eseguito solo una certa quantità di tempo e passa da un processo all'altro?
3) Se questo è dovuto al fatto che comporta un calcolo elevato, sarà di aiuto se modifico alcune funzioni sulle funzioni opencv gpu?
4) C'è un modo per risolvere questo problema con qualche idea o suggerimento?
Ho inserito il risultato di top quando eseguo un processo ed eseguo lo stesso processo due volte allo stesso tempo:
Version5 è il processo, che lo esegue una volta
Dueversioni5inesecuzionecontemporaneamente
Grazie in anticipo.