Страницы

Поиск по вопросам

Показаны сообщения с ярлыком процессор. Показать все сообщения
Показаны сообщения с ярлыком процессор. Показать все сообщения

воскресенье, 8 марта 2020 г.

Выполнение процессорм несуществующих инструкций

#ассемблер #процессор


Здравствуйте! Для начала хочу прояснить как я понимаю работу процессора, поправьте,
если что-то не так. Грубо: Процессору даётся команда считывания инструкции, вводиться
сама инструкция, её код(ну из 0 и 1), потом процессор сопоставляет введённую инструкцию
с инструкциями, записанными в нём,  получает операнды(если такие есть), и делает, то
что должна делать эта инструкция.

Вопрос:

Возможно ли как-то скомпилировать програму с не валидной инструкцией, заставить процессор
перейти к ней. Если да, то что произойдёт? Просто сверит, не найдёт соответствия и
всё?Предусмотрено ли такая ситуация?

Архитектура не важна, ARM,X86
    


Ответы

Ответ 1



В случае несуществующей инструкции возникает исключение (прерывание) с определённым номером (int 6). В стеке хранится адрес возврата. По этому адресу можно "вручную" програмно выполнить иснтрукцию, сдвинуть ip-адрес возврата, и сделать возврат iret (для x86) на следущюю инструкцию. Таким образом делалось, к примеру, эмуляция сопроцессора. При этом нужно точно знать как выполнить инструкцию. Для процессора ARM режим исключения (ловушка) по несуществующей инструкции возможно тоже есть. Для ARM7 вектор 0x4 Что будет если встретилась такая инструкция: Если сделать пустой обработчик - процессор повиснет. Как вариант можно написать "программа выполнила недопустимую инструкцию и будет закрыта" (многие версии Windows так делают). Если есть эмуляция - команду выполнит эмулятор Теперь о том зачем эмуляция команд. Случай с x86 486. Там есть замечательная команда bswap eax; которую не поддерживает 386. Зараннее зная что эту команду нужно выполнять, мы пишем программу, вешаем её на прерывание по несуществующей команде, где если data[(e)ip] = код_bswap то выполняем обмен внутри eax. Потом смещаем (e)ip на длинну команды делаем возврат. Как вариант можно эмулировать mmx расширение. Можно на intel эмулировать команды amd и наоборот. Но это будет касатся только даной платформы. Теперь об АРМ. Есть программа для ARM7, теоретически её можно выполнять на ARM6 если знать все недостающие команды в этой платформе и реализовать их выполнение в виде процедур. О кроссплатформенности. Команды для x86 и команды ARM никогда по кодам не пересекутся. Поэтому обработка несуществующих команд будет для каждого процессора своя. Да, можно с помощью #define разграничить и заточить с++ на две три разные платформы реализовав решение в разных файлах - да, и возможно как-то обьеденить всё в proc1(PTR * addr, REGS * reg) но даже регистры у процессоров разные. Поэтому смысла особого в этом нет. Для каждой платформы процессора прийдётся писать свою неповторимую эмуляцию, которая учёт особенности именно этой конкретной архитектуры. Возможно ли как-то скомпилировать програму с не валидной инструкцией? Ответ да, если у процессора существуют такие (есть процессоры где всё пространство инструкций заполнено и таковых нет, как правило RISC архитектуры). это будет только тогда, когда ПО собирается под одну версию ахитектуры, а выполняется на другой (например собрали под 486 а выполняется на 286, или собрали под Pentium-III, а выполняем на Pentium-II), или намерено генерируем код не под ту платформу под которую собрано (с помощью __emit__ или выполняем команды в массиве). Но обычно так не делают. Что б программа заработала, на уровне ядра OS делают эмуляцию. И последнее - емуляция значительно замедляет выполнение:). В контексте исключительных ситуаций процессора применяется три понятия, которые часто в литературе могут быть как "синонимами" так и разными понятиями (что иногда вызывает путаницу): interrupt (int сокращённо) - прерывание (как по исключению так и нет), trap - ловушка (имеется ввиду исключительной ситуации), exception - исключение.

