mirror of
https://github.com/leejet/stable-diffusion.cpp.git
synced 2026-09-26 07:57:43 -05:00
perf: reduce CPU overhead in graph execution and sampling (#1997)
This commit is contained in:
@@ -2158,6 +2158,10 @@ sd::Tensor<float> StableDiffusionGGML::sample(const std::shared_ptr<DiffusionMod
|
||||
|
||||
RunnerEndOnExit sample_control_runner_end{!control_image.empty() && control_net != nullptr ? control_net.get() : nullptr};
|
||||
|
||||
const bool apply_denoise_mask = !denoise_mask.empty() &&
|
||||
std::any_of(denoise_mask.values().begin(), denoise_mask.values().end(),
|
||||
[](float value) { return value != 1.f; });
|
||||
|
||||
std::vector<int> skip_layers(guidance.slg.layers, guidance.slg.layers + guidance.slg.layer_count);
|
||||
float cfg_scale = guidance.txt_cfg;
|
||||
float img_cfg_scale = guidance.img_cfg;
|
||||
@@ -2287,13 +2291,13 @@ sd::Tensor<float> StableDiffusionGGML::sample(const std::shared_ptr<DiffusionMod
|
||||
hunyuan_timestep_r_tensor = sd::Tensor<float>::from_vector({sigmas[step + 1]});
|
||||
}
|
||||
sd::Tensor<float> noised_input = x * c_in;
|
||||
if (!denoise_mask.empty() && (version == VERSION_WAN2_2_TI2V || sd_version_is_ltxav(version) || sd_version_is_lingbot_video(version))) {
|
||||
if (apply_denoise_mask && (version == VERSION_WAN2_2_TI2V || sd_version_is_ltxav(version) || sd_version_is_lingbot_video(version))) {
|
||||
noised_input = noised_input * denoise_mask + sampling_init_latent * (1.0f - denoise_mask);
|
||||
}
|
||||
|
||||
if (cache_runtime.spectrum_enabled && cache_runtime.spectrum.should_predict()) {
|
||||
cache_runtime.spectrum.predict(&denoised);
|
||||
if (!denoise_mask.empty()) {
|
||||
if (apply_denoise_mask) {
|
||||
denoised = denoised * denoise_mask + sampling_init_latent * (1.0f - denoise_mask);
|
||||
}
|
||||
if (preview_needed && sd_should_preview_denoised()) {
|
||||
@@ -2516,7 +2520,7 @@ sd::Tensor<float> StableDiffusionGGML::sample(const std::shared_ptr<DiffusionMod
|
||||
if (cache_runtime.spectrum_enabled) {
|
||||
cache_runtime.spectrum.update(denoised);
|
||||
}
|
||||
if (!denoise_mask.empty()) {
|
||||
if (apply_denoise_mask) {
|
||||
denoised = denoised * denoise_mask + sampling_init_latent * (1.0f - denoise_mask);
|
||||
}
|
||||
if (preview_needed && sd_should_preview_denoised()) {
|
||||
|
||||
Reference in New Issue
Block a user