Ok so the final answer is :
ffmpeg \
-hwaccel cuvid -c:v h264_cuvid -i bbb_sunflower_2160p_30fps_normal.mp4 \
-hwaccel cuvid -c:v h264_cuvid -i bbb_sunflower_2160p_30fps_normal.mp4 \
-hwaccel cuvid -c:v h264_cuvid -i bbb_sunflower_2160p_30fps_normal.mp4 \
-hwaccel cuvid -c:v h264_cuvid -i bbb_sunflower_2160p_30fps_normal.mp4 \
-filter_complex "nullsrc=size=1440x960 [base]; \
[0:v] scale_npp=720:480, hwdownload, format=nv12 [upperleft]; \
[1:v] scale_npp=720:480, hwdownload, format=nv12 [upperright]; \
[2:v] scale_npp=720:480, hwdownload, format=nv12 [lowerleft]; \
[3:v] scale_npp=720:480, hwdownload, format=nv12 [lowerright]; \
[base][upperleft] overlay=shortest=1 [tmp1]; \
[tmp1][upperright] overlay=shortest=1:x=720 [tmp2]; \
[tmp2][lowerleft] overlay=shortest=1:y=480 [tmp3]; \
[tmp3][lowerright] overlay=shortest=1:x=720:y=480, hwupload_cuda" \
-c:v h264_nvenc -f matroska pipe:1 | ffplay -i -
Thank you generix, you were right about scale_npp position !