Pull to refresh
4
0
Yuri Klimov @yuklimov

User

Send message
Не хватает учета изменения стоимости денег — инфляции. 10млн.руб. сегодня и через 10 лет — это разные суммы.
Спасибо! Выкладывайте и на Хабр, пожалуйста! По всему: и клещам, и комарам, и…
Интересно. Но 30х40см — не так уж и компактно, при размере мат.платы 17х17см. Хоть сам и ответил, что интересней собрать самому, но т.к. MiniITX платы не блещут разнообразием, если заточитесь под какую-нибудь одну достаточно универсальную мат.плату, но сделаете существенно компактней корпус (скажем, 20х20см), то куплю.
P.S. Блок питания предпочитаю внешний ;).
P.P.S. У меня уже почти 8 лет круглосуточно работает Intel i3-2120 с большим пассивным радиатором Thermalright Macho в ATX-овском корпусе (блок питания безвентиляторный снизу, в корпусе никаких вентиляторов нет). Но теперь хочется чего-то более компактного.

Например в Китае. В командировках по openvpn попасть на машину в России не представляется возможным. А по ssh — работает.

Это которые тесты в репозитории? Вижу знакомые слова.

Да, тесты в файле test.xsg. Там синтаксис не такой, как в статье. В статье более научно-принятый, а в test.xsg — более удобный. Сразу отмечу, что функции имеют и арность, и коарность, но т.к. они заданы, то скобки для правильной и единственной интерпретации выражений не нужны.

А в чем состоит Driving task?

К сожалению, уже не помню в чем был смысл задачи… Формально надо найти все строки, которые удовлетворяют соотношению:
strX++strQ++'B'+c++strP++'A'++strY = strY++strQ++'A'++c++strQ++'B'++strX (где ++ — конкатенация, а c — какой-то символ).

P.S. Недавно вышла пара препринтов про суперкомпиляцию, если интересуетесь.
Правильно ли я понимаю, что у Вас это научная работа? Т.е. писать статьи, содержащие обзоры и сравнения с другими решениями, придется? Наш код открыт, написан на Haskell, можно поиграться. Надеюсь, что Haskell за 9-10 лет не слишком изменился…

Есть коллекция примеров, которые, кстати, вполне мотивировали научную деятельность: удовлетворения личного любопытства за государственный счет ;).

Да, если активно использовать «обратные» вычисления, то замедления возможны. Если же писать программу как обычную функциональную, то замедления от размера быть не должно (за исключением далеко не оптимальной реализации). С другой стороны, в ситуациях, когда определение обратной функции «прямолинейно» (как, например, вычитание в унарной системе из сложения), то замедление было небольшим.

Загадка Эйнштейна интересна тем, что заранее угадать порядок вычислений сложно, поэтому на Прологе ее решить сложно не зная решение. Наш XSG еще решал, но долго.

Да, у нас в лаборатории велась (не мной) работа по использованию miniKanren для всяких логических задачек и «загадка Эйнштейна» была первой из них. Не знаю получилось ли сразу с ней, но чтобы заставить заработать некоторые другие, насколько я знаю, пришлось использовать нетривиальные техники вроде мемоизации и, как раз, суперкомпиляции.

А есть где почитать про результаты?
Интересно, как мир переплетается. Примерно в те же года мы делали подобный язык XSG — функционально-логический, с введением свободных переменных и т.п. Правда дальше реализации (пришлю ссылку, правда это еще делалось во времена cvs) и одной публикации (XSG: Fair Language with Built-in Equality — гуглится по названию или могу прислать PDF) дело не прошло — ушли в другие темы. Было бы интересно сравнить наш и Ваш подходы.

Не пробовали на нем запрограммировать какую-нибудь задачу типа «У кого рыба» (http://udel.edu/~os/riddle.html)?
Из любопытства: а какой ЦАП использовался?
P.S. Спасибо за статью! Может заражусь самостоятельной сборкой ;).

Кстати, не увидел принципиальную схему на github. Там ничего интересного? ;)

