As it happens, using Download/Upload to transfer data between cards doesn't work. I'm not sure it's even possible to move video data between GPUs mid-task, or even use more than one GPU with a single instance of FFmpeg. This might be an FFmpeg limitation? Tried several different ways, and couldn't get it to work.
When specifying an Upload to GPU0 -> Encode on GPU1, throws an FFmpeg error:
Tried parallel Upload filters directly from Video Input node, uploading to 2 different cards (GPU0/1), and it throws the same type of error:
Using Upload to GPU0 -> Scale -> Download from GPU0 -> Upload to GPU1 -> Encode on GPU1 doesn't work either. Throws the same FFmpeg error:
2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuCtxPushCurrent(s->hwctx->cuda_ctx)
2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuModuleUnload(s->cu_module)
2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuCtxPopCurrent(&dummy)
2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuCtxPushCurrent(s->hwctx->cuda_ctx)
2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuModuleUnload(s->cu_module)
2023-09-07 16:41:03 (trace) [FFmpeg:0] Calling cu->cuCtxPopCurrent(&dummy)
2023-09-07 16:41:03 (info) [Router.cpp:152] Dumping system information:
Architecture: x64
Vendor ID: GenuineIntel
Model name: Intel(R) Xeon(R) CPU E5-2470 v2 @ 2.40GHz
Frequency: 2400 MHz
Quantities:
CPU packages : 2
Physical CPUs: 20
Logical CPUs : 40
Caches:
L1:
Size : 32768
Line size : 64
Associativity: 8
Type : Data
L2:
Size : 262144
Line size : 64
Associativity: 8
Type : Unified
L3:
Size : 26214400
Line size : 64
Associativity: 20
Type : Unified
Instruction set support:
3D-now!: false
MMX : true
SSE : true
SSE2 : true
SSE3 : true
AVX : true
Memory:
Physical:
Available: 92780867584
Total : 103025205248
Virtual:
Available: 140448929554432
Total : 140737488224256
Kernel:
Variant: Windows NT
Version: 10.0.19041 build 3155
OS:
Name : Windows NT
Full name: Microsoft Windows 10 Pro
Version : 10.0.19045 build 3324
GPUs:
No detection methods enabled
2023-09-07 16:41:03 (info) [Router.cpp:185] Using input node 9309cf35-7e4c-40e3-b133-4754fe21a3f3 for track #0 (video).
2023-09-07 16:41:03 (info) [Router.cpp:186] Executing pre-init phase for track #0 (video) ...
2023-09-07 16:41:03 (debug) [InputNode.cpp:78] Filter config: buffer@9309cf357e4c40e3b1334754fe21a3f3=width=1920:height=1080:pix_fmt=yuv420p:time_base=1001/24000:pixel_aspect=1/1,hwupload_cuda[673157b8b5c94fcbb6460873239f5e54];[673157b8b5c94fcbb6460873239f5e54]split=2[split_74972bd9eab84782948d76fe847c9664][split_21f42936466e4121b3817c10e2155724];[split_74972bd9eab84782948d76fe847c9664]scale_cuda=w=1920:h=1080:interp_algo=3:force_original_aspect_ratio=1,hwdownload,hwupload_cuda=gpu=1,format=pix_fmts=cuda,buffersink@a5bebec201e640c6940a6f7d9caca738;[split_21f42936466e4121b3817c10e2155724]scale_cuda=w=1280:h=720:interp_algo=3:force_original_aspect_ratio=1,format=pix_fmts=cuda,buffersink@bc23b883870a452fa61cea7d0d361e4c
2023-09-07 16:41:03 (info) [Router.cpp:196] Pre-init phase for track #0 (video) succeeded.
2023-09-07 16:41:03 (info) [Router.cpp:197] Executing init phase for track #0 (video) ...
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'width' to value '1920'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'height' to value '1080'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'pix_fmt' to value 'yuv420p'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'time_base' to value '1001/24000'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'pixel_aspect' to value '1/1'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'outputs' to value '2'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'w' to value '1920'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'h' to value '1080'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'interp_algo' to value '3'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'force_original_aspect_ratio' to value '1'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'gpu' to value '1'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'pix_fmts' to value 'cuda'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'w' to value '1280'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'h' to value '720'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'interp_algo' to value '3'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'force_original_aspect_ratio' to value '1'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Setting 'pix_fmts' to value 'cuda'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Could not set non-existent option 'gpu' to value '1'
2023-09-07 16:41:03 (trace) [FFmpeg:0] Error applying filter options
2023-09-07 16:41:03 (error) [InputNode.cpp:104] Unable to parse filter graph.
2023-09-07 16:41:03 (error) [Router.cpp:202] Init phase of track #0 (video) failed!
2023-09-07 16:41:03 (error) [Router.cpp:242] Initialization failed: -11
2023-09-07 16:41:03 (info) [VoukoderPro.cpp:502] Unable to start VoukoderPro: FFmpeg error.
Alles anzeigen
It would certainly be nice to run multiple GPUs from a single Vegas render, but if this is in fact an FFmpeg limitation, I guess there's not much anybody can do about it except to run multiple Vegas instances, each with a separate VoukoderPro Scene controlling it's own GPU. Unless VoPro could run multiple FFmpeg instances from the same Vegas output buffer?