The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"В драйвер PanVK добавлена поддержка Vulkan 1.4"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от opennews (??), 30-Июл-25, 08:54 
Компания Collabora объявила о реализации в Vulkan-драйвере PanVK поддержки графического API Vulkan 1.4 для устройств с GPU ARM на базе архитектуры V10, таких как Mali-G610 и Mali-G310. Изменения включены в кодовую базу Mesa и будут предложены пользователям в выпуске Mesa 25.2,  находящемся на стадии кандидата в релизы. В текущем стабильном выпуске Mesa 25.1 в PanVK поддерживается лишь версия Vulkan 1.2...

Подробнее: https://www.opennet.dev/opennews/art.shtml?num=63643

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Аноним (1), 30-Июл-25, 08:54 
Интересно, на сколько реально увидеть десктопы с CPU ARM и главное GPU Mali? Почему не делают дешевые видеокарточки, на mali для десктопа?
Ответить | Правка | Наверх | Cообщить модератору

2. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Karl Richter (ok), 30-Июл-25, 09:16 
Почему Mali, а не Adreno?
Ответить | Правка | Наверх | Cообщить модератору

9. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Аноним (9), 30-Июл-25, 10:09 
>Adreno

В ноутах на Snapdragon X
https://www.techpowerup.com/cpu-specs/?f=mfgr_Qualcomm

Ответить | Правка | Наверх | Cообщить модератору

23. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Karl Richter (ok), 30-Июл-25, 14:36 
Ну вот, пока только процессоры от Qualcomm.
Ответить | Правка | Наверх | Cообщить модератору

3. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от name (??), 30-Июл-25, 09:18 
Одноплатников море, покупай, смотри.
Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

4. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +1 +/
Сообщение от Аноним (4), 30-Июл-25, 09:20 
Он хочет нормальный процессор на 100+ ватт TDP, что непонятно?
Ответить | Правка | Наверх | Cообщить модератору

6. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +4 +/
Сообщение от Аноним (6), 30-Июл-25, 09:47 
Видеоускорение там в .... плачевном состоянии. Там где смартфоны выдают сотни тысяч попугаев эти твои платники только нагревают атмосферу.
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

8. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +3 +/
Сообщение от name (??), 30-Июл-25, 09:55 
Железо одноплатников отстаёт на 10 лет от смартфонов. Зато драйвера есть.
Ответить | Правка | Наверх | Cообщить модератору

14. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от _kp (ok), 30-Июл-25, 12:02 
Одноплатники есть и на Intel и AMD, которые не отстают не десятилетия.

Сейчас скажут, что у тормозных ARM есть gpio. Так он не для всяких задач нужен, но есть и одноплатники на intel с gpio сопроцессором.

Ответить | Правка | Наверх | Cообщить модератору

18. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от name (??), 30-Июл-25, 13:13 
Запрос был посмотреть десктоп на арм с мали, дешёвые одноплатники для этого отлично подходят. Есть железо от apple, которое не так отстаёт, но и стоит хорошо.
Ответить | Правка | Наверх | Cообщить модератору

19. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Аноним (1), 30-Июл-25, 13:22 
Ну одноплатники это хорошо, но я имел ввиду почему не делать те же Mali но для разъёма PCIe.
Ответить | Правка | Наверх | Cообщить модератору

10. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Аноним (9), 30-Июл-25, 10:31 
Но например в Raspberry Pi там VideoCore:
https://en.wikipedia.org/wiki/VideoCore
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

13. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от _kp (ok), 30-Июл-25, 11:38 
>> Почему не делают дешевые видеокарточки, на mali для десктопа?

Потому что даже древняя HD4000, по функциям лучше чем MALI. Да и по производительности они почти на равных. А уж более свежие Intel встройки UHD ещё лучше и дешевые.
А если встройки Райзенов рассматривать, типа 760М, то на них и поиграть можно.
В общем, MALI - не нужен.

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

25. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Аноним (25), 30-Июл-25, 14:48 
Рабочий стол же отрисовывает? Многим больше и ненадо. За 500 р. купил бы.
Ответить | Правка | Наверх | Cообщить модератору

26. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Аноним (25), 30-Июл-25, 14:49 
Рабочий стол же отрисовывает? Многим больше и ненадо. За 500 р. купил бы.
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

21. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Аноним (21), 30-Июл-25, 13:42 
> Почему не делают дешевые видеокарточки, на mali для десктопа?

А дрова к ним кто напишет?

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

24. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Аноним (25), 30-Июл-25, 14:39 
Смотрите, завидуйте... :)
https://itinti.ru/catalog/rossiyskie_kompyutery/es607_monobl...
Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

7. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +/
Сообщение от Аноним (7), 30-Июл-25, 09:52 
...а для Mali T720 делать поддержку OpenGL 3.0 так никто не собирается.
Ответить | Правка | Наверх | Cообщить модератору

11. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +3 +/
Сообщение от Фняк (?), 30-Июл-25, 11:05 
А зачем инвестировать в драйвер для умирающего API?
Ответить | Правка | Наверх | Cообщить модератору

12. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  –1 +/
Сообщение от Аноним (12), 30-Июл-25, 11:16 
какое отношение биологических особей к абстракциям интерфейсов IT?
Ответить | Правка | Наверх | Cообщить модератору

22. "В драйвер PanVK добавлена поддержка Vulkan 1.4"  +1 +/
Сообщение от Аноним (22), 30-Июл-25, 13:59 
Я недавно обнаружил, что некоторые люди, которым мы доверяем производительность операций с GPU на стороне процессора,.. не умеют или не всегда хотят верно бенчмаркить.

Вот их бенчмарк: https://github.com/vkmark/vkmark (анализ для коммита 2c5f020005a597fb4b7d9ed1eaa1bf40e466bf01, все лицензии на код находятся в соответствующих репозиториях)

>vkmark offers a suite of scenes that can be used to measure various aspects of Vulkan performance.

https://www.collabora.com/news-and-blog/blog/2017/07/18/vkma.../

>A few years ago we were pleasantly surprised to learn that developers were using glmark2 as a testing tool for driver development, especially in free (as in freedom) software projects. This is a goal that we want to actively pursue for vkmark, too.

Давайте посмотрим, как эти понтовые заявления соотносятся с реальностью.

```c++
// With a lot of contractions
class Scene
{
public:
...
    virtual bool is_valid() const;
...
    virtual VulkanImage draw(VulkanImage const&);
...
    virtual void update();
...
    unsigned int average_fps() const;
...
};
```

1. Виртуальные функции, Карл!
2. `unsigned int average_fps() const;` - СРЕДНЕЕ. FPS.
3. Функции не являются inline. И не force-inlined.

```c++
scene.start();

while (scene.is_running() &&
        !(should_quit = ws.should_quit()) &&
        !should_stop)
{
    ws.present_vulkan_image(
        scene.draw(ws.next_vulkan_image()));
    scene.update();
}

auto const scene_fps = scene.average_fps();

log_scene_fps(scene_fps);
```

Где находятся функции (в отдельном translation unit):

```c++

void Scene::start()
{
    current_frame = 0;
    running = true;
    start_time = Util::get_timestamp_us();
    last_update_time = start_time;
}

unsigned int Scene::average_fps() const
{
    return last_update_time > start_time ?
        current_frame * 1000000 / (last_update_time - start_time) : 0;
}

bool Scene::is_running() const
{
    return running;
}


VulkanImage Scene::draw(VulkanImage const& image)
{
    return image.copy_with_semaphore({});
}


void Scene::update()
{
    auto const current_time = Util::get_timestamp_us();
    auto const elapsed_time = current_time - start_time;

    ++current_frame;

    last_update_time = current_time;

    if (elapsed_time >= duration)
        running = false;
}

void log_scene_fps(unsigned int fps)
{
    auto const fmt = Log::continuation_prefix + " FPS: %u FrameTime: %.3f ms\n";
    Log::info(fmt.c_str(), fps, 1000.0 / fps);
    Log::flush();
}

uint64_t Util::get_timestamp_us()
{
    struct timespec ts;
    clock_gettime(CLOCK_MONOTONIC, &ts);
    uint64_t const now = static_cast<uint64_t>(ts.tv_sec) * 1000000 +
                        static_cast<uint64_t>(ts.tv_nsec) / 1000;
    return now;
}

```

ОК, предположим, что компилятор и линковщик достаточно умны, чтобы их заинлайнить, поэтому давайте заинлайним их вручную, и глянем, что получается...

