| 1026 | const int64_t step_elems = config_.num_heads * head_dim_; |
| 1027 | carry_key_sources_.assign(static_cast<size_t>(cache_steps_ + 1), {}); |
| 1028 | carry_value_sources_.assign(static_cast<size_t>(cache_steps_ + 1), {}); |
| 1029 | carry_key_destinations_.assign(static_cast<size_t>(cache_steps_ + 1), {}); |
| 1030 | carry_value_destinations_.assign(static_cast<size_t>(cache_steps_ + 1), {}); |
| 1031 | append_key_sources_.assign(static_cast<size_t>(cache_steps_ + 1), {}); |
| 1032 | append_value_sources_.assign(static_cast<size_t>(cache_steps_ + 1), {}); |
| 1033 | append_key_destinations_.assign(static_cast<size_t>(cache_steps_ + 1), {}); |
| 1034 | append_value_destinations_.assign(static_cast<size_t>(cache_steps_ + 1), {}); |
| 1035 | |
| 1036 | for (int64_t next_keep_steps = 1; next_keep_steps <= cache_steps_; ++next_keep_steps) { |
| 1037 | const int64_t append_steps = std::min<int64_t>(frames_, next_keep_steps); |
| 1038 | const int64_t carry_steps = next_keep_steps - append_steps; |
| 1039 | auto & carry_key_src = carry_key_sources_[static_cast<size_t>(next_keep_steps)]; |
| 1040 | auto & carry_value_src = carry_value_sources_[static_cast<size_t>(next_keep_steps)]; |
| 1041 | auto & carry_key_dst = carry_key_destinations_[static_cast<size_t>(next_keep_steps)]; |
| 1042 | auto & carry_value_dst = carry_value_destinations_[static_cast<size_t>(next_keep_steps)]; |
| 1043 | auto & append_key_src = append_key_sources_[static_cast<size_t>(next_keep_steps)]; |
| 1044 | auto & append_value_src = append_value_sources_[static_cast<size_t>(next_keep_steps)]; |
| 1045 | auto & append_key_dst = append_key_destinations_[static_cast<size_t>(next_keep_steps)]; |
| 1046 | auto & append_value_dst = append_value_destinations_[static_cast<size_t>(next_keep_steps)]; |
| 1047 | carry_key_src.reserve(static_cast<size_t>(config_.transformer_layers)); |
| 1048 | carry_value_src.reserve(static_cast<size_t>(config_.transformer_layers)); |
| 1049 | carry_key_dst.reserve(static_cast<size_t>(config_.transformer_layers)); |
| 1050 | carry_value_dst.reserve(static_cast<size_t>(config_.transformer_layers)); |
| 1051 | append_key_src.reserve(static_cast<size_t>(config_.transformer_layers)); |
| 1052 | append_value_src.reserve(static_cast<size_t>(config_.transformer_layers)); |
| 1053 | append_key_dst.reserve(static_cast<size_t>(config_.transformer_layers)); |
| 1054 | append_value_dst.reserve(static_cast<size_t>(config_.transformer_layers)); |
| 1055 | |
| 1056 | const size_t append_elems = static_cast<size_t>(append_steps * step_elems); |
| 1057 | const size_t append_src_offset = static_cast<size_t>((frames_ - append_steps) * step_elems) * sizeof(float); |
| 1058 | const size_t append_dst_offset = static_cast<size_t>((cache_steps_ - append_steps) * step_elems) * sizeof(float); |
| 1059 | const size_t carry_elems = static_cast<size_t>(carry_steps * step_elems); |
| 1060 | const size_t carry_src_offset = static_cast<size_t>((cache_steps_ - carry_steps) * step_elems) * sizeof(float); |
| 1061 | const size_t carry_dst_offset = static_cast<size_t>((cache_steps_ - next_keep_steps) * step_elems) * sizeof(float); |
| 1062 | |
| 1063 | for (size_t layer = 0; layer < prefix_keys_.size(); ++layer) { |
| 1064 | if (carry_steps > 0) { |
| 1065 | carry_key_src.push_back(ggml_view_1d(ggml_ctx_, prefix_keys_[layer].tensor, carry_elems, carry_src_offset)); |
| 1066 | carry_value_src.push_back(ggml_view_1d(ggml_ctx_, prefix_values_[layer].tensor, carry_elems, carry_src_offset)); |
| 1067 | carry_key_dst.push_back(ggml_view_1d(ggml_ctx_, work_prefix_keys_[layer].tensor, carry_elems, carry_dst_offset)); |
| 1068 | carry_value_dst.push_back(ggml_view_1d(ggml_ctx_, work_prefix_values_[layer].tensor, carry_elems, carry_dst_offset)); |
| 1069 | } else { |
| 1070 | carry_key_src.push_back(nullptr); |
no test coverage detected