среда, 26 февраля 2020 г.

Что такое виртуальный процессор?

#терминология #железо #виртуальная_машина #процессор



Где то утверждают что это по сути и есть ядро (или поток ядра). И например при технологии
Hyper-Threading система определяет физическое ядро как два виртуальных.
Кто то утверждает что виртуальный процессор может эмулироватся программно молл виртуальный
процессор можно сравнить с операционной системой. Поток по отношению к нему выступает
как процесс, подобно тому, как сам виртуальный процессор является процессом с точки
зрения операционной системы.
Еще говорят что при создании виртуальной машины можно для нее выделять виртуальные
процессоры 


ТАК ЧТО ТАКОЕ ВИРТУАЛЬНЫЙ ПРОЦЕССОР
    


Ответы

Ответ 1



Это не термин, а обычное словосочетание. Виртуальный процессор - это нечто, что выглядит как работоспособный процессор, но процессором не является. Точное значение зависит от контекста. Так, когда-то давно никто не слышал про многоядерные процессоры, а когда было нужно - ставили несколько процессоров. И когда многоядерные процессоры появились - то в целях обратной совместимости каждое ядро стало "представляться" операционной системе как отдельный процессор. То есть у вас на материнке стоит один проц - а ОС пишет, что их два. Никакого второго процессора реально не существует, он - виртуальный. Точнее, оба ядра называют виртуальными процессорами, потому что они одинаковые. Существуют эмуляторы процессоров. Например, вы можете скачать эмулятор NES и поиграть на нем в старые игры. Эти игры написаны для процессора Ricoh 2A03, но играть в них вы будете на процессоре семейства Intel. Однако большинство игр подмены не заметят, поскольку эмулятор реализует все нужные инструкции. В этом смысле эмулятор NES содержит в себе виртуальный процессор. Внутри виртуальной машины работает реальная ОС, называемая "гостевой". Эта ОС, точно так же, как и при работе вне виртуальной машины, пытается работать с "железом". Но у виртуальной машины все "железо" - виртуальное (за редкими исключениями): если вы, к примеру, зайдёте в Диспетчер устройств на виртуалке с виндой - вы не увидите ничего похожего на реальные устройства. Процессоры у виртуальной машины - тоже виртуальные.

четверг, 23 января 2020 г.

Как вызвать провал конвейера?

#железо #процессор


Как вызывать провал конвейера на современном процессоре?
Было несколько идей, но я не уверен в них:


В условный оператор if запихать кучу условий (например, if(A&0&B&C.....), где A,B,C
- какие-то операции). Предполагал, что в процессор произойдет загрузка всех операций,
но после второй будет произведен сброс конвейера. Тем самым будет простой размером
примерно с количество ступеней конвейера.
С помощью расширения GCC __builtin_expect направить процессор на ложную ветку if-else.
Предполагал, что в процессор будет произведена загрузка операций, которые не будут
выполнены. Конвейер будет сброшен.


Собственно, сабж.
    


Ответы

Ответ 1



Вариант 2 подходит. Ошибка предсказания перехода, вероятно, единственный верный шаг. Все остальные современные компиляторы скорее всего оптимизируют

Литература по эффективному программированию процессоров (DMA, прерывания)

#микроконтроллеры #процессор


Всем привет!

Я хотел бы найти хорошую литературу по программированию микропроцессоров/микроконтроллеров
(например с ядром Cortex-M0, Cortex-M3), где качественно описывается использование
прерываний и контроллера ПДП. Не так как в даташите, сухой пример использования конкретной
периферии независимо от всего остального, а хорошее пособие по написанию программ.

Интересует прежде всего печатный вариант (книги, учебники) а не отдельные статьи,
но их тоже почитаю. Заранее прошу не предлагать статьи из первой страницы поиска в
гугле "использование DMA" и т.д., так я и сам умею.

Имеется опыт программирования контроллеров AVR, знания C/C++, ассемблера.
    


Ответы

Ответ 1



Подробные статьи по применению стоит посмотреть в ежеквартальнике Бюллютень TI, скачать можно на сайте scanti.ru. К сожалению подобные труды, которые вас интересуют, в природе маловероятны. Сам модуль DMA и его связи с периферией настолько узкоспециализированные и индивидуальные для каждого конкретного процессора, что паттернов его использования более глобальных чем "разгон" конкретного интерфейса и высвобождение процессорных ресурсов для задач не связанных с пересылкой данных в общем случае описать невозможно. Однако, если у вас есть конкретные вопросы по возможностям применерия, могу на них ответить.

вторник, 31 декабря 2019 г.

Как узнать архитектуру команд процессора в linux?

#linux #процессор


Встал вопрос, какой пакет установить: http://www.rpmfind.net/linux/rpm2html/search.php?query=qemu-sgabios+noarch.rpm&submit=Search+...&system=&arch=

в /proc/cpuinfo и lscpu показывается только архитектура самого процессора. Я не железнячник,
прошу не закидывать камнями.

# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 15
Model name:            Intel(R) Core(TM)2 CPU          6320  @ 1.86GHz
Stepping:              6
CPU MHz:               1600.000
BogoMIPS:              3732.95
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0,1

# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Core(TM)2 CPU          6320  @ 1.86GHz
stepping        : 6
microcode       : 0xd0
cpu MHz         : 1867.000
cache size      : 4096 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon
pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16
xtpr pdcm lahf_lm dtherm tpr_shadow
bogomips        : 3732.95
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Core(TM)2 CPU          6320  @ 1.86GHz
stepping        : 6
microcode       : 0xd0
cpu MHz         : 1600.000
cache size      : 4096 KB
physical id     : 0
siblings        : 2
core id         : 1
cpu cores       : 2
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon
pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16
xtpr pdcm lahf_lm dtherm tpr_shadow
bogomips        : 3732.95
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

    


Ответы

Ответ 1



Architecture: x86_64 Чем это не устраивает? Архитектура CPU у Вас amd64, она же x86_64.

Ответ 2



вообще-то в системе могут быть установлены пакеты разной архитектуры. если пакетная система rpm-основная, то ориентироваться стоит на то, для какой архитектуры собрано большинство установленных пакетов. пример: $ rpm -qa --qf "%{arch}\n" | sort | uniq -c 91 i386 2 i686 68 noarch 4 (none) 464 x86_64 видно, что больше всего пакетов (464) — для архитектуры x86_64. она и есть основная. для системы deb-основной чуть проще. есть основная архитектура. пример: $ dpkg --print-architecture amd64 и (могут быть) «сторонние» архитектуры. пример: $ dpkg --print-foreign-architectures i386 для дистрибутивов, основанных не на rpm и не на deb, подсказать сходу ничего не могу. надеюсь, в комментариях мой ответ дополнят специалисты по таким дистрибутивам. есть, вероятно, универсальное решение: спросить у glibc, как основы операционной системы gnu/linux. для 32-битной сборки glibc будет ответ 32: $ getconf LONG_BIT 32 для 64-битной — 64: $ getconf LONG_BIT 64

Ответ 3



Существует несколько вариантов названий этой технологии, которые иногда приводят к путанице. x86-64 — первоначальный вариант. Именно под этим названием фирмой AMD была опубликована первая предварительная спецификация. x64 — официальное название версий операционных систем Windows и Solaris, также используемое как название архитектуры фирмами Microsoft и Oracle. AA-64 (AMD Architecture 64) — так архитектуру назвал популярный неофициальный справочник sandpile.org (внеся информацию практически сразу после публикаций первой предварительной спецификации) по аналогии с IA-64. Hammer Architecture — название по первым ядрам процессоров, её поддерживавшим — AMD Clawhammer (гвоздодёр) и AMD Sledgehammer (кувалда). AMD64 — после выпуска первых Clawhammer и Sledgehammer в названии архитектуры появилось название фирмы-разработчика AMD. Сейчас является официальным для реализации AMD. Yamhill Technology — первое название реализации технологии компанией Intel. Иногда упоминалось название CT (Clackamas Technology). EM64T — первое официальное название реализации Intel. Расшифровывалось как Extended Memory 64 Technology. IA-32e — иногда встречалось совместно с EM64T, чаще для обозначения длинного режима, который в документации Intel называется «режимом IA-32e». Intel 64 — текущее официальное название архитектуры Intel. Постепенно Intel отказывается от наименований IA-32, IA-32e и EM64T в пользу этого названия, которое теперь является единственным официальным для этой архитектуры со стороны компании Intel.

