---
title: copy(Prefetch)
description: "Prefetch类型的copy接口表示针对矩阵的预取Copy操作，与上述Trans类型的copy接口相比主要差异在于入参上，采用了C++函数重载的特性进行实现。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_231.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_231.html
indexId: 38cdef586737b5656959217ba2704fcc4ad05cb0e5c75c190bc8a9ff434b90a867
---
# copy(Prefetch)

Prefetch类型的copy接口表示针对矩阵的预取Copy操作，与上述Trans类型的copy接口相比主要差异在于入参上，采用了C++函数重载的特性进行实现。

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

#### 接口定义

template<typename TiledCopy,

typename dtypeS, typename LayoutS>

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


#### 模板参数


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

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| TiledStore | typename | copy tile策略类型。 |
| dtypeS | typename | src精度类型。 |
| LayoutS | typename | src布局类型。 |


#### 参数


**表2 参数定义**

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


#### 返回值

void


#### 示例

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

int main()
{
    double *src = (double*)malloc(sizeof(double) * 8);
    auto shape_s = make_shape(Int<8>{});
    auto stride_s = make_stride(Int<1>{});
    auto layout_s = make_layout(shape_s, stride_s);
    auto tensor_s = make_tensor(src, layout_s);

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

    copy(tiled_copy, tensor_s);

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

上述示例演示了double精度buffer对象的L1预取操作行为，其中一次预取操作可以处理8个double数据。
