Vulkan Learning — 3. Swapchain. Depth Buffer. Render Pass. Framebuffers

Речь пойдет об инфраструктуре предназначенной сугубо для отрисовки и отображения графики на экране. Напомним, что отрисовка изображения суть присваивание значений всем его пикселям. Изображение хранится в оперативной памяти, а, будучи отрисованным, отображается на экране монитора. Участок памяти, в котором хранится изображение, часто называется фреймбуфером. Традиционно используется как минимум два фреймбуфера — один из них отображается на экране а то время как GPU рисует изображение в другом, после чего фреймбуферы меняются местами (swap). Это называется двойная (потому что буферов два) буферизация. Читать дальше …

Vulkan Learning — 2. Поверхность. Физический прибор. Логический прибор. Очереди команд

Поверхность (Surface) Следующий шаг после создания Instance — создание поверхности (Surface). Vulkan использует абстракцию Surface для представления нативной оконной подсистемы имеющейся операционной системы. В каждой операционной системе имеется своя функция для создания поверхности и, соответственно, свое расширение (extension), частью которого является эта функция. Для Windows существует расширение VK_KHR_win32_surface. Однако поддержка поверхностей как таковых сама является расширением (поскольку не во всех случаях графику нужно выводить на экран — см. offscreen rendering) — VK_KHR_surface. // THE FOLLOWING IS PSEUDOCODE! // Field vk::SurfaceKHR Читать дальше …

Vulkan Learning — 1. Установка. Инициализация. Instance. Отладка

Недавно я завершил прохождение видеокурса по Vulkan, и спешу законспектировать информацию, пока она не выветрилась из моей дырявой головы. Литература Vulkan Tutorial LunarG Vulkan Samples Tutorial API without Secrets: Introduction to Vulkan by Pavel Lapinski Understanding Vulkan Objects Vulkan Guide Writing an efficient Vulkan renderer Samsung GameDev Resources Vulkan Specification Мой репозиторий для поделок на Vulkan Установка Vulkan SDK Скачивается с сайта LunarG. Кроссплатформенный SDK, переносим на разные платформы на уровне исходного кода (в коде присутствуют директивы условной компиляции). Включает Читать дальше …

Very Large Scale Integration CAD — Part I — Logic

Это конспект очередного курса, который я прошел на Coursera. Курс называется VLSI CAD Part I: Logic от Иллинойсского университета в Урбане-Шампейне. Автор курса — Rob A. Rutenbar. Курс посвящен комбинационной логике: минимизации логических функций, оптимизации логических схем и пр. Ниже, как обычно, краткий набор ключевых слов и тезисов, которые помогут мне (или тому, кто пройдет этот курс) быстро восстановить его в памяти. Shannon Cofactors Fx Fx’ Shannon Expansion F = x*Fx + x’Fx’ dF/dx = Fx XOR Fx’ universal quantification Читать дальше …

Про страх

Последнюю неделю все мои мысли заняты тем, что происходит в Беларуси. Каждый день я вижу кадры, где белорусский ОМОН зверски избивает мирных граждан. Задержанные люди, которых отпустили, рассказывают о пытках и избиениях беззащитных людей. Эти видео иногда вызывали у меня чувство дурноты и дрожь. У посольства Республики Беларусь в Москве каждый вечер собираются и белорусы, и русские. Образовался народный мемориал из цветов и свечей, который теперь ежедневно зачищают коммунальщики и полиция. Я думал о том, чтобы прийти к посольству уже Читать дальше …

Шпаргалка по Linux для чайников

Заранее прошу прощения у опытных пользователей Linux, если допустил где-то ляпы… Что взять с чайника? 🙂 В тексте ниже в качестве приглашения (prompt) используется символ доллара. Package Management Разные дистрибутивы Linux включают в себя разные пакетные менеджеры. Например: — Debian — apt-get — RedHat — dnf или yum О том, что такое пакетные менеджеры, читайте статью Linux Package Management. Утилиты вроде apt-get и dnf — более высокоуровневые — они не заставляют пользователя указывать точную версию пакета и они сами устанавливают Читать дальше …

From Nand To Tetris — Как построить компьютер с нуля

В связи с карантином я открыл для себя платформу Coursera и в короткий срок прошел там уже несколько довольно объемистых курса. Один из них From Nand To Tetris (далее буду для краткости называть его N2T) осуществил одну из моих мечт — спроектировать компьютер с нуля (или хотя бы почувствовать как это) — об этом я задумывался, когда читал книжку Эндрю Таненбаума «Архитектура компьютера». Кстати, по моему, идеологически курс N2T близок книжке Таненбаума, но курс, в отличие от книжки — проектно-центрированный, Читать дальше …

Трудовая автобиография

Эта заметка предназначается, потенциальным работодателям — ссылку на нее я разместил в своих резюме. Но может, и широкому читателю будет интересно (т. е. если сюда забредет кто-то из моих студентов). Поехали. В 2010-м году я окончил (с отличием) кафедру Микроэлектроники Московского Инженерно-Физического Института. Будучи студентом-дипломником, я занимался исследованием радиационной стойкости транзисторов, усилителей и прочих аналоговых устройств. Проводил эксперименты, делал расчеты в системе компьютерной алгебры Wolfram Mathematica, писал статьи. Чтобы как-то автоматизировать лабораторные эксперименты, изучал программирование на C/C++ и написал тогда Читать дальше …

Краткий опыт использования ML.NET (Machine Learning Framework от Microsoft)

Пройдя недавно курс по машинному обучению, я отправился на поиски готовых библиотек — в первую очередь — для платформы .NET, так как я именно ее использую на своей работе. Запрос в гугл «Machine Learning + .NET» немедленно дал ссылку на фреймворк ML.NET, который сейчас имеет статус «preview». Здесь вкратце опишу, как я попробовал его использовать для классификации изображений. Создание модели ML.NET, насколько я успел понять, одной из своих целей имеет обеспечение очень высокого уровня абстракции для неискушенных в машинном обучении Читать дальше …

Machine Learning

Недавно я прошел 11-недельный курс Machine Learning на платформе Coursera. Курс великолепен. Чтобы помочь себе вспомнить материал через много лет, я решил написать краткий конспект, состоящий преимущественно из ключевых слов, поэтому текст ниже будет понятен, скорее всего, только тем, кто сам прошел этот курс. Supervised learning algorithms Постановка задачи. Есть входные переменные (x), от которых предположительно зависит выходная переменная (y). Есть набор данных, для которых известны конкретные значения (x) и (y). Цель — найти такую функцию, которая максимально точно будет Читать дальше …