| 4776 | // ggml_transpose |
| 4777 | |
| 4778 | struct ggml_tensor * ggml_transpose( |
| 4779 | struct ggml_context * ctx, |
| 4780 | struct ggml_tensor * a) { |
| 4781 | bool is_node = false; |
| 4782 | |
| 4783 | if (a->grad) { |
| 4784 | is_node = true; |
| 4785 | } |
| 4786 | |
| 4787 | struct ggml_tensor * result = ggml_view_tensor(ctx, a); |
| 4788 | ggml_format_name(result, "%s (transposed)", a->name); |
| 4789 | |
| 4790 | result->ne[0] = a->ne[1]; |
| 4791 | result->ne[1] = a->ne[0]; |
| 4792 | |
| 4793 | result->nb[0] = a->nb[1]; |
| 4794 | result->nb[1] = a->nb[0]; |
| 4795 | |
| 4796 | result->op = GGML_OP_TRANSPOSE; |
| 4797 | result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; |
| 4798 | result->src[0] = a; |
| 4799 | |
| 4800 | return result; |
| 4801 | } |
| 4802 | |
| 4803 | // ggml_get_rows |
| 4804 | |