---
title: copy(Trans)
description: "Trans类型的copy接口表示不同排布矩阵之间的转置Copy操作。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_114.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_114.html
indexId: f1cf0d744016cf4a1ff3fdb8595bc2ee37858993394c564f2641a5a69b5966a567
---
# copy(Trans)

Trans类型的copy接口表示不同排布矩阵之间的转置Copy操作。

涉及TiledCopy策略和Tensor dst/src矩阵输入，其中Tensor dst/src的形状Shape和跨度步长Stride必须与TiledCopy策略定义一致。

#### 接口定义

template<typename TiledCopy,

typename dtypeD, typename LayoutD,

typename dtypeS, typename LayoutS>

void copy(TiledCopy tiled_copy, Tensor<dtypeD, LayoutD> dst, Tensor<dtypeS, LayoutS> src);


#### 模板参数


**表1 模板参数定义**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| TiledCopy | typename | copy tile策略类型。 |
| dtypeD, dtypeS | typename | dst,src精度类型。 |
| LayoutD, LayoutS | typename | dst,src布局类型。 |


#### 参数


**表2 参数定义**

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| tiled\_copy | TiledCopy | copy tile策略。 | 输入 |
| dst | Tensor<dtypeD, LayoutD> | 转置目标矩阵。 | 输出 |
| src | Tensor<dtypeS, LayoutS> | 转置源矩阵。 | 输入 |


#### 返回值

void


#### 示例

```
#include <stdio.h>
#include <stdlib.h>
#include "kupl_mma.h"
using namespace kupl::tensor;

int main()
{
    constexpr int MATRIX_M = 32;
    constexpr int MATRIX_N = 512;
    double *dst = (double*)malloc(sizeof(double) * MATRIX_M * MATRIX_N);
    double *src = (double*)malloc(sizeof(double) * MATRIX_M * MATRIX_N);
    for (int i = 0; i < MATRIX_M; i++) {
        for (int j = 0; j < MATRIX_N; j++) {
            dst[i * MATRIX_N + j] = 0.0;
            src[i * MATRIX_N + j] = i * MATRIX_N + j;
        }
    }

    auto shape_d = make_shape(Int<MATRIX_M>{}, Int<MATRIX_N>{});
    auto shape_s = make_shape(Int<MATRIX_M>{}, Int<MATRIX_N>{});

    auto stride_d = make_stride(Int<1>{}, Int<MATRIX_M>{});
    auto stride_s = make_stride(Int<MATRIX_N>{}, Int<1>{});

    auto layout_d = make_layout(shape_d, stride_d);
    auto layout_s = make_layout(shape_s, stride_s);

    auto atom_copy_shape = make_shape(Int<1>{}, Int<MATRIX_N>{});
    auto tiled_copy = make_tiled_copy(Ops<KP36_32x1_F64_TRANS_RM2CM>{}, atom_copy_shape);

    auto tensor_d = make_tensor(dst, layout_d);
    auto tensor_s = make_tensor(src, layout_s);
    copy(tiled_copy, tensor_d, tensor_s);

    free(src);
    free(dst);
    return 0;
}
```

上述示例演示了基于32*512_F64矩阵形状从行主序到列主序的copy流程，其中通过copy根据创建的copy tile策略执行具体的copy转置操作。
