Files
ncnn/tests/test_rotaryembed_oom.cpp
nihui 559a8e8cb0 rotaryembed layer (#6407)
* add deepseek_v3 attention test
* fuse non interleaved rotary embed
* fuse t5 layernorm without gamma
* test qwen2 attention
* sdpa pattern ++
2025-11-19 17:28:08 +08:00

47 lines
1.0 KiB
C++

// Copyright 2025 Tencent
// SPDX-License-Identifier: BSD-3-Clause
#include "testutil.h"
static int test_rotaryembed_oom(const ncnn::Mat& a, int interleaved)
{
const int embed_dim = a.w;
const int seqlen = a.h;
const int num_heads = a.c;
ncnn::Mat cos_cache = RandomMat(embed_dim / 2, seqlen);
ncnn::Mat sin_cache = RandomMat(embed_dim / 2, seqlen);
ncnn::ParamDict pd;
pd.set(0, interleaved);
std::vector<ncnn::Mat> weights(0);
std::vector<ncnn::Mat> as(3);
as[0] = a;
as[1] = cos_cache;
as[2] = sin_cache;
int ret = test_layer_oom("RotaryEmbed", pd, weights, as, 1);
if (ret != 0)
{
fprintf(stderr, "test_rotaryembed_oom failed a=(%d %d %d) interleaved=%d\n", a.w, a.h, a.c, interleaved);
}
return ret;
}
static int test_rotaryembed_0()
{
return 0
|| test_rotaryembed_oom(RandomMat(32, 66, 8), 0)
|| test_rotaryembed_oom(RandomMat(28, 17, 15), 1);
}
int main()
{
SRAND(7767517);
return test_rotaryembed_0();
}