2024-11-08

vak: (Default)
Сводка еврейского погрома в Амстердаме на данный момент.
  • Несколько дней назад джихадисты в Нидерландах создали группы в Whatsapp и Telegram, где начали готовить погром на евреев в предверии годовщины «Хрустальной ночи».
  • Вчера ночью тысячи антисемитов устроили засады на выходах из отелей и футбольного стадиона, где находилось 2571 израильских болельщиков. Также они вышли на центральные улицы Амстердама в поисках евреев.
  • Сотни евреев линчевали, топили в реках, сбивали на машинах и ударяли ножами.
  • Десятки израильтян были ранены, и валялись без сознания на улицах Амстердама без медпомощи. Около 10-20 из них доставлены в больницы с тяжелыми травмами.
  • Количество пропавших без вести возросло до 13 израильтян. АПДТ: Все нашлись.
  • Точное количество пропавших и раненых в результате погрома, пока неизвестно, их количество постоянно растет.
  • Погром продолжался 9 часов, полиция Амстердама почти не реагировала и только под утро начала производить аресты, на этот час задержано 62 подозреваемых.
  • ЦАХАЛ запретил всем солдатам летать в Нидерланды «до дальнейшего уведомления». Полиция Израиля тоже запретила полицейским туда летать.
vak: (Кризис так себе)
"Thank you for this contribution. Unfortunately, as a project stewarded by Broadcom, we are unable to accept contributions from Russian sources due to Broadcom export policy at this time."

Это некто Ахтям Сакаев из компании «Яндекс» попытался заслать патч в проект Reactor. Но нет, российские программисты нынче под запретом. Бомбёжки украинских больниц и жилых домов аукиваются.
vak: (Default)
Выдавать Hello World на ассемблере научились, а давайте теперь сбацаем что-нибудь простое арифметическое. Факториал посчитаем, к примеру. Дело нехитрое.
        .text
factorial:
mv t0, a0 # Устанавливаем начальное значение счётчика
1: addi t0, t0, -1 # Уменьшаем счётчик в регистре t0
beqz t0, 2f # Если получился ноль, идём на выход
mul a0, a0, t0 # Умножаем регистр результата на счётчик
j 1b # На следующую итерацию цикла
2: ret # Возвращаем результат в регистре a0
Попробуем вызвать эту функцию и показать результат... Однако натыкаемся на проблему! Как напечатать целое число из ассемблера? Из Си это сделать нетрудно, есть развитая библиотека libc, а в ней printf(). Ничего подобного не существует для ассемблера. Попытка вызвать Си-шный printf() из ассемблера плохо заканчивается. Потому что библиотека libc не проинициализирована толком. Для этого нужно линковаться с crt0.o и прочей ерундой. Выходит слишком громоздко.

Единственный выход - написать все нужные процедуры печати на ассемблере. Что мы и сделаем. Начнём с печати целого десятичного беззнакового числа.
#include <sys/syscall.h>
.text
.globl print_uns
print_uns:
mv a2, sp # end
addi sp, sp, -32 # allocate buf
mv a1, a2 # ptr
li a3, 10 # base
1:
remu a5, a0, a3 # value % base
addi a1, a1, -1 # --ptr
addi a5, a5, 48 # + '0'
sb a5, 0(a1) # *ptr = character
mv a5, a0 # old value
divu a0, a0, a3 # value /= base
bgeu a5, a3, 1b # if (old value >= base) continue

sub a2, a2, a1 # end - ptr
li a0, 1 # stdout
li a7, SYS_write # write() system call
ecall

addi sp, sp, 32
ret
Понадобится также процедура печати произвольной текстовой строки.
#include <sys/syscall.h>
.text
.globl print_string
print_string:
addi sp, sp, -16 # allocate space in stack
sd ra, 0(sp) # save return address
sd a0, 8(sp) # save string pointer

call strlen
mv a2, a0 # byte count
ld a1, 8(sp) # restore string pointer
li a0, 1 # stdout
li a7, SYS_write # write() system call
ecall

ld ra, 0(sp) # restore return address
addi sp, sp, 16 # free space in stack
ret
Заметьте, чтобы напечатать строку, требуется сначала посчитать её длину. Делаем функцию strlen().
        .text
.globl strlen
strlen: # a0 = const char *str
addi t1, a0, 1 # ptr + 1
1:
lb t0, 0(a0) # get byte from string
addi a0, a0, 1 # increment pointer
bnez t0, 1b # continue if not end

sub a0, a0, t1 # compute length - 1 for '\0' char
ret
Ну и отдельная процедура для выдачи конца строки.
#include <sys/syscall.h>
.text
.globl print_newline
print_newline:
li a7, SYS_write # write() system call
li a0, 1 # stdout
la a1, newline # string
li a2, 1 # one character
ecall
ret
newline:
.string "\n"
Теперь можем соорудить вызов факториала и показать результат.
#include <sys/syscall.h>
.globl _start
_start:
ld a0, input
call print_uns