суббота, 14 декабря 2019 г.

Работа с несколькими процессорами (не ядрами)

#c_sharp #net #многопоточность #процессор


Есть какое-то большое .Net приложение-служба, которая делает очень много повторяющихся
вычислений,
вычисления объемные, но не суть важно. Главное их очень много.
Ну и мы начали использовать многопоточный код и действительно увидели очень сильный
прирост производительности.

Поставили это дело клиентам, они счастливы, все хорошо. У них мощный сервак с процессором
на 24 ядра, почти все эти ядра
мы задействуем.
И вот проходит время, клиенты говорят НУЖНО БОЛЬШЕ ПРОИЗВОДИТЕЛЬНОСТИ.
И меняют сервак, на котором появляются ДВА ПРОЦЕССОРА по 24 ядра у каждого. Код нашего
.net приложения не менялся.

В итоге, стало работать раза в 3-4 хуже и медленнее. Но стоит только физически отключить
ОДИН процессор, и все начинает
работать так же быстро.

И вот вопрос, может кто сталкивался.
Как в таком случае мне правильно распределять нагрузку уже не по ядрам (это работает
вроде), а по процессорам?
    


Ответы

Ответ 1



Не совсем ответ на вопрос, но все же: Программе все равно на кол-во процессоров, так как это задача ОС. Именно она планирует на каком ядре какого процессора запустить поток. Мне видится, проблема в том, что повысив одну характеристику ПК не была повышена другая характеристика ПК. Например, вы гоняли большие коллекции в многопоточном режиме по 1 гигу на поток и вы расходовали 24 гб памяти(24 ядра), которые имелись на ПК. Теперь вы расходуете 48 гигов, хотя на ПК всего 28 гигов => подкачка и все плохо. Так же проблема может быть в том, что вы уперлись в IO-операции- сетка не справляется, бд погибает. В общем, проблема может быть не в процессорах и нужно выполнить профайлинг. Посмотреть в монитор ресурсов, например.

Ответ 2



Похоже что это не то. что можно решить изнутри программы. В общем и целом OS будет влиять на скедлинг потоков. На что можно обратить внимание: 1) Могут ли потоки быть логически завязаны один на второй? То есть могут ли они ждать один другого в любой промежуток времени. Хорошая идея что бы проверить виновата программа или настройки операционной системы - написать программу, которая запускает кучу потоков которые вообще не связаны между собой и просто делают пустое действие(пустой цикл раз на пару секунд). И проверить может ли нагрузка CPU перевалить за 50%. Если может - значит у тебя интерлок потоков. Если не может - значит виноваты настройки операционки. 2) Есть 2 версии .NET runtime, и ты можешь использовать не ту которую нужно. Вот урывочек статьи с MSDN: .NET Framework applications designated for deployment on multiprocessor machines, such as those using the Intel Xeon MP processors, should make use of the server-optimized runtime implementation (MSCorSvr.dll). This version of the runtime has a modified garbage collector that splits the managed heap into several sections, with one per CPU. Each CPU has its own garbage-collection thread, so they can all participate simultaneously in the collection cycle. (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/dotnetperftechs.asp) Ответ основан на: https://www.experts-exchange.com/questions/21013405/Multi-Processor-using-with-C-for-max-performance.html

понедельник, 9 декабря 2019 г.

Как процессор работает с периферией?

#книги #процессор


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


Ответы

Ответ 1



В общем случае периферийное устройство оформляется, как небольшой участок памяти, записывая по определенным адресам команды и параметры, читая с определенных адресов информацию о состоянии вы работаете с устройством. Бывает, что иногда эта область памяти выделяется в т.н. порты ввода/вывода, тогда чтение/запись осуществляются спец. командами, но это не меняет общей логики. По взаимодействию с конкретным устройством надо читать описание контроллера который вас интересует, обычно это какая-то микросхема. Это я всё описал очень упрощенно, чтобы изучать такие вещи надо предварительно почитать про аппаратные прерывания и их обработку и про прямой доступ к памяти т.н. DMA. Ссылки по теме: Порт ввода-вывода Шина Прерывание Прямой доступ к памяти

Ответ 2



Процессор не работает непосредственно с периферией. Согласно спецификации на, к примеру, Intel Core i7 (стр. 37-51), единственные шины, которые у него есть для связи с внешним миром — это три группы контактов: две для оперативной памяти (DDR1_*, DDR2_*) и одна для QPI (QPI_*). То есть у процессора есть две абстракции — «оперативная память» (в кавычках, так как на самом деле это просто адресное пространство, которому может быть сопоставлено что угодно, не только ОЗУ) и канал для двухсторонней передачи пакетов (программисту он полезен только тем, что и по нему приходят прерывания и через него работают так называемые I/O-порты). Все три шины идут в чипсет. Однако: с первыми двумя работает та часть чипсета, которая раньше называлась «северный мост». Он обрабатывает запросы процессора на чтение из и запись в «оперативную память», перенаправляя их либо на микросхемы ОЗУ, либо на южный мост в зависимости от того, куда какие физические адреса были назначены. Причём это назначение может динамически изменяться по запросу из BIOS или южного моста. с третьей работает «южный мост». Именно он взаимодействует с периферией, знает об IDE/SATA/PS2 и прочих интерфейсах. Ну или знает, к каким ногам чипсета подключены соответствующие микросхемы-контроллеры. Его задача — переводить электрические сигналы с аппаратных шин на язык QPI-прерываний процессора, а также обрабатывать запросы от «северного моста» на работу с зарезервированными областями памяти, перенаправляя их соответствующим устройствам. Работу же конкретного устройства, — где оно будет использовать прерывания, а где будет отображать буферы в «оперативную память», — определяет его производитель. Именно поэтому и нужны драйвера, чтобы перевести это уникальное сочетание способов общения конкретного устройства с процессором в стандартные абстракции операционной системы, доступные другим программам («жёсткий диск», «сетевая карта» и т. д.).

Ответ 3



В дополнение к предыдущему ответу:процессор может работать непосредственно с периферией.Вопрос только в том,как это реализовано.В любом случае,если это x86, или ARM процессор,у него есть такие инструкции IN и OUT,которые как раз предназначены для работы с периферией.В зависимости от периферии,есть шинный контроллер,или какой либо другой контроллер(северный мост,к примеру),обрабатывающий команды от CPU.Процессор получает инструкцию OUT port,AL, к примеру,и выставляет на шине адрес порта port,и дергает определенную ногу,отвечающую за ту периферию,в области адресов которой находится порт,шинный контроллер соответственно получив этот сигнал,подключает к шине соответствующее периферийное устройство.Если опустить детали, то процесс именно такой,на 99% архитектур. Так реализуется изолированный ввод/вывод.Прямой ввод/вывод проще - просто на шину параллельно цепляется периферия,которая маппится на определенны адрес, и можно просто писать любой командой для работы с память в эту периферию.

воскресенье, 8 декабря 2019 г.

Книги по глубочайшей архитектуре процессора

#алгоритм #книги #процессор


Посоветуйте пожалуйста книги по архитектуре процессора (RISC, CISC, АЛУ и т.д.).
Я знаю, что это не по теме (хотя, это же Computer Science), но это не дает мне спокойно
учить программирование. Везде написано "в общем", а я бы хотел разобрать это подробно.
Будьте людьми... Пожалуйста...
//В гуле написано просто:"Процессор выполняет  команду в пошагово:

Вызывает следующую команду из памяти и переносит её в регистр команд.
Меняет положение счётчика команд, который после этого указывает на следующую команду.
Это происходит после декодирования текущей команды, в некоторых случаях в процессе.
Определяет тип вызванной команды.
Если команда использует слово из памяти, то определяет где оно находится.
Переносит слово в регистр центрального процессора. Некоторые команды загружают целые
группы слов и обрабатывают их.
Выполняет команду
Переходит к 1 шагу, чтобы выполнять следующую команду.". И какая магия это все делает?
    


Ответы

Ответ 1



Переходит к 1 шагу, чтобы выполнять следующую команду.". И какая магия это все делает? Это проще. Это вам нужно почитать что-нибудь из курса цифровой схемотехники. Как устроены триггеры, регистры, сумматоры-вычитатели, шифраторы-дешифраторы, генераторы-мультивибраторы. Далее как из этих элементов строят схемы шинной и не шинной топологии. Как из регистров строят ОЗУ. Такой литературы много есть и на русском. А институтская специальность цифровой схемотехники называется "Вычислительные машины сети и системы". Погуглите литературу по этой специальности и все узнаете.

Ответ 2



есть книги Таненнбаума "Архитектура компьютера","Современные операционные системы"

среда, 4 декабря 2019 г.

Машинное слово, каков его размер?

#процессор


Есть понятие "машинного слово", я читала об этом, но везде пишут по разному, на сколько
я понимаю одно машинное слово равно 2 байта, а двойное машинное слово 4 байта, но откуда
оно берётся, почему 2 байта а не один? То есть как я понимаю если процессор 32-битный
он может за один такт принять и обработать с оперативной памяти 32 бита информации,
а это 4 байта значит у него должно быть одно слово 4 байта ну а 64-х битный в 2 раза
больше и его слово будет больше?  
    


Ответы

Ответ 1



Думаю, вся путаница возникла из-за того, что когда то разработчики Интела (я так думаю) назвали два байта - словом (word) - тогда 16 битные процессоры были прорывом. Соответственно, 4 байта - двойным словом. (DWORD, double word). Это сохранилось и в многих языках программирования (в том числе в с/с++). Почему два байта - слово? да видимо от того, что байт это как буква. А две буквы - это уже слово. (Хотя сейчас прибегут филологи и скажут, что это скорее всего слог, чем слово). В википедии есть хорошая фраза "* Для 32-битных процессоров x86: исторически машинным словом считается 16 бит, реально — 32 бита." А вот словосочетание "двойное машинное слово" я никогда не слышал. Даже гугл мало находит статей с таким сочетанием. А вот "двойное слово" или "машинное слово" - это нормально. То есть как я понимаю если процессор 32-битный он может за один такт принять и обработать с оперативной памяти 32 бита информации не все так просто. Далеко не факт, что он может даже принять 32 бита. Современные процессоры сложные, имеют кеш. Имеют сложные комманды, которые за один раз (не так, а именно раз) могут обработать до 16 байт памяти (всякие mmx и sse). Обычно, машинным словом называют "разрядность процессора", так как разрядность обычно показывает оптимальный размер данных внутри процессора (регистры 32битного процессора 32 битные и с 32битными данными в основном все команды и работают). В некоторых процессорах слово было 60 бит:) В любом случае рекомендую всегда всматриваться в контекст. Если о "слове" говорит программист на С/С++ - это 16 бит, если программист на ассемблере под 32 битные ARM процессоры - то скорее всего слово - это 32 бита.

Ответ 2



По определению, размер машинного слова равен разрядности регистров процессора и/или разрядности шины данных. Т.е. для процессоров, поддерживающих систему команд x64 - это 8 байт. Но в Windows API, например, повсеместно используется тип WORD как синоним 2-х байт. Я думаю, это пошло из 16-битных версий Windows - после появления 32-битных версий, Microsoft было выгодней использовать неправильное название, чем использовать правильное и получить большие проблемы совместимости при компиляции под Windows. Вобщем, не заморачивайтесь сильно и смотрите на контекст :)

Такт как единица измерения

#ассемблер #процессор


С коллегами обсуждаем до смешного простой вопрос: чем является такт работы процессора?
Википедия уточняет:

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

Обсуждаются два варианта:

изменение значения бита (одного)
ассемблерная операция (над рядом битов)

Благодарю!    


Ответы

Ответ 1



Такт работы - это такт работы, т.е. промежуток времени между двумя соседними "пиками" некоего задающего тактового сигнала. Увы, без него не обойтись, т.к. схемы у нас цифровые и нам нужно фиксировать состояние сигналов. Физически к изменению битов и выполнению команд такт относится опосредованно. Во-первых, разные блоки процессора работают на разной частоте. Но если рассматривать простейший случай, то одна команда выполняется минимум за один такт работы исполнительного у-ва. Всякие команды типа умножения или деления могут выполняться за сотни тактов. Во-вторых, общение с внешним миром у процессора происходит через шины, например, шину данных. У этой шины есть разрядность, например, 64 бит. Опять же в простейшем случае мы можем по этой шине передать за единицу времени кол-во информации равное произведению частоты на битность. Т.е. за такт можно сделать одну передачу, при этом все 64 бита передаются одновременно Еще раз поясню, что "кол-во тактов" - это по сути единица измерения времени. Связь со временем через частоту: <Время> = <частота>*<кол-во тактов>

Ответ 2



Если говорить про такт у процессора - это промежуток между двумя импульсами тактового генератора Нас так учили в университете. Когда разрабатывал калькулятор на схемах, тактом был импульс сигнала.., и я соглашусь с @avp Но если отвечать на вопрос Такт как единица измерения это: отдельная стадия (временной промежуток) какого-либо циклического процесса и тут не важно, выполняется одна операция, или комплекс операций, изменяется 1 бит или несколько бит.

Ответ 3



Генератор тактовой частоты (генератор тактовых импульсов) генерирует электрические импульсы заданной частоты (обычно прямоугольной формы) для синхронизации различных процессов в цифровых устройствах ЭВМ. Тактовые импульсы часто используются как эталонная частота — считая их количество, можно, например, измерять временные интервалы. ссылка ГТЧ необходим, чтобы множество процессов того же процессора выполнялось последовательно, сначала установка адреса команды на шину адреса, затем через 2 такта чтение данных с шины данных, через 80 тактов выполнение декодирования считанной команды и так далее. Число тактов произведённых генератором с момента подачи питания (включения компьютера) хранится в специальном счётчике, который можно читать. Схема прямоугольного импульса

Ответ 4



я думаю, ассемблерная операция (над рядом битов) это последовательная операция (рассматриваем в контексте одноядерной машины), потому приходим к определению, что тактовая частота - это количество выполняемых операций в секунду. Хотя если операция над рядом бит делается за 1 такт(например умножение) - значит кол-во байт в этой операции не учитывается

понедельник, 14 января 2019 г.

Как узнать архитектуру команд процессора в linux?

Встал вопрос, какой пакет установить: http://www.rpmfind.net/linux/rpm2html/search.php?query=qemu-sgabios+noarch.rpm&submit=Search+...&system=&arch=
в /proc/cpuinfo и lscpu показывается только архитектура самого процессора. Я не железнячник, прошу не закидывать камнями.
# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) per core: 1 Core(s) per socket: 2 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 15 Model name: Intel(R) Core(TM)2 CPU 6320 @ 1.86GHz Stepping: 6 CPU MHz: 1600.000 BogoMIPS: 3732.95 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 4096K NUMA node0 CPU(s): 0,1
# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 15 model name : Intel(R) Core(TM)2 CPU 6320 @ 1.86GHz stepping : 6 microcode : 0xd0 cpu MHz : 1867.000 cache size : 4096 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm dtherm tpr_shadow bogomips : 3732.95 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management:
processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 15 model name : Intel(R) Core(TM)2 CPU 6320 @ 1.86GHz stepping : 6 microcode : 0xd0 cpu MHz : 1600.000 cache size : 4096 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm dtherm tpr_shadow bogomips : 3732.95 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management:


Ответ

Architecture: x86_64
Чем это не устраивает? Архитектура CPU у Вас amd64, она же x86_64.

суббота, 13 октября 2018 г.

Машинное слово, каков его размер?

Есть понятие "машинного слово", я читала об этом, но везде пишут по разному, на сколько я понимаю одно машинное слово равно 2 байта, а двойное машинное слово 4 байта, но откуда оно берётся, почему 2 байта а не один? То есть как я понимаю если процессор 32-битный он может за один такт принять и обработать с оперативной памяти 32 бита информации, а это 4 байта значит у него должно быть одно слово 4 байта ну а 64-х битный в 2 раза больше и его слово будет больше?


Ответ

Думаю, вся путаница возникла из-за того, что когда то разработчики Интела (я так думаю) назвали два байта - словом (word) - тогда 16 битные процессоры были прорывом. Соответственно, 4 байта - двойным словом. (DWORD, double word). Это сохранилось и в многих языках программирования (в том числе в с/с++). Почему два байта - слово? да видимо от того, что байт это как буква. А две буквы - это уже слово. (Хотя сейчас прибегут филологи и скажут, что это скорее всего слог, чем слово). В википедии есть хорошая фраза "* Для 32-битных процессоров x86: исторически машинным словом считается 16 бит, реально — 32 бита." А вот словосочетание "двойное машинное слово" я никогда не слышал. Даже гугл мало находит статей с таким сочетанием. А вот "двойное слово" или "машинное слово" - это нормально. То есть как я понимаю если процессор 32-битный он может за один такт принять и обработать с оперативной памяти 32 бита информации не все так просто. Далеко не факт, что он может даже принять 32 бита. Современные процессоры сложные, имеют кеш. Имеют сложные комманды, которые за один раз (не так, а именно раз) могут обработать до 16 байт памяти (всякие mmx и sse). Обычно, машинным словом называют "разрядность процессора", так как разрядность обычно показывает оптимальный размер данных внутри процессора (регистры 32битного процессора 32 битные и с 32битными данными в основном все команды и работают). В некоторых процессорах слово было 60 бит:) В любом случае рекомендую всегда всматриваться в контекст. Если о "слове" говорит программист на С/С++ - это 16 бит, если программист на ассемблере под 32 битные ARM процессоры - то скорее всего слово - это 32 бита.

среда, 10 октября 2018 г.

Такт как единица измерения

С коллегами обсуждаем до смешного простой вопрос: чем является такт работы процессора? Википедия уточняет: В самом первом приближении тактовая частота характеризует производительность подсистемы (процессора, памяти и пр.), то есть количество выполняемых операций в секунду. Обсуждаются два варианта: изменение значения бита (одного) ассемблерная операция (над рядом битов) Благодарю!


Ответ

Такт работы - это такт работы, т.е. промежуток времени между двумя соседними "пиками" некоего задающего тактового сигнала. Увы, без него не обойтись, т.к. схемы у нас цифровые и нам нужно фиксировать состояние сигналов. Физически к изменению битов и выполнению команд такт относится опосредованно. Во-первых, разные блоки процессора работают на разной частоте. Но если рассматривать простейший случай, то одна команда выполняется минимум за один такт работы исполнительного у-ва. Всякие команды типа умножения или деления могут выполняться за сотни тактов. Во-вторых, общение с внешним миром у процессора происходит через шины, например, шину данных. У этой шины есть разрядность, например, 64 бит. Опять же в простейшем случае мы можем по этой шине передать за единицу времени кол-во информации равное произведению частоты на битность. Т.е. за такт можно сделать одну передачу, при этом все 64 бита передаются одновременно
Еще раз поясню, что "кол-во тактов" - это по сути единица измерения времени. Связь со временем через частоту:
<Время> = <частота>*<кол-во тактов>