LINUX.ORG.RU

AMD представила библиотeку Anvil

 , , ,


3

5

Anvil — открытая (под лицензией MIT) кроссплатформенная библиотека-обёртка над графическим API Vulkan, созданная инженерами AMD с целью сокращения времени разработки Vulkan-приложений с нуля.

Anvil имеет поддержку специфических для AMD расширений, но работает на любой реализации Vulkan.

Библиотека предоставляет C++-врапперы, а также следующие дополнительные возможности:

  1. Распределитель памяти, который выделяет минимально необходимое количество памяти для указанных областей памяти, объектов и подресурсов из одной или нескольких куч памяти, в зависимости от возможностей платформы.
  2. Автоматическое управление жизненным циклом объектов, благодаря использованию автоматических указателей в библиотеке.
  3. Наборы дескрипторов автоматически создаются из созданных пользователем групп дескрипторов.
  4. Процедуры для преобразований чисел половинных и одинарных точностей (FP16 ↔ FP32).
  5. Встроенная поддержка валидации, которая может быть активирована путём изменения значения одного аргумента в момент создания экземпляра Vulkan.
  6. Интеграция с glslang для преобразования GLSL → SPIR-V во время выполнения.
  7. Отслеживатель объектов, который может использоваться для обнаружения утечек объектов враппера.
  8. Интеграция оконных систем, поддержка на данный момент ограничивается платформами XCB и Windows.

>>> GitHub

>>> Подробности

anonymous

Проверено: Shaman007 ()

Очередной костыль?

atsym ★★★★★ ()

То есть это враппер типа ToGL? Тогда ненужно

Sunderland93 ★★★★★ ()
Ответ на: комментарий от Sunderland93

Нет, это что-то вроде C++ обертки над OpenGL и разными сишными библиотеками.

Meyer ★★★ ()

АмудеGL вендорлок не нужен.

anonymous ()

Системные требования:Anvil версии n.n.n и новее.

aplay ★★★★ ()

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

alexmaru ()
Ответ на: комментарий от alexmaru

Стандартная библиотека Си тогда тоже не нужна! Развели тут оберток, вообще в маш.кодах писать надо! Ассемблер самый высокоуровневый пусть будет или его тоже под нож?

mandala ★★★★ ()
Ответ на: комментарий от mandala

Нужна одна прослойка, транслирующая скриптоту сразу в конфигурацию fpga/микрокод проца.

anonymous ()

Процедуры для преобразований чисел половинных и одинарных точностей (FP16 ↔ FP32).

Я конечно давно не писал на плюсах, но зачем тут отдельные процедуры?

NextGenenration ★★ ()
Ответ на: комментарий от alexmaru

Весь компьютерный мир это обёртка-n*(обёртка)-обёртка, где n >> до**я.

BceM_IIpuBeT ★★ ()
Ответ на: комментарий от NextGenenration

Ну если писать что-то серьезное, то проблем с точностью не избежать.

BceM_IIpuBeT ★★ ()

говно и ненужно.

скачиваешь какой-нибудь сэмпл, а он на говнообертках с ООП головного мозга, размазанный на кучу файлов.

x4DA ★★★★★ ()
Последнее исправление: x4DA (всего исправлений: 1)
Ответ на: комментарий от x4DA

Судя по описанию, как раз сокращает написание кучи однотипного С-кода.

staseg ★★★★★ ()

Звучит как GLUT! Напоминает NVIDIA Cg! Офигенская либа, упрощающая работу с шейдерами. Работает также и на AMD. Интересно, а продвигала ли NVIDIA свой Cg в OpenGL ARB, когда GLSL ещё не было? Просто интересно. Я не застал, но читал что выдвигалось несколько кандидатов на шейдерный язык OpenGL, но голосование каждый раз саботировалось.

ZenitharChampion ★★★★★ ()

Лол, на кой чёрт делать из Вулкана обратно OpenGL? Весь смысл вулкана исключительно в том уровне контроля, который невозможен с обёртками. Впрочем, хуже от новых сущностей не будет, может, кому и пригодится.

anonymous ()
Ответ на: комментарий от NextGenenration

Видяшка нативно понимает флоты с половинной точностью, IEEE 754-2008 смысл в экономии памяти, но данные из флотов в них преобразовываются не простым кастом, это же флоты, надо мантиссу и экспоненту преобразовывать и учитывать крайние случаи.

anonymous ()
Ответ на: комментарий от ZenitharChampion

Да, потому и продвигала. Нвидиа исторически пионеры шейдеров, сначала они писались через register combine, потом на вендор-специфик гласм, нвидия это решила объединить и выкатила аналог hlsl. И вот бы ему взлететь вместо всего, но нет.

anonymous ()
Ответ на: комментарий от BceM_IIpuBeT

Вот просто интересно: f16 -> f32 - откуда брать недостающее? f32 -> f16 - куда складывать не влезшее?

NextGenenration ★★ ()
Ответ на: комментарий от anonymous

Тамщет здравая мысль. Ты начинаешь с хайлевела и по мере надобности спускаешься ниже.

Stil ★★★★★ ()
Ответ на: комментарий от NextGenenration

Разве компилятор не делает этого из коробки?

В стандарте C нет чисел с половинной точностью. Есть только float (32бита), double (64бита) и long double (80бит).

pftBest ★★★★ ()
Ответ на: комментарий от alexmaru

Anvil is not the right choice for developers who do not have a reasonable understanding of how Vulkan works. Its goal is not to provide a glBegin/glEnd-like level of abstraction, but rather to give a sensible environment, in which you can rapidly prototype Vulkan applications.

CYB3R ★★★★★ ()

Всё тлен. Надо было сразу нанимать мистера Дуба, штоп напейсал трижеес для нодежеес. Пишешь такой нев Меш(нев ЦубеГеометри(2), нев ФонгМатериал(...)); а оно на десктопе через вулкан исполняется

TooPar ()
Ответ на: комментарий от NextGenenration

В Полярисах что-то вроде отдельной поддержки с вычилсениями половинной точности на уровне железа.

LittleKawaiiNeko ()
Ответ на: комментарий от mandala

нет, просто иногда в обёрточности нужно останавливаться.

alexmaru ()
Ответ на: комментарий от alexmaru

лучше так чем: я чёт посмотрел в доки вулкана нихера не понял такшт пойду делать на дх12..

Thero ★★★★★ ()

Срочно техников в блок News! Тут криокамера потекла!

Этой библиотеке наверное год уже исполнился с момента релиза.

Quasar ★★★★★ ()
Последнее исправление: Quasar (всего исправлений: 1)

Anvil имеет поддержку специфических для AMD расширений, но работает на любой реализации Vulkan.

Поделил на ноль. Либо поддерживает специфические расширения и не работает на других видеокартах, либо расширения не специфические.

Quasar ★★★★★ ()
Ответ на: комментарий от atsym

Это для тех, кто не хочет писать на Vulkan с нуля, вписывая рутинные операции. Эдакий преддвижок.

Quasar ★★★★★ ()
Ответ на: комментарий от anonymous

AMD вендорлоком не занимается принципиально, в отличие от невидии, которая принципиально делает вендорлок и зажимание спецификаций.

Quasar ★★★★★ ()
Ответ на: комментарий от alexmaru

alexmaru> это самый бред, когда обёртка-обёртка-обёртка

Выкинь тогда C++ и переходи на C. Хотя нет. Выкинь и C тоже - пиши на ассемблере... нет - всё равно обёртка. Только в машинных кодах! Без мнемоники! Блин, да и это как-то слишком заабстрагированно выходит. На электронной логике надо кодить - никак иначе. Хм... А если неэффективно транзисторы используются?.. Не, надо на транзисторах сразу делать всё. И т.д.

Quasar ★★★★★ ()
Ответ на: комментарий от anonymous

anonymous> Нужна одна прослойка, транслирующая скриптоту сразу в конфигурацию fpga/микрокод проца.

Verilog же.

Quasar ★★★★★ ()
Ответ на: комментарий от NextGenenration

Отдельные процедуры для того, чтобы эффективно пользоваться аппаратными возможностями. Сейчас широко используется FP32. Но для повышения производительности на той же пропускной способности имеет смысл использовать FP16, а то и FP8. Эффект как от увеличения шины вдвое. Архитектура GCN поддерживает FP16. А в новом GCN, где используются модули NCU, ядра легко переконфигурируются и перегруппируются для использования любого формата FP: 8, 16 и 32. Ну а то, что невидия не может в современную архитектуру GPU и на FP16 у неё дикий оверхед - это уже её проблемы.

Quasar ★★★★★ ()
Ответ на: комментарий от anonymous

anonymous> Лол, на кой чёрт делать из Вулкана обратно OpenGL?

Они и не делают. С другой стороны враппер из OpenGL в Vulkan не помешал бы, но у этих API слишком разные подходы для простой реализации такого враппера.

anonymous> Весь смысл вулкана исключительно в том уровне контроля, который невозможен с обёртками.

Конкретно эта обёртка не отменяет использование низкоуровневых возможностей. Более того - они в ней представлены.

Quasar ★★★★★ ()
Ответ на: комментарий от LittleKawaiiNeko

Насколько мне известно, она есть на аппаратном уровне ещё с GCN 1.0 .

Quasar ★★★★★ ()
Ответ на: комментарий от Thero

На DirectX12 писать не проще, да и выхлоп от этого куда меньше, чем от Vulkan. Об этом и разработчики Star Citizen писали публично уже, поэтому они сейчас выкидывают поддержку DirectX 12 окончательно и бесповоротно, а имеющийся код быстро и ненапряжно переводят на Vulkan.

Quasar ★★★★★ ()
Ответ на: комментарий от Quasar

Star Citizen

имеющийся код

Нет никакого кода.

anonymous ()
Ответ на: комментарий от Quasar

Речь о поддержке данных во входном буфере чтобы стопицот миллиардов вершин в видеопамять грузить.

Вычислений в fp16 нет (конкретно у амудэ GPU для вычислений поддерживает только f32, i32 и f64),для fp16 только инструкции для конвертации.

anonymous ()

Библиотека наверное подойдёт как рабочий пример для тех, кто хочет понять как работает вулкан. Проблем с тем, что это прослойка, не вижу, просто обернуть вызовы в C++ никак не ударит по производительности, если это сделать правильно. Другое дело, что современное API имеет смысл оборачивать только в современный C++, а у них там какая-то каша.

1. Нигде нет спецификаторов noexport.

2. Они точно умеют в C++? static bool reset_fences(const uint32_t n_fences, Fence* fences);

3. Расскажите уже им кто-нибудь про = delete

private:
    Fence (const Fence&);
    Fence& operator=(const Fence&);

4. Разделяемые объекты в методы передаются по значению, а не по константным ссылкам.

5. Си головного мозга: typedef enum { ... } PipelineLayoutCallbackID;

6. Про инициализацию нестатических переменных они не знают.

7. Ну и стиль оформления, я конечно разное видел, но это нечто, выравнивание везде где к месту и нет:

    new_buffer_ptr->m_memory_block_ptr = Anvil::MemoryBlock::create_derived             (parent_nonsparse_buffer_ptr->m_memory_block_ptr,
                                                                                         start_offset,
                                                                                         size);
    new_buffer_ptr->m_queue_families   = parent_nonsparse_buffer_ptr->get_queue_families();
    new_buffer_ptr->m_sharing_mode     = parent_nonsparse_buffer_ptr->get_sharing_mode  ();
    new_buffer_ptr->m_usage_flags      = parent_nonsparse_buffer_ptr->get_usage         ();

8. operator bool? Не слышали. if ( (parent_ptr = result_ptr->get_parent_buffer_ptr()) != nullptr)

При этом видно, что C++11 они таки используют, что вызывает недоумение.

Dendy ★★★★★ ()
Ответ на: комментарий от Dendy

1. и что? 2. производительность 3. чем меньше 11, тем лучше для переносимости. В этом месте пользы от delete никакой 4. м - многопоточность 5. жить мешает? 6. см. п2 7. на любителя 8. это чтобы не выглядело как ошибка с ==, в том числе для статических анализаторов

anonymous ()
Ответ на: комментарий от anonymous

Он всегда набрасывает в тред несколько последовательных постов с вздором, а потом чаще всего убегает.

anonymous ()
Ответ на: комментарий от anonymous

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

anonymous ()
Ответ на: комментарий от Quasar

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

Thero ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.