Nothing
test_that("ggml_reset clears context memory", {
ctx <- ggml_init(50 * 1024 * 1024)
# Создать тензор
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1000000)
# Проверить что память используется
used_before <- ggml_used_mem(ctx)
expect_true(used_before > 0)
# Reset
ggml_reset(ctx)
# Проверить что память освободилась
used_after <- ggml_used_mem(ctx)
expect_equal(used_after, 0)
ggml_free(ctx)
})
test_that("ggml_reset allows reusing context", {
ctx <- ggml_init(50 * 1024 * 1024)
# Создать первый тензор
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 5000000)
used_1 <- ggml_used_mem(ctx)
# Reset
ggml_reset(ctx)
# Создать второй тензор такого же размера
b <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 5000000)
used_2 <- ggml_used_mem(ctx)
# Использованная память должна быть примерно одинаковая
expect_equal(used_1, used_2, tolerance = 100)
ggml_free(ctx)
})
test_that("ggml_reset works multiple times", {
ctx <- ggml_init(50 * 1024 * 1024)
for (i in 1:10) {
# Создать тензор
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1000000)
# Reset
ggml_reset(ctx)
# Проверить что память освободилась
expect_equal(ggml_used_mem(ctx), 0)
}
ggml_free(ctx)
})
test_that("ggml_reset enables memory reuse", {
# Более простой тест - просто показываем что после reset
# можно создать тензор того же размера
ctx <- ggml_init(30 * 1024 * 1024)
# Заполнить почти всю память
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 7000000) # ~27 MB
used_after_first <- ggml_used_mem(ctx)
free_after_first <- ggml_get_mem_size(ctx) - used_after_first
# Свободной памяти должно быть мало
expect_true(free_after_first < 5 * 1024 * 1024) # Меньше 5 MB
# После reset память освобождается
ggml_reset(ctx)
expect_equal(ggml_used_mem(ctx), 0)
# Можно снова создать большой тензор
b <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 7000000)
expect_type(b, "externalptr")
ggml_free(ctx)
})
test_that("ggml_reset with data operations", {
ctx <- ggml_init(50 * 1024 * 1024)
# Первая операция
a1 <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 100)
ggml_set_f32(a1, 1:100)
data1 <- ggml_get_f32(a1)
expect_equal(data1, 1:100)
# Reset
ggml_reset(ctx)
# Вторая операция (после reset можем переиспользовать память)
a2 <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 100)
ggml_set_f32(a2, 101:200)
data2 <- ggml_get_f32(a2)
expect_equal(data2, 101:200)
ggml_free(ctx)
})
test_that("ggml_reset works with large matrices", {
ctx <- ggml_init(100 * 1024 * 1024)
# Создать большую матрицу
m1 <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 1000, 1000)
used1 <- ggml_used_mem(ctx)
# Reset
ggml_reset(ctx)
expect_equal(ggml_used_mem(ctx), 0)
# Создать еще большую матрицу
m2 <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 2000, 2000)
used2 <- ggml_used_mem(ctx)
# Вторая матрица должна занять больше памяти
expect_true(used2 > used1)
ggml_free(ctx)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.