```c++
current_frame = 0;
running = true;
start_time = Util::get_timestamp_us();
last_update_time = start_time;

while (running &&
        !(should_quit = ws.should_quit()) &&
        !should_stop)
{
    auto image = ws.next_vulkan_image();
    VulkanImage draw_result = image.copy_with_semaphore({});
    ws.present_vulkan_image(draw_result);

    struct timespec ts;
    clock_gettime(CLOCK_MONOTONIC, &ts);
    uint64_t const current_time = static_cast<uint64_t>(ts.tv_sec) * 1000000 + static_cast<uint64_t>(ts.tv_nsec) / 1000;
    uint64_t const elapsed_time = current_time - start_time;

    ++current_frame;

    last_update_time = current_time;

    if (elapsed_time >= duration){
        running = false;
    }
}

unsigned int const scene_fps =     last_update_time > start_time ? current_frame * 1000000 / (last_update_time - start_time) : 0;

auto const fmt = Log::continuation_prefix + " FPS: %u FrameTime: %.3f ms\n";
Log::info(fmt.c_str(), scene_fps, 1000.0 / scene_fps);
Log::flush();
```

1. Мы измеряем не FPS, а время. Но... они сначала вычисляют FPS из времени, усекают его до целого числа, затем время из FPS, и также усекают его. Это была проблема, которую я заметил первой, что заставило меня покопаться в этом.
2. Они используют `clock_gettime` вместо `__rdtsc` + `_mm_lfence` для получения точных тиков ЦП. Ни один разумный микро-бенчмарк не полагается на время, предоставляемое через системные вызовы.
3. В коде измерения времени - ненужные операции.
4. Мы видим ненужные операции между точками, где мы получаем время. В идеале `ws.present_vulkan_image(scene.draw(ws.next_vulkan_image()));` должно быть сендвичем между двумя гаджетами

```c++
_mm_lfence();
const uint64_t current_time = __rdtsc();
_mm_lfence();
```
.

6. Вместо измерения времени отдельных операций, они проводят бенчмаркинг в течение заранее заданного периода времени. Это противоположно тому, как обычно делают бенчмаркинг.
7. Они вычисляют средний FPS, используя `last_update_time - start_time` в качестве времени, а не сумму точных интервалов.
8. Никакой коррекции систематической погрешности, вносимой самими инструкциями измерения времени.

Мы просто предположили инлайнинг, но разумеется, компиляторы не настолько умны для этого. Для правильного бенчмаркинга им понадобится `MainLoop` в качестве шаблона и предоставление реализаций сцен в качестве аргументов шаблона, тогда компилятор заинлайнит реализацию прямо в горячий цикл.

Так что утверждение о том, что этот бенчмарк можно использовать каким-либо образом для чего-либо полезного, не выдерживает никакой критики.

Вот небольшой патч https://0x0.st/8kvd.patch , просто запихивающий `__rdtsc` туда, без каких-либо других необходимых изменений этого. И график гистограммы (нормализованной до плотности вероятности) времен (оставлен только первый пик, и на самом деле измерения расположены с 8 тиками, так что 8 тиков с количеством 0, затем тик с количеством, а затем снова 8 тиков с количеством 0 и тик с количеством) и соответствующая kernel density estimation. 2 изображения, одно в крупном масштабе, другое увеличено возле моды распределения, обратите внимание, что счетчики гистограммы очень шумные, более чем в два раза больше моды на ее пике. Команда была `./src/vkmark -D <device uuid> -p immediate -b effect2d:kernel=none:duration=4200000 --run-forever > results.txt`, после чего парсинг скриптом.

Вот что вам нужно знать об инженере из Collabora, который это разработал.

О, может быть, другие бенчмарки дадут лучшие результаты? Я нашел `https://github.com/RippeR37/GL_vs_VK` (коммит 735d153f7d85b7ce8d7097e89e877304ee23180b) , понтовую часть Phoronics Test Suite.

>This project is part of my master-thesis and aims to compare OpenGL and Vulkan API in terms of API-related overhead.

Если вы думаете, что этот бенчмарк отличается... нет, он в основном повторяет те же ошибки (за исключением виртуальных функций): неиспользование `rdtsc` напрямую (вместо этого он использует `glfwGetTime` из динамической библиотеки, определенной как
```c++

GLFWAPI double glfwGetTime(void)
{
    _GLFW_REQUIRE_INIT_OR_RETURN(0.0);
    return (double) (_glfwPlatformGetTimerValue() - _glfw.timer.offset) / _glfwPlatformGetTimerFrequency();
}
```

где

```c++
uint64_t _glfwPlatformGetTimerValue(void)
{
    struct timespec ts;
    clock_gettime(_glfw.timer.posix.clock, &ts);
    return (uint64_t) ts.tv_sec * _glfw.timer.posix.frequency + (uint64_t) ts.tv_nsec;
}
```
- да, те же яйца, только в профиль), фактический вызов получения времени находится в отдельной функции в отдельном translation unit, а не заинлайнен в нужное место.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру