LINUX.ORG.RU

Assembler


55

3

Всего сообщений: 9

Новая оптимизация функции memset() в glibc

Группа GNU's Not Unix

Инженер из Intel, Ноах Голдштейн, оптимизировал функцию memset() в библиотеке glibc. Данная оптимизация даёт прирост в производительности порядка 7.5% на десктопных версиях процессоров архитектур Skylake-X и Ice Lake. У серверных версий прирост в производительности немного ниже, прежде всего из-за более низкой общей производительности одиночного ядра.

В прежней реализации функции memset() использовалась ассемблерная инструкция rep stosb. До недавнего времени эта инструкция работала достаточно быстро, за счёт внутрипроцессорной оптимизации zero-over-zero writeback. Однако в этой оптимизации была найдена потенциальная уязвимость, которая может привести к атаке по побочному каналу. В результате оптимизация zero-over-zero writeback была отменена, что и привело к ухудшению производительности rep stosb. В новой версии memset() инструкция rep stosb всё ещё используется, но при выполнении более строгих условий.

Что именно изменилось, можно понять по изменению следующего комментария в коде, который описывает подробности реализации memset()

Прежняя версия описания:

/* memset is implemented as:
   1. Use overlapping store to avoid branch.
   2. If size is less than VEC, use integer register stores.
   3. If size is from VEC_SIZE to 2 * VEC_SIZE, use 2 VEC stores.
   4. If size is from 2 * VEC_SIZE to 4 * VEC_SIZE, use 4 VEC stores.
   5. On machines ERMS feature, if size is greater or equal than
      __x86_rep_stosb_threshold then REP STOSB will be used.
   6. If size is more to 4 * VEC_SIZE, align to 4 * VEC_SIZE with
      4 VEC stores and store 4 * VEC at a time until done.  */

Новая версия описания:

/* memset is implemented as:
   1. Use overlapping store to avoid branch.
   2. If size is less than VEC, use integer register stores.
   3. If size is from VEC_SIZE to 2 * VEC_SIZE, use 2 VEC stores.
   4. If size is from 2 * VEC_SIZE to 4 * VEC_SIZE, use 4 VEC stores.
   5. If size is more to 4 * VEC_SIZE, align to 1 * VEC_SIZE with
      4 VEC stores and store 4 * VEC at a time until done.
   6. On machines ERMS feature, if size is range
	  [__x86_rep_stosb_threshold, __x86_memset_non_temporal_threshold)
	  then REP STOSB will be used.
   7. If size >= __x86_memset_non_temporal_threshold, use a
	  non-temporal stores.  */

>>> Подробности

 , , ,

zg
()

GNU MDK 1.2.10

Группа GNU's Not Unix

GNU Mix Development Kit — это свободный программный пакет для разработки, запуска и отладки программ, написанных на MIXAL — ассемблер-подобном языке для программирования гипотетического компьютера под названием MIX. GNU MDK является частью проекта GNU. Как MIX, так и MIXAL созданы математиком и компьютерным учёным Дональдом Кнутом и описаны в первом томе его книги «Искусство программирования».

Текущая версия MDK включает в себя следующие приложения:

( читать дальше... )

В этом выпуске исправлены некоторые старые ошибки и добавлена совместимость с Guile 2.2 и Flex 2.6.

>>> Источник

 , , ,

Moondancer
()

Вышел GNU MDK 1.2.9

Группа GNU's Not Unix

GNU Mix Development Kit — это свободный программный паблик пакет для разработки, запуска и отладки программ, написанных на MIXAL — ассемблер-подобном языке для программирования гипотетического компьютера под названием MIX. GNU MDK является частью проекта GNU. Как MIX, так и MIXAL созданы математиком и компьютерным учёным Дональдом Кнутом и описаны в первом томе его книги «Искусство программирования».

Текущая версия MDK включает в себя следующие приложения:

  • mixasm — компилятор MIXAL, переводящий исходные файлы в двоичные, выполняемые виртуальной машиной MIX.
  • mixvm — виртуальная машина MIX, позволяющая выполнять и отлаживать скомпилированные программы на MIXAL; использует интерфейс командной строки и возможности строчного редактирования readline.
  • gmixvm — виртуальная машина MIX с ГИП на GTK+, позволяющая выполнять и отлаживать ваши программы на MIXAL в привлекательном графическом интерфейсе.
  • mixguile — интерпретатор Guile со встроенной виртуальной машиной MIX, манипулируемый через библиотеку функций Scheme.
  • mixal-mode.el — основной режим Emacs для редактирования исходных файлов MIXAL, предоставляющий подсветку синтаксиса, обзор документации и вызов mixvm из Emacs (с версии 22 mixal-mode является частью стандартного дистрибутива Emacs).
  • mixvm.el — программа на elisp, позволяющая запускать mixvm в окне Единого Отладчика Emacs, одновременно просматривая ваши исходные файлы на MIXAL в другом буфере.

В этом выпуске исправлены ошибки в документации (спасибо Иешуа Давису) и добавлена поддержка инструкций MIX SLB, SRB, JAE, JAO, JXE и JXO (реализованы Сергеем Литвиным).

>>> Тарбол

>>> Источник

 , , ,

contra_sperm_spero
()

Выпуск MenuetOS 0.99.71

Группа Проприетарное ПО

После полутора лет разработки состоялся очередной выпуск MenuetOS — любительской операционной системы для ПК, полностью написанной на ассемблере fasm. MenuetOS не основана ни на Unix, ни на стандарте POSIX, ни на какой-либо другой операционной системе. Задача проекта — исключить дополнительные уровни между различными частями ОС, которые обычно усложняют программирование и порождают ошибки.

Особенности MenuetOS:

  • Вытесняющая многозадачность, многопоточность, защита памяти Ring3.
  • Графический интерфейс (разрешение до 1920×1080, 16 миллионов цветов).
  • Интегрированная среда разработки: редактор, макро-ассемблер для сборки ядра и приложений.
  • Стек TCP/IP с драйверами loopback, ethernet и PPP.
  • Сетевые приложения включают в себя веб-браузер, почтовый и FTP-клиенты, серверы FTP/HTTP/SMTP и клиенты IRC/NNTP.
  • Поддержка устройств USB 2.0, принтеров, DVB-тюнеров и web-камер.
  • Существуют приложения для просмотра изображений, редактирования текстов, работы с файлами, воспроизведения видео и музыки.
  • Окна приложений произвольной формы, их прозрачность и настраиваемость при помощи скинов, перетаскивание объектов.
  • Выборка данных в реальном времени.
  • Помещается на одной дискете в неупакованном виде.
  • Для запуска MenuetOS достаточно 16 Мб памяти и видеокарты, поддерживающей стандарты VESA 1.2 или 2.0.

В этом выпуске обновлены приложения httpc, picview, memcheck, menu, wallpaper, maps/streetview, dhcp, freeform window; добавлена экранная клавиатура. Улучшен стек USB 1.1/2.0 и TCP/IP. Реализована поддержка многопроцессорных систем и распараллеливание в системе инициализации. Добавлена поддержка кодировки UTF-8 и кириллической раскладки клавиатуры. Доступна сборка для 64-разрядных процессоров (поддержка 32-разрядных прекращена в версии 0.85, которая также доступна для загрузки). Код распространяется под лицензией, запрещающей использование в коммерческих целей без договорённости с разработчиками.

>>> Подробности

 , menuet,

anonymous
()

Вышел GNU MDK 1.2.8

Группа GNU's Not Unix

GNU Mix Development Kit — это свободный программный пакет для разработки, запуска и отладки программ, написанных на MIXAL — ассемблер-подобном языке для программирования гипотетического компьютера под названием MIX. GNU MDK является частью проекта GNU. Как MIX, так и MIXAL созданы математиком и компьютерным учёным Дональдом Кнутом и описаны в первом томе его книги «Искусство компьютерного программирования».

Новый релиз исправляет несколько мелких ошибок, наряду с проблемами совместимости и компиляции (в частности, на darwin-системах). Особая благодарность Райану Шмидту, поддерживающему порт на Mac и значительно помогшему в исправлении этих проблем.

Исправления:

  • #42818: неверное использование --export-dynamic на Darwin.
  • #42871: тавтологические сравнения целых.
  • #39817: компиляция с Glib > 2.35.6.
  • #41097, #4198: компиляция на Darwin-системах.
  • #41097: компиляция с libreadline 6.3.x.
  • #40359: проверка опкодов во время компиляции.

Тарбол

>>> Источник

 , , ,

MiniRoboDancer
()

KolibriOS запустила кампанию на Kickstarter

Группа Open Source