la a0, text
call print_string

ld a0, input
call factorial
call print_uns

call print_newline

li a7, SYS_exit # exit the program
li a0, 0 # status code
ecall

.align 3
input: .dword 20
text: .string "! = "
Компилируем, запускаем.
$ cpp factorial.S | as -o factorial.o -

$ cpp print_uns.S | as -o print_uns.o -

$ cpp print_newline.S | as -o print_newline.o -

$ cpp print_string.S | as -o print_string.o -

$ as -o strlen.o strlen.s

$ ld -o factorial factorial.o print_uns.o print_newline.o print_string.o strlen.o

$ file factorial
factorial: ELF 64-bit LSB executable, UCB RISC-V, double-float ABI, version 1 (SYSV), statically linked, not stripped

$ size factorial
text data bss dec hex filename
268 0 0 268 10c factorial

$ ./factorial
20! = 2432902008176640000
Всё работает как положено. Размер программы 268 байт. Но становится понятно, почему народ перестал программировать на ассемблере. Всякую мелось приходится делать самому: никаких полезных библиотек. Напомню, что всё это происходит под Ubuntu на процессоре PIC64.

Файлы можно взять здесь: github.com/sergev/vak-opensource/tree/master/languages/assembler/riscv
vak: (Робот 1)
На этой неделе наш стартап запустил новый онлайн-сервис для желающих попробовать главный наш продукт: чип для искусственного интеллекта. Сервис находится на Amazon Marketplace и называется Palette Edgematic.



Что это означает для простого сермяжного программиста? Можно за разумные деньги ($120 в месяц) получить доступ к софту, хардверу и коллекции ИИ-моделей. Сконструировать прототип вашего приложения, скомпилировать его, установить на одно из имеющихся в облаке устройств SiMa, позапускать его c вашими входными видеоданными, проанализировать производительность, поиграться с вариантами. Если у вас уже есть своя ИИ-модель - можно загрузить её в Edgematic, пропустить через компилятор, запустить на железе и глянуть эффективность.

Предполагается, что вы видите возможность применить нейронные сети / машинное обучение / искусственный интеллект в своём бизнесе. Считается, что основное направление - обработка видео потоков. Хотя необязательно видео: аудио или текст тоже приветствуется. Типовое приложение выглядит как камера (или несколько камер), посылающих видео в процессор (с Линуксом), который это дело обрабатывает и выдаёт некий осмысленный результат.

Обычно наши клиенты покупают у нас плату с чипом (Development Kit) и софтом, и программируют это дело по своему разумению. Но онлайн-сервис Palette Edgematic позволяет оценить наш продукт до всякой покупки. Сервис этот не то чтобы совсем новый. Он уже больше года доступен нашим приоритетным клиентам на сайте developer.sima.ai. Но теперь и широкая публика может приобщиться. Не из Китая или России, конечно.

На выбор предлагается коллекция из 250 моделей ИИ. Представлены все типовые группы, и все популярные модели, в том числе самые новые и модные. Приложение строится на базе Gstreamer, компонуясь из набора плагинов, как из кубиков. Всё под вашим контролем. Запустив построенное приложение и подав на вход нужный видеопоток - из коллекции или ваш собственный - можно глянуть результат.



Анализ эффективности даёт ориентировочные метрики производительности приложения, учитывая все задействанные хардверные компоненты: видеопроцессор, линуксный процессор, ИИ-процессор. К примеру:



Подробности смотрите в блоге: sima.ai/empowering-your-ai-vision-at-the-edge-with-palette-edgematic-software/
vak: (Украина)
(отсюда)

Оккупант Александр Полупанов записал видеообращение с мольбами о помощи. Ему единственному из своей группировки удалось выжить в мясном штурме.

"Пожалуйста, помогите мне. Я не знаю, что мне делать. Мой командир Ким, с которым я был на рации, приказал мне и еще 5 пацанам идти на штурм. Руководил нашими передвижениями с дрона. Вывел нас на открытую местность, где нас начали разъёбывать дроны. Первым умер Турист, потом услышал крики о помощи Мухи, Кинжала. В рацию сказали, что надо просто окопаться под деревом и сидеть, не двигаться, ждать дальнейших указаний… Никакой эвакуации не было. На следующий день я по рации услышал, что в моем направлении идут Зема и Ус. Услышал взрывы, понял, что по ним начали насыпать дроны. Зему порвало осколками, Усу посекло всю бочину. Дней 5-6 мы с Усом жили под одним деревом. К нам присоединился Темный из 61-й бригады, которого позже завалило в блиндаже. Я остался с двумя ранеными, которые не могли ходить. Ким забил на нас, не отправлял ни воды, ни еды. За эти две недели я не знаю, как выжил… Я решил их оставить. Командование, которое я даже не видел, говорило, что все будет хорошо, что нас эвакуируют. Но ничего не происходило. Пришлось оставить их. Дошел до какой-то деревушки… Я просто хочу жить, хочу вернуться домой."