Прошу прощения, если это нужно, что пишу под столь старым постом, но тем не менее.
В какой-то момент появилась идея сделать симуляцию работы сначала отдельных математических действий, потом ALU, и мысли дошли до полноценного процессора (и памяти к нему, естессно), спойлер - программы на телефон, даже мощный, не выдерживают одну только попытку реализовать ОЗУ, программы на ПК ещё не искал, не до того было
Не могу назвать себя хорошо разбирающимся в теме создания процессоров, да и программировать на ассемблере не пробовал, опыт только с языками высокого уровня типа C++++ (решетку ставить не даёт) (в основном), Python (в рамках подготовки к ЕГЭ), C++ (в рамках школьного курса в 9 классе)
И хотя, возможно, имеет смысл начинать с 8 битной системы, хотя бы потому, что у неё нет проблем с количеством инструкций, я решил все таки сделать 4-битную
Стандартами не ограничен, примерами, впрочем, не обогащен, поэтому решил делать двухбайтные (1 байт - 4 бита, или их надо называть полубайтами? Далее 4 бита вместе — байт) адреса памяти (т.е. 8 бит на место в памяти, это лучше четырёх). Также спустя много попыток составить список инструкций, которые все посыпались после того, как я узнал о том, что некоторым инструкциям нужны два вида хранения информации - "дальше второй операнд" или "дальше местоположение второго операнда" (я не могу вспомнить правильные названия, извините).
В итоге было принято решение добавить ещё один бит в процессор, чтобы увеличить объем инструкций с шестнадцати до тридцати двух, это дало возможность вместить все, что я хотел и считал необходимым. Основной идеей стала альтернативность действия, поэтому назвал его "бит альтернативы", по-умолчанию, значение у него равно нулю, так же буду называть его дальше. Альтернативность действия подразумевает то, что одна и та же команда в ассемблерной мнемонике будет делать разные действия в зависимости от значения бита альтернативы, это может показаться не круто, а я не знаю, так это или нет.
Хватит воды, вот список инструкций:
Арифметические: 000L_A. ADD - сложение/умножение 001L_A. SUB - вычитание/деление Логические: 010L_A. AND - логическое И/ИЛИ 0110_A. SHL - сдвиг влево/вправо 0111 (A). JMP - условный переход, если A == 1 100L. - COMP сравнить число из аккумулятора с числом далее (из аккум - А, число далее — В): 0b1000: A > B, 0b0110: A == B, 0b0001: A < B; Передача данных: 101L. ALT - установить значение альтернативы на младший бит L==0 => числа далее, else L==1 => числа из аккумулятора 110L_A. RD/WRT - чтение/запись из/в памяьи, L для MEM при A=1 и L=1 - установка разрешения на перезапись (есть сомнения) Ввод/Вывод: 111L_A. IN/OUT - ввод/вывод данных NN - отсутствие значения, для записи/перезаписи, просто пропуск при компиляции, удобство для разработчика A - значение альтернативы, L - значение "дальше число или ссылка на него?": либо следующий байт — это значение (0), либо следующие два числа — это ссылка (1)
При записи команды через пробел ставится 0 или 1 — значение L (для тех, где важно)
Операции сложения и вычитания записывают в бит альтернативности единицу, если произошло переполнение или ошибка вычитания
Пример:
00. RD 0
01. 0xA
02. ADD 0
03. 0x5
04. WRT 0
05. 0x0
06. 0xAB
07. ALT 1
08. JMP
09. 0x0
0A. 0x8
0B. NN
0C.
0D.
0E.
0F.
Вроде бы ничего не забыл. Пишу сюда, так как хочу узнать мнение других людей о том, сколь полным получился набор инструкций) операции сравнения и перехода специально не используют альтернативность.
Очень долго интересуюсь нейронными сетями, пытаюсь реализовывать кодом некоторые структуры и обучать их.Это весело, но очень часто бывают проблемы с тем, чтобы найти подходящий датасет для обучения.
Сейчас пишу трансформер, sequence2sequence, но не знаю, где можно взять датасет, а, главное, как его читать. Читал про токены, часть текста заменить некоторым числом, но не могу найти внятной информации по тому, как превращать текст в токены
С числами было проще, их самому можно было нарисовать и расписать по разным папкам для классификатора. Есть ли какие-то рекомендации? Заранее спасибо.
Таких статей много.Но ни одна не рассказывает об получении Q, K и V. Эта статья не уникальна, не оригинальна, просто повторение ранее выложенной в Сеть информации
Прошу прощения, если это нужно, что пишу под столь старым постом, но тем не менее.
В какой-то момент появилась идея сделать симуляцию работы сначала отдельных математических действий, потом ALU, и мысли дошли до полноценного процессора (и памяти к нему, естессно), спойлер - программы на телефон, даже мощный, не выдерживают одну только попытку реализовать ОЗУ, программы на ПК ещё не искал, не до того было
Не могу назвать себя хорошо разбирающимся в теме создания процессоров, да и программировать на ассемблере не пробовал, опыт только с языками высокого уровня типа C++++ (решетку ставить не даёт) (в основном), Python (в рамках подготовки к ЕГЭ), C++ (в рамках школьного курса в 9 классе)
И хотя, возможно, имеет смысл начинать с 8 битной системы, хотя бы потому, что у неё нет проблем с количеством инструкций, я решил все таки сделать 4-битную
Стандартами не ограничен, примерами, впрочем, не обогащен, поэтому решил делать двухбайтные (1 байт - 4 бита, или их надо называть полубайтами? Далее 4 бита вместе — байт) адреса памяти (т.е. 8 бит на место в памяти, это лучше четырёх). Также спустя много попыток составить список инструкций, которые все посыпались после того, как я узнал о том, что некоторым инструкциям нужны два вида хранения информации - "дальше второй операнд" или "дальше местоположение второго операнда" (я не могу вспомнить правильные названия, извините).
В итоге было принято решение добавить ещё один бит в процессор, чтобы увеличить объем инструкций с шестнадцати до тридцати двух, это дало возможность вместить все, что я хотел и считал необходимым. Основной идеей стала альтернативность действия, поэтому назвал его "бит альтернативы", по-умолчанию, значение у него равно нулю, так же буду называть его дальше. Альтернативность действия подразумевает то, что одна и та же команда в ассемблерной мнемонике будет делать разные действия в зависимости от значения бита альтернативы, это может показаться не круто, а я не знаю, так это или нет.
Хватит воды, вот список инструкций:
Арифметические:
000L_A. ADD - сложение/умножение
001L_A. SUB - вычитание/деление
Логические:
010L_A. AND - логическое И/ИЛИ
0110_A. SHL - сдвиг влево/вправо
0111 (A). JMP - условный переход, если A == 1
100L. - COMP сравнить число из аккумулятора с числом далее (из аккум - А, число далее — В):
0b1000: A > B,
0b0110: A == B,
0b0001: A < B;
Передача данных:
101L. ALT - установить значение альтернативы на младший бит L==0 => числа далее, else L==1 => числа из аккумулятора
110L_A. RD/WRT - чтение/запись из/в памяьи, L для MEM при A=1 и L=1 - установка разрешения на перезапись (есть сомнения)
Ввод/Вывод:
111L_A. IN/OUT - ввод/вывод данных
NN - отсутствие значения, для записи/перезаписи, просто пропуск при компиляции, удобство для разработчика
A - значение альтернативы, L - значение "дальше число или ссылка на него?": либо следующий байт — это значение (0), либо следующие два числа — это ссылка (1)
При записи команды через пробел ставится 0 или 1 — значение L (для тех, где важно)
Операции сложения и вычитания записывают в бит альтернативности единицу, если произошло переполнение или ошибка вычитания
Пример:
00. RD 0
01. 0xA
02. ADD 0
03. 0x5
04. WRT 0
05. 0x0
06. 0xAB
07. ALT 1
08. JMP
09. 0x0
0A. 0x8
0B. NN
0C.
0D.
0E.
0F.
Вроде бы ничего не забыл. Пишу сюда, так как хочу узнать мнение других людей о том, сколь полным получился набор инструкций) операции сравнения и перехода специально не используют альтернативность.
NS, not-stated :)
g - ускорение свободного падения на поверхности любой планеты. Просто чаще всего имею ввиду Землю
Очень долго интересуюсь нейронными сетями, пытаюсь реализовывать кодом некоторые структуры и обучать их.Это весело, но очень часто бывают проблемы с тем, чтобы найти подходящий датасет для обучения.
Сейчас пишу трансформер, sequence2sequence, но не знаю, где можно взять датасет, а, главное, как его читать. Читал про токены, часть текста заменить некоторым числом, но не могу найти внятной информации по тому, как превращать текст в токены
С числами было проще, их самому можно было нарисовать и расписать по разным папкам для классификатора. Есть ли какие-то рекомендации? Заранее спасибо.
Будет 2^63 - 1 сложений. Нуля :)
Таких статей много.Но ни одна не рассказывает об получении Q, K и V. Эта статья не уникальна, не оригинальна, просто повторение ранее выложенной в Сеть информации