Как стать автором
Обновить
9
0
Никита Черный @nikitablack

Программист на разных языках

Отправить сообщение

"Слои валидации" — как же ужасно звучит. Хотя перевод вроде бы правильный. Для получения сообщений отладки не обязательно регистрировать функцию, по умолчанию Layers выводят в stdout. Ну и с новым vkconfig все намного проще — теперь Layers можно контролировать из вне в удобном визуальном редакторе.

Я делаю не супер-сложный продукт, но и не просто демку. Еще я около 10 лет проработал в игровой индустрии, в том числе программистом графики. За все это время я ни разу не столкнулся с "багами GPU". Я не исключаю, что такое может быть, но когда мне говорят, что в каждая написанная демка работает некорректно и при этом обвиняют GPU — это звучит странно, и я почти уверен, что проблема в коде.

Я работаю с Вулканом уже несколько лет — мы разрабатываем кросплатформенный продукт с единственным поддерживаемым графическим АПИ. За все время я не столкнулся с багами лично ни разу. Все проблемы с некорректной работой были связаны с неправильным использованием АПИ. Являясь постоянным участником форумов/чатов я так же НЕ могу сказать, что сломанные драйверы частая тема обсуждений. В комментарии к приведенной проблеме о сломанных примерах DiligentSamples разработчик утверждает, что никто с подобной проблемой не обращался, т.е. это единичный случай, причиной может быть что угодно. Про отказ UE и Unity от Вулкана я не слышал, и гугл, видимо, тоже. На DigitalFoundry есть подробный рассказ о Doom Eternal, где рассказывается, что мощь движка кроется как раз в использовании Вулкана. Многгие мои стим-игры, которые я запускаю под линуксом, используют Вулкан, причем они транслируют dx вызовы и все работает. Рекомедую использовать современный АПИ всем и всегда.

Молодец, что сумел закончить проект и поделился историей. Necromancer Returns был у меня какое-то время в списке желаемого, но, увы, я так и не приобрел игру. Для меня причиной оказался внешний вид. Не хочу обижать, но те же третьи герои выглядят "интереснее", по-взрослому, чтоли. Так зачем в 2018м выпускать продукт, которая выглядит хуже игры двадцатилетней давности? Для меня лично картинка стоит на первом месте — я могу купить отлично выглядящую, но неинтересную игру. Но вряд ли наоборот.

Мы с командой ужасно недовольно быстродействием отладчика. К 10-секундным ожиданиям подгрузки переменной я как-то привык (шучу — не привык, бесит ужасно), но то, что дебаг сессия иногда вообще отваливается из-за доолгого ожидания, это уже перебор. Вы делаете что-нибудь в этом направлении?

std2::sort(p);

Что такое std2? Имелась ли ввиду библиотека ranges?

Объясните пожалуйста что означает этот код:


template < typename... Func >
class Visitor : Func... { using Func::operator()...; }
template < class... Func > make_visitor(Func...) -> Visitor < Func... >;

После объявления класса не стоит ;, поэтому это не скомпилируется. Почему, при объявлении параметров шаблона в одном месте использован typename, а в другом — class? И самое главное — что означает последняя строка? Выглядит как User-defined deduction guides, но не компилируется из-за неправильного синтаксиса.

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

Интересная статья, спасибо за труд. Объясните пожалуйста, зачем вы здесь вызываете std::move?


template <typename ... Ts>
constexpr decltype(auto) operator () (Ts && ... ts) &&
{
    return std::move(l)(std::move(r)(std::forward<Ts>(ts)...));
}
Т.е. функции move_money() и show_user_money_on_time() не были завершены и остановились навечно в deadlock. Решения есть 4:

Есть, по крайней мере, еще одно решение — std::lock().
Статья замечательная, респект за проделанную работу. Особое спасибо за оператор -> пишу на с++ много лет, но только сегодня узнал про «drill down behavior».
Геометрические шейдеры вроде как признаны устаревшими и не рекомендуются к использованию даже самими производителями видеокарт.
К тому же передача по значению не спасает от того, что вектор испортит другой поток в то время, как мы копируем его в нашу функцию.

Если соблюдать копирование при передаче, то изменение данных другим потоком исключена.
Мы вызываем по несколько malloc и free и копируем несколько мегабайт данных на каждый вызов каждой функции

Именно это и является проблемой производительности — согласно профайлеру 80% времени уходит на обслуживание вектора. Оптимизицая была отложена до следующей статьи.
Ranges я планирую применить в следующей статье.
Нет, о распараллеливании я планировал написать в следующий раз.
Да, вы правы, спасибо.
Да, действительно так лучше, спасибо. Я оставлю ссылку на оригинальный коммит, но в HEAD заменю на std::transform.
Хороший комментарий, спасибо. Хоть я и не писал об этом, но предполагается использование подобных врапперов для удобства. Если геттеры будут заинлайнены, то разницы в производительности не будет.
Опечатка. Исправил.
Многопоточный код одинаковый для обеих версий. В стандартной библиотеке нет возможности выставлять affinity, но не думаю, что в данном примере это повлияло бы. Тесты/профилирование проводил несколько раз. Но ошибки в коде не исключаю.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность