Всё тоже самое можно отнести и к try/catch, и к описанному в статье решению.
Достоинство дедовского метода состоит в том, что он не требует никакого синтаксического сахара, а код локаничен и понятен. В таком включе можно писать на любом языке, хоть на макроассемблере. Изобретатели же новых языков находятся в постоянном поиске, они придумывают конструкции которые только усложняют жизнь.
есть только целочисленный код ощибки, в который подробностей не впихнуть.
А зачем Вам подробности ? В подавляющем случае достаточно просто знать была ошибка при выполнении какого-то промежуточного шага программы или нет. Код в errno вполне самодостаточен достаточен.
А можно я попробую. Чисто дедовскими методами, без всяких try/catch и прочих непонятных операторов, без скрытых переменных и лишних скобок захламляющих код. Почти Python. ;)
Правильно ли я понял, что под GPGPU Вы имеете в виду массив из более сложных вычислительных ядер с OoO, предсказателем ветвлений и кэшами нескольких уровней ?
Вы пишите, что массив из простейших конвейерных вычислительных ядер снабженных SIMD будет пробуксовывать и его вычислительная эффективность будет низкой по сравнению с более "толстыми" ядрами. С другой стороны, если в качестве ядер использовать более продвинутые (с OoO и предсказателем), то таких ядер помещается существенно меньше на единицу площади кристалла и электроэнергии они потребляют больше. Проводилось ли какое-то моделирование эффективности выраженной в MFLOPS/мм2 (и MFLOPS/Ватт) этих двух вариантов ? Не может ли оказаться так, что кристалл усеянный большим числом меньших по размеру и более простых ядер покажет существенно более высокую производительность (и меньшее энергопотребление), даже учитывая простои конвейеров, за счет более высоких тактовых частот и существенно большего числа ядер на единице площади ? На сколько OoO ядра больше по площади чем не-OoO ?
Возможен ли вариант изготовления "полновафельной" системы (WSE под тип Esperanto) на существующих производтсвенных мощностях Микрона по 180нм ? Какова могла бы быть теоритическая производительность такого кристалла если в качестве ядер использовать конвейерные RV64I+RVV ? По некоторым прикидкам на пластину d=200мм может поместиться до 200 таких ядер с частотой тактирования 1000МГц. Не A100 конечно, но тоже что-то и своё. :-)
Возможно, с точки зрения своей архитектуры Intel 80386 и был революционным - в проектировании микросхем я не разбираюсь.
Революционность i386 состоит еще и в том, что это был первый микропроцессор полностью выполненный в софте. Т.е. вся аппаратура написана на HDL языке, симулирована и верифицирована, и только после этого был изготовлен "кремний". Интелу пришлось нанять каких-то студентов, чтобы те дописывали софт для симуляции. На эту тему у Кена тоже есть статья и она гораздо более интересная чем эта. Вообще, у этого автора можно переводить всё подряд - одна сплошная годнота. :-)
Статьи Кена Шерриффа безусловно заслуживают уважения, спасибо за перевод. Но хотелось бы сделать пару замечаний.
1. В переводе есть неточость которая противоречит схеме и тому что написано у Кена. Речь идет о 8Т ячейке, цитата:
Переходный транзистор H блокирует сигнал, пока из регистра происходит считывание.
В оригинале:
Transistor H is a pass transistor that blocks this signal until a read is performed on this register;
Перевод по смыслу получился строго противоположный (слово until переведено неверно). Это станет очевидным если посмотреть на схему 8T ячейки. Транзитор H в ней ничего не блокирует, он не выполняет функцию арбитража, как может следовать из перевода. Этот транзистор коммутирует ячейку к соответствующей линии шины данных, и всё. На мой вгляд, правильный перевод мог бы звучать так:
Переходный транзистор H блокирует распростарнение сигнала от ячейки до тех пор, пока не будет выполнена операция чтения.
Для представленой ячейке 8T операция чтения может выполняться одновременно с операцией записи, при этом считываться будет записываемый в ячейку сигнал (посмотрите на схему и проследите распространение сигнала), никакой блокировки тут нет.
2. Тут уже небольшая претензия к Кену. В описании всё той же ячейки T8 автор пишет, что как только подается сигнал чтения (на транзистор H), то налиниях Read bitline появляются данные из текущей ячеки. Причем ранее он говорит о том, что сама ячейка резделена тразитором G который он почему-то называет буферным. Транзистор G не является буферным, это обычный "open drain", он подтягивает к "земле" линию шины данных (Read bitline) если на выходе ячейки находится лог "1". Если линия скоммутирована (сигнал Read wordline подан), то эта лог "1" на выходе превратиться в лог "0" на линии данных (Read bitline), так как линия данных будет тоже подтянута к "земле". Но встает вопрос, а как тогда на линии данных должна появится лог "1" если на выходе ячейки присутствует лог "0" ? Ведь в этом случае транзистор G будет закрыт и ячейка будет отключена от линии данных!? Ответ прост - линии данных всегда подтянуты к положительному потенциалу через резистор подтяжки в несколько десятко в кОм, т.е. по-умолчанию на них всега присутствуют логические единицы, а лог "0" появляется только когда отпирается транзистор G (т.е. на выходе ячейки - лог "1"). Кен ничего не говорит о "потдяжках", видимо полагая, что читатель находится в курсе таких подробностей. В статье есть сноска на небольшое замечание про подтяжку шины данных без особого разъяснения.
Кстати, "подтяжки" на кристаллах обычно реализованы в виде таких же транзисторов. Если затвор планарного N-канального полевого транзистора соединить с истоком, то он будет всегда заперт и в таком состоянии его сопротивление составляет десятки-сотни кОм, что и требуется для подтяжек. Конденсаторы, о которых говорит Кен, это тоже транзисторы - емкость создается затвором по отношению к стоку или истоку. А ячейка динамической памяти это один транзистор с высокой паразитной ёмкостью затвора.
3. Об архитектуре x86. Кен справедливо змечает:
Причём схема регистров i386 также раскрывает проблему обратной совместимости. Архитектура x86 поддерживает доступ к 8-битным регистрам для совместимости с другими процессорами из 1971 года. Эта совместимость требует дополнительной схемы, в частности сети перетасовки и чередующихся регистров. Глядя на схему процессоров x86, не могу не отметить преимущества архитектуры RISC, которая избегает многих особенностей таких процессоров.
А также дополнительных линий управления для доступа к дробным частям большого регистра. Если в 32-х битной архитектуре i386 на один регистр требуется пять линий упрвления, то в современной 64-х битной их, очевидно, стало еще больше. То есть всё это "легаси" это не просто "дополнительный микрокод" как многие наивно полагают, оно поедает драгоценное пространство на площади кристалла и серьезно усложняет схемотехнику. И все это добро Интел продолжает тянуть на своих полечах в светлое будущее.
Придерживаюсь Ваших принципов уже много лет, даже более того:
Чатами не пользуюсь, ни телеги, ни вайбера на моём мобильнике нет. Только электронная почта на собственном сервере. Мне всегда проще позвонить и поговорить с человеком. Если голосом не получается - пишу электронные письма.
Мобильником пользуюсь только для звонков и просмотра web страниц. Иногда пишу SMS. Приложений менее чем на одну страницу.
Банковских приложений на мобильнике тоже нет - пользуюсь только web версией и дебитной картой.
Дисконтными картами, кроме пожалуй "пятерочки", и дисконтными приложеньицами не пользуюсь и на вопрос "не хотите ли завести" устраивают продавцу лекбез на заданную тему. Пусть подумает на досуге.
Всякого рода "умные колонки" рассматриваю как троянского коня и в дом не пускаю. Был скандал с женой и детьми из-за этого, мне удалось их убедить отказаться от этой безусловно полезной вещицы в нашем доме.
Еду по доставке не заказываю. В магизин хожу пешком, пакеты с продуктами ношу сам.
Придерживаюсь принципа "всё своё ношу с собой". Никаких облаков. Моя инфа на моём ноутбуке или на моих конторских серверах, которые физически расположены в соседней комнате.
Чатом ГПТ не пользуюсь. Пробовал запускать болванчика на своём сервере, побаловался и выключил. Смысла в этом пока не вижу никакого. Работа доставляет удовольствое только тогда, когда ты сам решаешь сложную задачу, а не какоё-то электронное чудо насоветовало тебе бредовых решений с которыми ты будешь разбираться на порядок дольше, чем своей головой дойдешь с самого начала.
Жить таким образом становится всё сложенее. Во многие службы дозвониться голосом до человека стало невозможно - только чат с роботом, проблемы остаются нерешенными. В школе учителя норовят давать домашнее задание детям через чаты, что создает проблемы родителям. Пытаюсь учителей наказывать за такое халатное отношение к своим обязанностям (дневник у школьника никто не отменял), но всё это приобретает массовый характер и заставить неподчиняющихся мне лентяев работать я уже не могу. Заказчики пытаюся найти меня в вайберах и телеграммах, приходится долго и упорно обьяснять свою позицию, не все готовы её принять. Жена и дети поуши в чатах и соцсетях. Пытался проводить разъяснительную работу о том, что выкладывать информацию о себе в сети это не безопасно - не понимают и не принимают.
Статья конечно огонь, навивает слезу и ностальгию. В СССР было всё примерно то же самое, только на 8-10 лет позже. Сразу после падения железного занавеса в стране началось массовое появление компьютерных клубов при дворцах пионеров и школах. Доступ рядовых граждан к большим ЭВМ тщательно охранялся жрецами, но на каждом рынке был уголок торгашей платами и микросхемами для сборки всевозможных клонов Радио-86РК. Кооперативы и Посылторг. Дефицит компонентов и информации. Распечатки программ и документации по языкам программирования на перфорированной бумаге. Бесплатный обмен софтом на кассетах и дискетах. Чуть позже - BBS и Fidonet. Чудесное было время. Потом пришли коммерсы, сделали персональный компьютер и коммуникации массовым явлением и всё подмяли под себя. Но сейчас и того хуже - всё унесло в облака, а у компьютеров даже нет клавиатуры. Кругом сплошной вендор-лок и обман (обмен личных данных на бусы).
Интересно, возможен ли подобный феномен в наше время или же такое бывает раз в 1000 лет ? IMHO, тема с развитием нейросетей и выходом их в опенсорс чем-то напоминает историю с персональными компьютерами.
Хорошая подборка, не знал про неё, спасибо. Про ж/д, заводы, пароходы... всё так! :)
Да, неваляшки в магазинах не залёживались. ;)
Но вы не представляете сколько я извел газет на силитровые ракетке. Дома, простите, ж#пу подтирать нечем было. ;)
Этот ваш порох - баловство для мажоров. Настоящее счастье советского пионера выглядело так:
Два болта + гайка + коробок спичек.
Cилитра + газета "Правда".
Шарик для игры в настольный теннис.
Кукла "невяляшка" (вариант на п. 3).
Пустая банка от дихлофоса + карбид.
Не совсем пустая банка от дихлофоса.
Не совсем пустая банка от лака для волос.
Пустой тюбик от зубной пасты.
Краска "серебрянка" (порошок).
Магниевые колёсные диски + напильник.
Перманганат калия AKA "марганцовка".
Медная трубка + гвоздь + резинка о трусов + коробок спичек.
Асфальт + гвоздь + кирпич + коробок спичек.
Спица от велосипеда + коробок спичек.
Старый автомобильный (свинцовый) аккумулятор.
Банка керосина.
Цельный электропровод сечением 2.5мм2 + резинка от трусов.
Медицинский жгут + брусок дерева + два болта.
Ветка орехового дерева + капроновая веревка + сварочный электрод.
Конденсатор на 600В + два коротких проводника.
Лампочка накаливания 6В + напильник + коробок спичек + батарейка на 4.5В.
"Стартер" от ламп дневного освещения.
Много "стартеров".
Старый огнетушитель.
Использованный балончик от сифона.
Неиспользованный болончик от сифона.
труба + дихлофос + картошка.
Это только часть того, что вспомнилось и было опробовано. :-) А современные дети кроме питарды ничего не видели. Скукотища!
Кто мешает в yeild() сделать сохранение errno на ряду с другими параметрами контекста ? В общем-то это уже давно сделано за вас.
Откуда Вы это взяли ? errno is thread safe очень давно. Никаких проблем с нитями у errno нет.
Всё тоже самое можно отнести и к try/catch, и к описанному в статье решению.
Достоинство дедовского метода состоит в том, что он не требует никакого синтаксического сахара, а код локаничен и понятен. В таком включе можно писать на любом языке, хоть на макроассемблере. Изобретатели же новых языков находятся в постоянном поиске, они придумывают конструкции которые только усложняют жизнь.
А зачем Вам подробности ? В подавляющем случае достаточно просто знать была ошибка при выполнении какого-то промежуточного шага программы или нет. Код в errno вполне самодостаточен достаточен.
А можно я попробую. Чисто дедовскими методами, без всяких try/catch и прочих непонятных операторов, без скрытых переменных и лишних скобок захламляющих код. Почти Python. ;)
Ок, спасибо за ответ. С нетерпением жду Вашу статью обьясняющую принципы работы GPGPU.
Правильно ли я понял, что под GPGPU Вы имеете в виду массив из более сложных вычислительных ядер с OoO, предсказателем ветвлений и кэшами нескольких уровней ?
Вы пишите, что массив из простейших конвейерных вычислительных ядер снабженных SIMD будет пробуксовывать и его вычислительная эффективность будет низкой по сравнению с более "толстыми" ядрами. С другой стороны, если в качестве ядер использовать более продвинутые (с OoO и предсказателем), то таких ядер помещается существенно меньше на единицу площади кристалла и электроэнергии они потребляют больше. Проводилось ли какое-то моделирование эффективности выраженной в MFLOPS/мм2 (и MFLOPS/Ватт) этих двух вариантов ? Не может ли оказаться так, что кристалл усеянный большим числом меньших по размеру и более простых ядер покажет существенно более высокую производительность (и меньшее энергопотребление), даже учитывая простои конвейеров, за счет более высоких тактовых частот и существенно большего числа ядер на единице площади ? На сколько OoO ядра больше по площади чем не-OoO ?
Возможен ли вариант изготовления "полновафельной" системы (WSE под тип Esperanto) на существующих производтсвенных мощностях Микрона по 180нм ? Какова могла бы быть теоритическая производительность такого кристалла если в качестве ядер использовать конвейерные RV64I+RVV ? По некоторым прикидкам на пластину d=200мм может поместиться до 200 таких ядер с частотой тактирования 1000МГц. Не A100 конечно, но тоже что-то и своё. :-)
Молодцы мужики, но всё же хотелось бы подержать в руках готовое изделие и оценить его свойства.
В параллельной ветке обсуждают принципы SOSAL,PIDOR и т.д. В этой - мажут себе Ленинские места. Определенно на Хабре сегодня День Юмора. :)
Адрес для контактов просто потрясающий.
Разумеется. Всё остальное это ловушка. Вы это поймёте через некотоорое время, но скорее всего будет уже поздно.
Они до сих пор этого не осознали и упорно, вот уже в течении 30-ти лет, выдают "баг" за "фичу".
Революционность i386 состоит еще и в том, что это был первый микропроцессор полностью выполненный в софте. Т.е. вся аппаратура написана на HDL языке, симулирована и верифицирована, и только после этого был изготовлен "кремний". Интелу пришлось нанять каких-то студентов, чтобы те дописывали софт для симуляции. На эту тему у Кена тоже есть статья и она гораздо более интересная чем эта. Вообще, у этого автора можно переводить всё подряд - одна сплошная годнота. :-)
Статьи Кена Шерриффа безусловно заслуживают уважения, спасибо за перевод. Но хотелось бы сделать пару замечаний.
1. В переводе есть неточость которая противоречит схеме и тому что написано у Кена. Речь идет о 8Т ячейке, цитата:
В оригинале:
Перевод по смыслу получился строго противоположный (слово until переведено неверно). Это станет очевидным если посмотреть на схему 8T ячейки. Транзитор H в ней ничего не блокирует, он не выполняет функцию арбитража, как может следовать из перевода. Этот транзистор коммутирует ячейку к соответствующей линии шины данных, и всё. На мой вгляд, правильный перевод мог бы звучать так:
Переходный транзистор H блокирует распростарнение сигнала от ячейки до тех пор, пока не будет выполнена операция чтения.
Для представленой ячейке 8T операция чтения может выполняться одновременно с операцией записи, при этом считываться будет записываемый в ячейку сигнал (посмотрите на схему и проследите распространение сигнала), никакой блокировки тут нет.
2. Тут уже небольшая претензия к Кену. В описании всё той же ячейки T8 автор пишет, что как только подается сигнал чтения (на транзистор H), то налиниях Read bitline появляются данные из текущей ячеки. Причем ранее он говорит о том, что сама ячейка резделена тразитором G который он почему-то называет буферным. Транзистор G не является буферным, это обычный "open drain", он подтягивает к "земле" линию шины данных (Read bitline) если на выходе ячейки находится лог "1". Если линия скоммутирована (сигнал Read wordline подан), то эта лог "1" на выходе превратиться в лог "0" на линии данных (Read bitline), так как линия данных будет тоже подтянута к "земле". Но встает вопрос, а как тогда на линии данных должна появится лог "1" если на выходе ячейки присутствует лог "0" ? Ведь в этом случае транзистор G будет закрыт и ячейка будет отключена от линии данных!? Ответ прост - линии данных всегда подтянуты к положительному потенциалу через резистор подтяжки в несколько десятко в кОм, т.е. по-умолчанию на них всега присутствуют логические единицы, а лог "0" появляется только когда отпирается транзистор G (т.е. на выходе ячейки - лог "1").
Кен ничего не говорит о "потдяжках", видимо полагая, что читатель находится в курсе таких подробностей. В статье есть сноска на небольшое замечание про подтяжку шины данных без особого разъяснения.Кстати, "подтяжки" на кристаллах обычно реализованы в виде таких же транзисторов. Если затвор планарного N-канального полевого транзистора соединить с истоком, то он будет всегда заперт и в таком состоянии его сопротивление составляет десятки-сотни кОм, что и требуется для подтяжек. Конденсаторы, о которых говорит Кен, это тоже транзисторы - емкость создается затвором по отношению к стоку или истоку. А ячейка динамической памяти это один транзистор с высокой паразитной ёмкостью затвора.
3. Об архитектуре x86. Кен справедливо змечает:
А также дополнительных линий управления для доступа к дробным частям большого регистра. Если в 32-х битной архитектуре i386 на один регистр требуется пять линий упрвления, то в современной 64-х битной их, очевидно, стало еще больше. То есть всё это "легаси" это не просто "дополнительный микрокод" как многие наивно полагают, оно поедает драгоценное пространство на площади кристалла и серьезно усложняет схемотехнику. И все это добро Интел продолжает тянуть на своих полечах в светлое будущее.
Мне кажется, что пока еще достаточно мобильника со "своей" открытой ОС чтобы не попадать в ловушки слива личных данных.
Не смотрел, хороший наверное фильм.
Придерживаюсь Ваших принципов уже много лет, даже более того:
Чатами не пользуюсь, ни телеги, ни вайбера на моём мобильнике нет. Только электронная почта на собственном сервере. Мне всегда проще позвонить и поговорить с человеком. Если голосом не получается - пишу электронные письма.
Мобильником пользуюсь только для звонков и просмотра web страниц. Иногда пишу SMS. Приложений менее чем на одну страницу.
Банковских приложений на мобильнике тоже нет - пользуюсь только web версией и дебитной картой.
Дисконтными картами, кроме пожалуй "пятерочки", и дисконтными приложеньицами не пользуюсь и на вопрос "не хотите ли завести" устраивают продавцу лекбез на заданную тему. Пусть подумает на досуге.
Всякого рода "умные колонки" рассматриваю как троянского коня и в дом не пускаю. Был скандал с женой и детьми из-за этого, мне удалось их убедить отказаться от этой безусловно полезной вещицы в нашем доме.
Еду по доставке не заказываю. В магизин хожу пешком, пакеты с продуктами ношу сам.
Придерживаюсь принципа "всё своё ношу с собой". Никаких облаков. Моя инфа на моём ноутбуке или на моих конторских серверах, которые физически расположены в соседней комнате.
Чатом ГПТ не пользуюсь. Пробовал запускать болванчика на своём сервере, побаловался и выключил. Смысла в этом пока не вижу никакого. Работа доставляет удовольствое только тогда, когда ты сам решаешь сложную задачу, а не какоё-то электронное чудо насоветовало тебе бредовых решений с которыми ты будешь разбираться на порядок дольше, чем своей головой дойдешь с самого начала.
Жить таким образом становится всё сложенее. Во многие службы дозвониться голосом до человека стало невозможно - только чат с роботом, проблемы остаются нерешенными. В школе учителя норовят давать домашнее задание детям через чаты, что создает проблемы родителям. Пытаюсь учителей наказывать за такое халатное отношение к своим обязанностям (дневник у школьника никто не отменял), но всё это приобретает массовый характер и заставить неподчиняющихся мне лентяев работать я уже не могу. Заказчики пытаюся найти меня в вайберах и телеграммах, приходится долго и упорно обьяснять свою позицию, не все готовы её принять. Жена и дети поуши в чатах и соцсетях. Пытался проводить разъяснительную работу о том, что выкладывать информацию о себе в сети это не безопасно - не понимают и не принимают.
Спасибо за перевод.
Статья конечно огонь, навивает слезу и ностальгию. В СССР было всё примерно то же самое, только на 8-10 лет позже. Сразу после падения железного занавеса в стране началось массовое появление компьютерных клубов при дворцах пионеров и школах. Доступ рядовых граждан к большим ЭВМ тщательно охранялся жрецами, но на каждом рынке был уголок торгашей платами и микросхемами для сборки всевозможных клонов Радио-86РК. Кооперативы и Посылторг. Дефицит компонентов и информации. Распечатки программ и документации по языкам программирования на перфорированной бумаге. Бесплатный обмен софтом на кассетах и дискетах. Чуть позже - BBS и Fidonet. Чудесное было время. Потом пришли коммерсы, сделали персональный компьютер и коммуникации массовым явлением и всё подмяли под себя. Но сейчас и того хуже - всё унесло в облака, а у компьютеров даже нет клавиатуры. Кругом сплошной вендор-лок и обман (обмен личных данных на бусы).
Интересно, возможен ли подобный феномен в наше время или же такое бывает раз в 1000 лет ? IMHO, тема с развитием нейросетей и выходом их в опенсорс чем-то напоминает историю с персональными компьютерами.