ggml : store offset as opt arg for ggml_view_xd() operators
This commit is contained in:
parent
7ca81e9e65
commit
94ea9e7bfe
1 changed files with 42 additions and 0 deletions
42
ggml.c
42
ggml.c
|
@ -5802,10 +5802,18 @@ struct ggml_tensor * ggml_view_1d(
|
||||||
|
|
||||||
struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 1, &ne0, (char *) a->data + offset);
|
struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 1, &ne0, (char *) a->data + offset);
|
||||||
|
|
||||||
|
ggml_scratch_save(ctx);
|
||||||
|
|
||||||
|
struct ggml_tensor * offs = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2);
|
||||||
|
memcpy(offs->data, &offset, 2*sizeof(int32_t));
|
||||||
|
|
||||||
|
ggml_scratch_load(ctx);
|
||||||
|
|
||||||
result->op = GGML_OP_VIEW;
|
result->op = GGML_OP_VIEW;
|
||||||
result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
|
result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
|
||||||
result->src0 = a;
|
result->src0 = a;
|
||||||
result->src1 = NULL;
|
result->src1 = NULL;
|
||||||
|
result->opt[0] = offs;
|
||||||
|
|
||||||
if (is_node) {
|
if (is_node) {
|
||||||
memcpy(result->padding, &offset, sizeof(offset));
|
memcpy(result->padding, &offset, sizeof(offset));
|
||||||
|
@ -5834,6 +5842,13 @@ struct ggml_tensor * ggml_view_2d(
|
||||||
|
|
||||||
struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 2, ne, (char *) a->data + offset);
|
struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 2, ne, (char *) a->data + offset);
|
||||||
|
|
||||||
|
ggml_scratch_save(ctx);
|
||||||
|
|
||||||
|
struct ggml_tensor * offs = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2);
|
||||||
|
memcpy(offs->data, &offset, 2*sizeof(int32_t));
|
||||||
|
|
||||||
|
ggml_scratch_load(ctx);
|
||||||
|
|
||||||
result->nb[1] = nb1;
|
result->nb[1] = nb1;
|
||||||
result->nb[2] = result->nb[1]*ne1;
|
result->nb[2] = result->nb[1]*ne1;
|
||||||
result->nb[3] = result->nb[2];
|
result->nb[3] = result->nb[2];
|
||||||
|
@ -5842,6 +5857,7 @@ struct ggml_tensor * ggml_view_2d(
|
||||||
result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
|
result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
|
||||||
result->src0 = a;
|
result->src0 = a;
|
||||||
result->src1 = NULL;
|
result->src1 = NULL;
|
||||||
|
result->opt[0] = offs;
|
||||||
|
|
||||||
if (is_node) {
|
if (is_node) {
|
||||||
memcpy(result->padding, &offset, sizeof(offset));
|
memcpy(result->padding, &offset, sizeof(offset));
|
||||||
|
@ -5872,6 +5888,13 @@ struct ggml_tensor * ggml_view_3d(
|
||||||
|
|
||||||
struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, (char *) a->data + offset);
|
struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, (char *) a->data + offset);
|
||||||
|
|
||||||
|
ggml_scratch_save(ctx);
|
||||||
|
|
||||||
|
struct ggml_tensor * offs = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2);
|
||||||
|
memcpy(offs->data, &offset, 2*sizeof(int32_t));
|
||||||
|
|
||||||
|
ggml_scratch_load(ctx);
|
||||||
|
|
||||||
result->nb[1] = nb1;
|
result->nb[1] = nb1;
|
||||||
result->nb[2] = nb2;
|
result->nb[2] = nb2;
|
||||||
result->nb[3] = result->nb[2]*ne2;
|
result->nb[3] = result->nb[2]*ne2;
|
||||||
|
@ -5880,6 +5903,7 @@ struct ggml_tensor * ggml_view_3d(
|
||||||
result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
|
result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
|
||||||
result->src0 = a;
|
result->src0 = a;
|
||||||
result->src1 = NULL;
|
result->src1 = NULL;
|
||||||
|
result->opt[0] = offs;
|
||||||
|
|
||||||
if (is_node) {
|
if (is_node) {
|
||||||
memcpy(result->padding, &offset, sizeof(offset));
|
memcpy(result->padding, &offset, sizeof(offset));
|
||||||
|
@ -5912,6 +5936,13 @@ struct ggml_tensor * ggml_view_4d(
|
||||||
|
|
||||||
struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 4, ne, (char *) a->data + offset);
|
struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 4, ne, (char *) a->data + offset);
|
||||||
|
|
||||||
|
ggml_scratch_save(ctx);
|
||||||
|
|
||||||
|
struct ggml_tensor * offs = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2);
|
||||||
|
memcpy(offs->data, &offset, 2*sizeof(int32_t));
|
||||||
|
|
||||||
|
ggml_scratch_load(ctx);
|
||||||
|
|
||||||
result->nb[1] = nb1;
|
result->nb[1] = nb1;
|
||||||
result->nb[2] = nb2;
|
result->nb[2] = nb2;
|
||||||
result->nb[3] = nb3;
|
result->nb[3] = nb3;
|
||||||
|
@ -5920,6 +5951,7 @@ struct ggml_tensor * ggml_view_4d(
|
||||||
result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
|
result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
|
||||||
result->src0 = a;
|
result->src0 = a;
|
||||||
result->src1 = NULL;
|
result->src1 = NULL;
|
||||||
|
result->opt[0] = offs;
|
||||||
|
|
||||||
if (is_node) {
|
if (is_node) {
|
||||||
memcpy(result->padding, &offset, sizeof(offset));
|
memcpy(result->padding, &offset, sizeof(offset));
|
||||||
|
@ -15021,6 +15053,16 @@ struct ggml_cgraph ggml_graph_import(const char * fname, struct ggml_context **
|
||||||
{
|
{
|
||||||
tensor = ggml_reshape_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3]);
|
tensor = ggml_reshape_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3]);
|
||||||
} break;
|
} break;
|
||||||
|
case GGML_OP_VIEW:
|
||||||
|
{
|
||||||
|
tensor = ggml_view_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3], 0, 0, 0, 0);
|
||||||
|
|
||||||
|
uint64_t offs;
|
||||||
|
memcpy(&offs, args[2]->data, sizeof(offs));
|
||||||
|
|
||||||
|
tensor->data = ((char *) tensor->data) + offs;
|
||||||
|
printf("xxxxxx offs: %zu\n", offs);
|
||||||
|
} break;
|
||||||
case GGML_OP_TRANSPOSE:
|
case GGML_OP_TRANSPOSE:
|
||||||
{
|
{
|
||||||
tensor = ggml_transpose(*ctx_eval, args[0]);
|
tensor = ggml_transpose(*ctx_eval, args[0]);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue