开发者
资源
文档评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

make_coord

创建Coord,用于描述矩阵下标,从而用于Tensor对象的取下标操作。

接口定义

template<typename... Args>

Coord<Args...> make_coord(Args ... args);

参数

表1 参数定义

参数名

类型

描述

输入/输出

args...

Args...,支持任意Int<>、Underscore或int类型对象及任意Coord<>类型对象作为输入。

用于定义矩阵下标。对于非峰形矩阵只需输入Int<>、Underscore或int类型对象,其中Int<>和Underscore类型变量表示编译期可确认变量,Underscore具体表示该维度所有下标;int类型变量表示运行期可确定变量。对于峰形矩阵需要输入Shape<>类型对象进行嵌套描述。

输入

返回值

返回Coord<Args...>对象。

示例

#include "stdlib.h"
#include "kupl_mma.h"
using namespace kupl::tensor;

int main()
{
    constexpr int MATRIX_M  = 32;
    constexpr int MATRIX_N  = 16;
    double *data = (double *)malloc(sizeof(double) * MATRIX_M * MATRIX_N);

    auto shape = make_shape(Int<32>{}, Int<16>{});
    auto stride = make_stride(Int<16>{}, Int<1>{});
    auto layout = make_layout(shape, stride);
    atuo tensor = make_tensor(data, layout);

    // 获取下标为(2,2)的Tensor元素
    auto coord1 = make_coord(Int<2>{}, Int<2>{});
    auto ret1 = tensor(coord1);
    // 通过Underscore类型变量实现Tensor切片效果,coord2表示获取第2行所有Tensor元素
    auto coord2 = make_coord(Int<2>{}, Underscore{});
    auto ret2 = tensor(coord2);
    auto coord3 = make_coord(Int<2>{});
    auto ret3 = ret2(coord3);

    free(data);
    return 0;
}

上述示例演示了针对32*16的Tensor对象的取下标和切片操作,其中make_coord表示如何生成Coord下标对象。