Операционная система KolibriOS, целиком написанная на ассемблере, и разрабатываемая русской командой почти 10 лет, вышла на Kickstarter с целью собрать £5000 на проведение собственного Summer of Code.

В этом году Колибри не прошла отбор в Google Summer Of Code - слишком много операционных систем подавали заявки в этом году. Тем не менее, реализовать задуманное (новые шрифты, юникод, новые файловые системы, поддержка печати/сканирования, новый браузер, FTP-клиент, улучшение сетевого стека) авторы планируют однозначно. Также, в ревизии #3520 начато слияние USB-ветки ядра с основной.

Размер дистрибутива по-прежнему не превышает 3 МБ и минимальная сборка вмещается на дискету (1,44 МБ).

( читать дальше... )

>>> KolibriOS: Help us hold our own Summer of Code 2013 – Kickstarter

 , , , ,

wlander
()

Вышел KolibriN 8.1

Группа Open Source

Многие уже слышали про Колибри — операционную систему написанную на ассемблере и умещающуюся на одну дискету. И это с целой кучей софта в комплекте! Завораживает? Возможно, но наши дети уже не знают зачем эти черные квадратики, да и Колибри давно уже выросла из дискеты размером 1.44 Мб — это и послужило причиной появления KolibriN Upgrade Pack, который призван собрать воедино все разбросанные по свету программы и наработки для KolibriOS.

Что сделано:

  • добавлены тени и полупрозрачность;
  • красивые обои и скины, которые можно легко менять через контекстное меню рабочего стола;
  • в поставку входят игры, среди которых Doom, Loderunner, Pig, Jumpbump и эмуляторы игровых консолей NES, SNES, Gameboy;
  • эмуляторы DosBox и ZX Spectrum позволят запустить сотни старых приложений и игр;
  • просмотрщик изображений zSea, графический редактор GrafX2, почтовый агент Liza, просмотрщик документов формата PDF, видеоплеер FPlay и многие другие программы.

Более того, вам не нужно прописывать ассоциации для этих программ в файловых менеджерах вручную — установщик сделает это сам.

>>> Скриншоты на официальном сайте

>>> Ссылка на закачку

>>> Подробности

 , ,

Badboy
()

Релиз Yasm 1.0.0

Группа Open Source

Yasm - распространяемый под лицензией BSDL ассемблер для x86 и x86_64 платформ с поддержкой синтаксисов nasm и gas, частично tasm , форматов binary, ELF32, ELF64, 32/64-bit Mach-O, RDOFF2, COFF, Win32/64.

Несмотря на уже широкое использование yasm в различных opensource проектах, это первая не-бета версия, автором были достигнуты следующие цели:

  • Полная поддержка NASM-синтаксиса для основных целевых платформ
  • Поддержка синтаксиса GAS (GNU assembler / binutils)
  • source-level отладка с использованием DWARF2 или CodeView 8.0 (VS2005)
  • Поддержка TLS (Thread local storage) для ELF32/64 и SEH (structured exception handling) для Win32/64
  • Поддержка наборов инструкций новейших процессоров AMD XOP/FMA4/CVT16 (Bulldozer) и Intel AVX (Sandybridge)

страница проекта

>>> Подробности и загрузка

 , , ,

Sylvia
()

Программирование высокопроизводительных приложений на процессоре Cell BE: Часть 4. Программирование SPU с расчетом на производительность

Группа Документация

В этой статье будут углубленно рассмотрены счет рабочих циклов инструкций, побитовые манипуляции и другие нюансы, которыми обычно славится язык ассемблера. После прочтения статьи вы, возможно, будете уверены, что вы никогда больше не будете программировать на ассемблере. Тем не менее, целью статьи является не заставить вас повседневно программировать на ассемблере, а дать понимание того, что необходимо компилятору для оптимизации вашего кода, и предоставить возможность при необходимости дополнить ваш код собственными фрагментами на ассемблере. Знание того, как работает язык ассемблера SPU, также поможет вам управлять процессором с помощью языков программирования более высокого уровня. В последующих статьях мы будем использовать язык C, и я покажу вам, как можно использовать эти знания об оптимизации в реальных примерах. Процессор SPU имеет множество расширений языка C; знание языка ассемблера SPU поможет вам понять их, а знание приемов оптимизации SPU – эффективно использовать эти расширения.

>>> Подробности

 ,

IBM_dW
()