Про Windows, к сожалению, ничего сказать не могу. В Linux поддержку можно узнать командой lspci -vvv -s <ID устройства, чтобы все устройства не выдавало>, счетчики должны быть доступны в sysfs (https://www.kernel.org/doc/Documentation/PCI/pcieaer-howto.txt).
Спасибо! Планируем разработать кабельный PCIe коммутатор, так что любой опыт полезен!
Несколько вопросов:
1) На некоторый скриншотах PCIe завелся в gen1. С чем это связано? Часто ли так происходит?
2) Не думали о стандартных кабелях типа Oculink или mini-SAS?
3) Некоторые PCIe устройства имеют PCIe AER (Advanced Error Reporting). Не смотрели, что он может рассказать?
А о визуальном программировании для ПЛИС вроде не писали? В каком-то смысле оно аналогично рисовании схем на ватмане:
image

В чем-то лучше (проще мышкой соединить несколько блоков, чем писать многие строчки кода), в чем-то хуже (в системы контроля версий плохо кладется, всё равно не всё обозреть получается). Но вполне нормальный подход, который в некоторых случаях имеет право на жизнь.
Вряд ли процессор сам записывал данные на диск (режим PIO). Это медленно и процессор загружен. Обычно (я дисками не занимаюсь, но это легко проверить: загрузка процессора должна быть минимальна) Marvell сам читал данные из памяти (режим DMA) и сам записывал их на диск (а процессор простаивал).
Если будет время, то посмотрите значение Maximum Read Request Size в PCIe Capabilities. Устройства такого типа обычно работают в режиме DMA — когда устройство само запрашивает данные из памяти. Тогда размер пакета ограничен не Max Payload (это максимальный размер пакета, который процессор может послать в устройство), а Maximum Read Request Size (максимальный размер запроса на чтение из устройства).
Я немного про другое. По PCIe ходят пакеты (TLP-пакеты), максимальный размер (вернее, полезный размер) которых и есть payload size. Но уходят пакеты быстро, а подтверждения, что пакет правильно получен и обработан приходят с задержкой. Чтобы это не сказывалось на пропускной способности используется кредитный механизм: когда отправитель может отправить без получения подтверждения только ограниченных объем данных. Это ограничение определяется и суммарным объемом пакетов каждого типа, так и просто количеством. Т.е. при инициализации принимающая сторона сообщает передающей свои ограничения (размер буферов и количества пакетов), а отправляющая гарантированно не посылает больше этого числа, не получив подтверждение.

Раз при перестановке карты в другую мать становится лучше, то значит в самом контроллере Mavell на его приемной стороне буфера нормальные. А вот в чипсете на его приемной стороне для порта x1 буфера недостаточные для получения максимальной скорости. А на порте x4 буфера побольше, что приводит к разумной скорости на x1.

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

В общем, не думаю, что что-то специально режет пропускную способность просто так. Есть вполне осмысленные физические ограничения (размеры буферов), которые с одной стороны дают возможность приемной стороне регулировать скорость поступления пакетов (т.к. не всегда приемная сторона способна работать на полной скорости), а с другой приводят к таким странным замедлениям, когда на этих буферах экономят.
Не удалось найти размеры аппаратных буферов и количества запросов (posted/non-posted/completion), которые может отправить устройство или в устройство до получения подтверждения о их выполнении?

Аппаратные ресурсы ограничены, а протокол PCIe — надежный, поэтому данные должны сохраняться в буфере до тех пор, пока получатель не подтвердит их получение. Размеры буферов для x4 порта должны быть больше, чем для x1, что может дать большую скорость на каких-то шаблонах работы и/или на небольшом payload'е. Кроме размера буфера еще должно влиять его распределение между запросами разного типа. Вы контроллер готовый использовали или как для USB на ПЛИС делали? В ПЛИС можно эти параметры покрутить и посмотреть, к чему это приведет.
А технические детали есть? Что за чип-коммутатор используется?
PCIe x1 Gen2 в USB заворачивают или уже Gen3? Для майнинга это может и не актуально, а для других целей пригодилось бы…
Было бы интересно посмотреть на «экзотические» структуры данных типа Rope или Finger Trees и сравнить с ними стандартные и Вашу реализации.

Information

Rating
Does not participate
Registered
Activity