From 57195ebf719dd68f7ee9234bc2fde4d6badea320 Mon Sep 17 00:00:00 2001 From: N00MKRAD Date: Thu, 10 Dec 2020 16:10:52 +0100 Subject: [PATCH] Fixed NCNN tilesize/threads args for multi-gpu --- Code/AudioVideo/AvProcess.cs | 2 +- Code/{IO => Data}/Formats.cs | 7 +------ Code/Flowframes.csproj | 2 +- Code/IO/Logger.cs | 2 +- Code/OS/AiProcess.cs | 31 +++++++++++++++++++++++++++---- 5 files changed, 31 insertions(+), 13 deletions(-) rename Code/{IO => Data}/Formats.cs (57%) diff --git a/Code/AudioVideo/AvProcess.cs b/Code/AudioVideo/AvProcess.cs index 4b7d06d..3c68170 100644 --- a/Code/AudioVideo/AvProcess.cs +++ b/Code/AudioVideo/AvProcess.cs @@ -123,7 +123,7 @@ namespace Flowframes bool replaceLastLine = currentLogMode == LogMode.OnlyLastLine; Logger.Log(outLine.Data, hidden, replaceLastLine); } - + static string GetAvDir () { return Path.Combine(Paths.GetPkgPath(), Path.GetFileNameWithoutExtension(Packages.audioVideo.fileName)); diff --git a/Code/IO/Formats.cs b/Code/Data/Formats.cs similarity index 57% rename from Code/IO/Formats.cs rename to Code/Data/Formats.cs index 8453b48..fb93133 100644 --- a/Code/IO/Formats.cs +++ b/Code/Data/Formats.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; + namespace Flowframes.IO { @@ -10,6 +6,5 @@ namespace Flowframes.IO { public static string[] supported = { ".mp4", ".m4v", ".gif", ".mkv", ".mpg", ".webm", ".avi", ".wmv", ".ts", ".bik" }; // Supported formats public static string[] noEncodeSupport = { ".bik" }; // Files that have no encode support, but decode - public static string[] preprocess = { ".gif" }; // Files that get converted to MP4 first for compat reasons } } diff --git a/Code/Flowframes.csproj b/Code/Flowframes.csproj index 7b93659..4c5ba32 100644 --- a/Code/Flowframes.csproj +++ b/Code/Flowframes.csproj @@ -248,7 +248,7 @@ - + diff --git a/Code/IO/Logger.cs b/Code/IO/Logger.cs index 59c8660..1cb22de 100644 --- a/Code/IO/Logger.cs +++ b/Code/IO/Logger.cs @@ -44,7 +44,7 @@ namespace Flowframes filename = defaultLogName; file = Path.Combine(Paths.GetLogPath(), filename); - logStr = logStr.Replace(Environment.NewLine, " | "); + logStr = logStr.Replace(Environment.NewLine, " ").TrimWhitespaces(); string time = DT.Now.Month + "-" + DT.Now.Day + "-" + DT.Now.Year + " " + DT.Now.Hour + ":" + DT.Now.Minute + ":" + DT.Now.Second; try diff --git a/Code/OS/AiProcess.cs b/Code/OS/AiProcess.cs index 9b3b910..e8782c4 100644 --- a/Code/OS/AiProcess.cs +++ b/Code/OS/AiProcess.cs @@ -48,12 +48,12 @@ namespace Flowframes public static async Task RunDainNcnn(string framesPath, string outPath, int targetFrames, int tilesize) { - string args = $" -v -i {framesPath.Wrap()} -o {outPath.Wrap()} -n {targetFrames} -t {tilesize} -g {Config.Get("ncnnGpus")}"; + string args = $" -v -i {framesPath.Wrap()} -o {outPath.Wrap()} -n {targetFrames} -t {GetNcnnTilesize(tilesize)} -g {Config.Get("ncnnGpus")}"; string dainDir = Path.Combine(Paths.GetPkgPath(), Path.GetFileNameWithoutExtension(Packages.dainNcnn.fileName)); Process dain = OSUtils.NewProcess(!OSUtils.ShowHiddenCmd()); AiStarted(dain, 1500); - dain.StartInfo.Arguments = $"{OSUtils.GetCmdArg()} cd /D {dainDir.Wrap()} & dain-ncnn-vulkan.exe {args} -f {InterpolateUtils.lastExt} -j 4:{Config.Get("ncnnThreads")}:4"; + dain.StartInfo.Arguments = $"{OSUtils.GetCmdArg()} cd /D {dainDir.Wrap()} & dain-ncnn-vulkan.exe {args} -f {InterpolateUtils.lastExt} -j {GetNcnnThreads()}"; Logger.Log("Running DAIN...", false); Logger.Log("cmd.exe " + dain.StartInfo.Arguments, true); if (!OSUtils.ShowHiddenCmd()) @@ -126,7 +126,7 @@ namespace Flowframes string cainExe = "cain-ncnn-vulkan.exe"; Process cain = OSUtils.NewProcess(!OSUtils.ShowHiddenCmd()); AiStarted(cain, 1500); - cain.StartInfo.Arguments = $"{OSUtils.GetCmdArg()} cd /D {cainDir.Wrap()} & {cainExe} {args} -f {InterpolateUtils.lastExt} -j 4:{Config.Get("ncnnThreads")}:4"; + cain.StartInfo.Arguments = $"{OSUtils.GetCmdArg()} cd /D {cainDir.Wrap()} & {cainExe} {args} -f {InterpolateUtils.lastExt} -j {GetNcnnThreads()}"; Logger.Log("cmd.exe " + cain.StartInfo.Arguments, true); if (!OSUtils.ShowHiddenCmd()) { @@ -236,7 +236,7 @@ namespace Flowframes { Process rifeNcnn = OSUtils.NewProcess(!OSUtils.ShowHiddenCmd()); AiStarted(rifeNcnn, 1500); - rifeNcnn.StartInfo.Arguments = $"{OSUtils.GetCmdArg()} cd /D {PkgUtils.GetPkgFolder(Packages.rifeNcnn).Wrap()} & rife-ncnn-vulkan.exe {args} -g {Config.Get("ncnnGpus")} -f {InterpolateUtils.lastExt} -j 4:{Config.Get("ncnnThreads")}:4"; + rifeNcnn.StartInfo.Arguments = $"{OSUtils.GetCmdArg()} cd /D {PkgUtils.GetPkgFolder(Packages.rifeNcnn).Wrap()} & rife-ncnn-vulkan.exe {args} -g {Config.Get("ncnnGpus")} -f {InterpolateUtils.lastExt} -j {GetNcnnThreads()}"; Logger.Log("cmd.exe " + rifeNcnn.StartInfo.Arguments, true); if (!OSUtils.ShowHiddenCmd()) { @@ -295,5 +295,28 @@ namespace Flowframes if (hasShownError) Interpolate.Cancel(); } + + static string GetNcnnTilesize(int tilesize) + { + int gpusAmount = Config.Get("ncnnGpus").Split(',').Length; + string tilesizeStr = $"{tilesize}"; + + for (int i = 1; i < gpusAmount; i++) + tilesizeStr += $",{tilesize}"; + + return tilesizeStr; + } + + static string GetNcnnThreads () + { + int gpusAmount = Config.Get("ncnnGpus").Split(',').Length; + int procThreads = Config.GetInt("ncnnThreads"); + string progThreadsStr = $"{procThreads}"; + + for (int i = 1; i < gpusAmount; i++) + progThreadsStr += $",{procThreads}"; + + return $"4:{progThreadsStr}:4"; ; + } } }