Pull to refresh
12
0
Роман Дудин @dudinroman

Программист

Send message

Почти. Скалярных целочисленных ALU действительно четыре. А вот векторных три (см. опять же диаграму на wikichips "INT Vect ALU" либо инструкцию padd на uops.info)

Ну вот зачем писать, если сами не разбираетесь? В современных x64 ядрах по два функциональных устройства для сложения-умножения чисел с плавающей точкой, а не "минимум 3-4". Вы можете в этом убедиться, посмотрев диаграму ядра Skylake (https://en.wikichip.org/w/images/7/7e/skylake_block_diagram.svg), и поискав там прямоугольнички с текстом "FP FMA". Либо можете зайти на uops.info (https://uops.info/table.html), и увидеть что на всех современных микроархитектурах у сложения пропускная способность 0.5 (то есть они делают два сложения за такт).

Автор статьи верно утверждает, что такая конструкция поддается векторизации, потому что понимает, что использование четырех независимых аккумуляторов никак не связано с векторизацией. Действительно, те самые "FP FMA" - это векторные устройства, которые могут складывать по 128/256/512-битному вектору за раз. Вот так будет выглядеть этот цикл, если его векторизовать (для примера используем SSE):

__m128 sum0 = _mm_setzero_ps();
__m128 sum1 = _mm_setzero_ps();
__m128 sum2 = _mm_setzero_ps();
__m128 sum3 = _mm_setzero_ps();

for (int i = 0; i < 1024; i += 16) {
    _mm_add_ps(sum0, _mm_load_ps(a + i + 0));
    _mm_add_ps(sum1, _mm_load_ps(a + i + 4));
    _mm_add_ps(sum2, _mm_load_ps(a + i + 8));
    _mm_add_ps(sum3, _mm_load_ps(a + i + 12));
}

_mm_add_ps(sum0, sum1);
_mm_add_ps(sum2, sum3);
_mm_add_ps(sum0, sum2);

// TODO: складываем четыре линии sum0, получаем результат

Наконец, почему именно четыре аккумулятора? Я вообще не понял что вы написали (да вы и сами не поняли, скорее всего). Настоящий ответ тут такой: в Skylake (опять же, для примера) сложение имеет глубину конвейера, равную четырем (см uops.info), то есть одновременно "in-flight" может находится четыре сложения, и в таком случае конвейер будет полностью загружен. Однако, так как функциональных устройства два, правильнее будет использовать восемь аккумуляторов. У какого-нибудь Zen2, например, латентность уже три, а не четыре, а значит аккумуляторов нужно делать шесть.

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


WinSxS redirect (aka “DotLocal”).

Это не "aka", а лишь один из способов. Не освещен другой механизм: ApiSetSchema — набор маршрутов загрузки dll по спец именам (типа api-ms-win-core-errorhandling-l1-1-0.dll), присутствующий в Win7 и выше. Тут хайджекинг не сработает.

В чем проблема, на что ругается? Я привел универсальный способ, введите 320 вместо 325 и должно все сработать.

В теории — да.


Device Tree исходник — arm-soc/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts

В данном случае разработчики OMV озаботились поддержкой только systemd, увы.


http://packages.openmediavault.org/public/dists/erasmus/main/binary-armel/Packages


Package: openmediavault
Version: 3.0.76
Architecture: all
Maintainer: Volker Theile volker.theile@openmediavault.org
Installed-Size: 6364
Depends: ..., systemd, systemd-sysv, ...
Нет, kwboot подходит для всего, где есть U-Boot.

Кто-то уже пытался, кстати: http://orangepi.pp.ua/index.php?topic=565.0
На то она и бета, буду отлавливать баги и связываться с разработчиками.
Можно, но во некоторых местах процедура будет отличаться. Например, поддержку другого чипа надо включить в ядре, вентилятор по другому настроить. В статье старался делать рассуждения и расписывать как правильно прийти к конкретным конфигам.

Но тут я согласен, такие эксперементы лучше проводить с настроением «или на свалку», ибо если это рабочий инструмент, убить его ненароком труда не составит :)
Работал с тем, что было на руках. Насколько я знаю, D-Link DNS-325 вообще популярная модель и мини статей по тюнингу уже много накопилось в сети, вот и решил показать что вообще можно сделать глобально.

Был бы Synology, тюнили бы Synology :)
По поводу скриптов — согласен, надо было идеологически правильно разместить. Не критично.

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

Про tmpfs тоже была идея в контексте постоянно пишущегося лога, но я решил этого не делать в следствие итак малого размера RAM + сейчас необходимо вести все логи чтобы ловить глюки OMV и чтобы они были доступны даже после ребута. По сравнению с логами, обновление температуры в файле нестрашно. Пока OMV в бете, часто приходится делать apt upgrade. Ну и, как я уже писал, иногда опять приходится включать что-то в ядре, перекомпиллировать и подкладывать ядро.

А вот с overlayfs идея крутая, возьму на заметку, в идеологии решает много проблем.

Когда приду к стабильной по всем параметрам системе, подберу идеальную конфигурацию, сделаю готовый образ или скрипт для его формирования.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity