@@ -110,7 +110,7 @@ static void print_usage()
110110 fprintf (stderr, " -i input-path input image directory (jpg/png/webp)\n " );
111111 fprintf (stderr, " -o output-path output image path (jpg/png/webp) or directory\n " );
112112 fprintf (stderr, " -m model-path rife model path (default=rife-HD)\n " );
113- fprintf (stderr, " -g gpu-id gpu device to use (default=auto) can be 0,1,2 for multi-gpu\n " );
113+ fprintf (stderr, " -g gpu-id gpu device to use (-1=cpu, default=auto) can be 0,1,2 for multi-gpu\n " );
114114 fprintf (stderr, " -j load:proc:save thread count for load/proc/save (default=1:2:2) can be 1:2,2,2:2 for multi-gpu\n " );
115115 fprintf (stdout, " -x enable tta mode\n " );
116116 fprintf (stdout, " -u enable UHD mode\n " );
@@ -732,7 +732,7 @@ int main(int argc, char** argv)
732732 int gpu_count = ncnn::get_gpu_count ();
733733 for (int i=0 ; i<use_gpu_count; i++)
734734 {
735- if (gpuid[i] < 0 || gpuid[i] >= gpu_count)
735+ if (gpuid[i] < - 1 || gpuid[i] >= gpu_count)
736736 {
737737 fprintf (stderr, " invalid gpu device\n " );
738738
@@ -744,17 +744,27 @@ int main(int argc, char** argv)
744744 int total_jobs_proc = 0 ;
745745 for (int i=0 ; i<use_gpu_count; i++)
746746 {
747- int gpu_queue_count = ncnn::get_gpu_info (gpuid[i]).compute_queue_count ();
748- jobs_proc[i] = std::min (jobs_proc[i], gpu_queue_count);
749- total_jobs_proc += jobs_proc[i];
747+ if (gpuid[i] == -1 )
748+ {
749+ jobs_proc[i] = std::min (jobs_proc[i], cpu_count);
750+ total_jobs_proc += 1 ;
751+ }
752+ else
753+ {
754+ int gpu_queue_count = ncnn::get_gpu_info (gpuid[i]).compute_queue_count ();
755+ jobs_proc[i] = std::min (jobs_proc[i], gpu_queue_count);
756+ total_jobs_proc += jobs_proc[i];
757+ }
750758 }
751759
752760 {
753761 std::vector<RIFE*> rife (use_gpu_count);
754762
755763 for (int i=0 ; i<use_gpu_count; i++)
756764 {
757- rife[i] = new RIFE (gpuid[i], tta_mode, uhd_mode);
765+ int num_threads = gpuid[i] == -1 ? jobs_proc[i] : 1 ;
766+
767+ rife[i] = new RIFE (gpuid[i], tta_mode, uhd_mode, num_threads);
758768
759769 rife[i]->load (modeldir);
760770 }
@@ -783,10 +793,17 @@ int main(int argc, char** argv)
783793 int total_jobs_proc_id = 0 ;
784794 for (int i=0 ; i<use_gpu_count; i++)
785795 {
786- for ( int j= 0 ; j<jobs_proc [i]; j++ )
796+ if (gpuid [i] == - 1 )
787797 {
788798 proc_threads[total_jobs_proc_id++] = new ncnn::Thread (proc, (void *)&ptp[i]);
789799 }
800+ else
801+ {
802+ for (int j=0 ; j<jobs_proc[i]; j++)
803+ {
804+ proc_threads[total_jobs_proc_id++] = new ncnn::Thread (proc, (void *)&ptp[i]);
805+ }
806+ }
790807 }
791808 }
792809
0 commit comments