СПОСОБ ВЫПОЛНЕНИЯ ОТКАЗОУСТОЙЧИВЫХ ВЫЧИСЛЕНИЙ
METHOD OF THE FAULT-TOLERANT CALCULATIONS PERFORMANCE

ОБЛАСТЬ ТЕХНИКИ
Настоящее изобретение относится к вычислениям, и, более конкретно, к способам и устройству для выполнения отказоустойчивых вычислений на компьютере.
УРОВЕНЬ ТЕХНИКИ ИЗОБРЕТЕНИЯ
Существует возрастающая потребность в инструментах, которые могут безопасно осуществлять управление критически важными системами, или системами, которые представляют высокий риск для здоровья человека и окружающей среды в случае выхода из строя. Помимо снижения риска путем разработки резервированных аппаратных компонентов и обеспечения того, чтобы программное обеспечение работало без ошибок, также может быть желательно эксплуатировать критически важные системы таким способом, который обеспечивает отказоустойчивые вычисления. Посредством отказоустойчивых вычислений, что означает, что никакие ошибки вычислений не будут введены в результате неисправной программной математической библиотеки или неисправного процессора на основе аппаратного обеспечения.
Различные стандарты были созданы для обеспечения отказоустойчивых вычислений, которые также называются как: уровень полноты безопасности, инструментальный уровень безопасности, инструментальные системы безопасности, проектирование средств обеспечения безопасности, целостность вычислений или математические вычисления с многократным резервированием. Отказоустойчивые вычисления обычно включают в себя математические вычисления с многократным резервированием, чтобы обеспечить обнаружение какой-либо одной ошибки вычисления. Например, рассмотрим следующее вычисление:
x=y * 2.0 (Вычисление A)
Вычисление A может осуществляться с использованием языков программирования C или C++ с использованием следующего исходного кода:
float x, y; (Исходный код A)
x=y * 2.0f.
При компиляции исходного кода A, компилятор может вызвать математические библиотеки эмуляции чисел с плавающей точкой, или если доступно, сопроцессор с плавающей точкой на основе аппаратного обеспечения. Если ошибка существует в математической библиотеке или сопроцессоре, Вычисление A не может быть вычислено правильно. Такого рода ошибка на основе математической библиотеки программного обеспечения или на основе сопроцессора аппаратного обеспечения может не обнаруживаться посредством тестирования ошибок программного обеспечения или ошибок аппаратного обеспечения. Для выполнения стандартов отказоустойчивых вычислений, описанных выше, система должна быть в состоянии обнаружить ошибки вычислений сопроцессора и математической библиотеки.
Общим способом, используемым для соответствия стандартам отказоустойчивых вычислений, является выполнение вычисления дважды либо используя уникальные математические библиотеки или независимые сопроцессоры. Например, следующий код языка программирования C или C++ осуществляет отказоустойчивое вычисление с использованием двух математических библиотек:
float x, y; (Исходный код B)
double xd, yd;
x=y*2.0f;
xd=yd *(double)2.0;
if ( x !=xd ) { <код чтобы переместить устройство в безопасное состояние> } // ошибка обнаружена!
В Исходном коде B, Вычисление A выполняется дважды, один раз с использованием математической библиотеки чисел с плавающей точкой и один раз с использованием математической библиотеки чисел двойной точности. Переменные y и yd имеют то же значение, но различные типы. Результаты x и xd затем сравниваются друг с другом, чтобы определить, если произошла ошибка. Когда Вычисление A выполняется, как предоставляется Исходным кодом B, одиночные ошибки вычислений могут обнаруживаться, и вычисление считается отказоустойчивым.
Есть много недостатков существующих методологий для обеспечения отказоустойчивого вычисления. Например, электронное устройство, которое будет использоваться для выполнения отказоустойчивого вычисления, должно принимать на себя дополнительную сложность и накладные издержки на поддержание нескольких математических библиотек или нескольких вычислений.
Вторым недостатком является то, что математические вычисления, осуществляемые при различных типах данных, могут поддерживать различные разложения или значащие цифры. Это требует сложного анализа подверженности ошибкам, чтобы обеспечить, что, учитывая диапазон входных данных, предоставляется эффективное покрытие для осуществления вычислений должным образом.
Третьим недостатком является то, что кодирование с избыточными вычислениями в исходном коде может привести к отказам в конструкции и техническом обслуживании, особенно по сравнению с исходным кодом, который включает в себя только одиночные вычисления.
Четвертый недостаток вытекает из того факта, что для отказоустойчивых вычислений может требоваться защита памяти, чтобы гарантировать, что повреждение памяти не сможет нарушить вычисления неопределяемым способом. В то время как Исходный код A может быть в состоянии идентифицировать ошибки в одном бите, дополнительная защита может быть необходима для защиты от ошибок искаженных указателей, чтобы предоставить дополнительную защиту отказоустойчивых вычислений. Например, переменные x, y, xd и yd из Исходного кода A могут размещаться в памяти рядом и таким образом являются уязвимыми в отношении возможности их совместной перезаписи посредством искаженного указателя. Например, если нули были ошибочно записаны в x, y, xd и yd посредством искаженного указателя, простое сравнение между x и xd не будет идентифицировать эту ошибку вычисления. Для защиты от ошибки искаженного указателя, с целью обеспечения отказоустойчивого вычисления, может также потребоваться дополнительное аппаратное обеспечение, такое как блок защиты памяти, дополнительное программное обеспечение, такое как инверсионное хранилище xd, yd, или специальные команды компилятора/компоновщика, чтобы обеспечить различные местоположения.
Необходим способ отказоустойчивых вычислений, который позволяет устранить множественные математические библиотеки, множественные математические ускорители аппаратного обеспечения, подверженный ошибкам анализ разложения чисел с фиксированной точкой и искаженные указатели. В идеале упомянутый способ отказоустойчивых вычислений будет легко осуществить и поддерживать, требуя небольшой модификации исходного кода.
СУЩНОСТЬ ЗАЯВКИ
Предоставляется способ для выполнения отказоустойчивого вычисления. Упомянутый способ включает в себя этап выполнения первого вычисления для генерирования первого результата. Упомянутый способ далее включает в себя этап выполнения второго вычисления с использованием скаляра и первого вычисления для генерирования второго результата, упомянутое второе вычисление включает в себя умножение первого вычисления на скаляр для генерирования масштабированного результата и деление упомянутого масштабированного результата на скаляр для генерирования второго результата. Упомянутый способ далее включает в себя этап сравнения того, являются ли упомянутый первый результат и упомянутый второй результат эквивалентными.
Предоставляется устройство для выполнения отказоустойчивого вычисления для работы аппаратного обеспечения. Упомянутое устройство включает в себя электронику, сконфигурированную для выполнения первого вычисления для генерирования первого результата. Упомянутая электроника дополнительно сконфигурирована для выполнения второго вычисления с использованием скаляра и первого вычисления для генерирования второго результата. Упомянутое второе вычисление включает в себя умножение первого вычисления на скаляр для генерирования масштабированного результата. Упомянутое второе вычисление дополнительно включает в себя деление упомянутого масштабированного результата на скаляр для генерирования второго результата. Упомянутая электроника дополнительно сконфигурирована, чтобы указывать, является ли упомянутый первый результат и упомянутый второй результат эквивалентными.
Предоставляется способ компиляции кода для работы аппаратного обеспечения отказоустойчивым способом. Упомянутый способ включает в себя этап идентификации первого вычисления, сконфигурированного для генерирования первого результата. Упомянутый способ далее включает в себя этап генерирования второго вычисления, включающего в себя первое вычисление и скаляр, упомянутое второе вычисление генерирует второй результат. Упомянутое второе вычисление включает в себя умножение первого вычисления на скаляр для генерирования масштабированного результата. Упомянутое второе вычисление дополнительно включает в себя деление упомянутого масштабированного результата на скаляр для генерирования второго результата. Упомянутый способ далее включает в себя этап генерирования индикации того, являются ли упомянутый первый результат и упомянутый второй результат эквивалентными. Упомянутый способ далее включает в себя этап включения упомянутого первого вычисления, упомянутого второго вычисления и упомянутой индикации в выполняемую программу.
АСПЕКТЫ ЗАЯВКИ
В одном варианте осуществления упомянутого способа, способ содержит этап выполнения безопасной операции, если упомянутый первый результат и упомянутый второй результат не эквивалентны.
В одном варианте осуществления упомянутого способа, упомянутое первое вычисление включает в себя одну или более операций, упомянутые одна или более операции включают в себя итоговую операцию, и при этом упомянутое второе вычисление включает в себя умножение упомянутого скаляра перед упомянутой итоговой операцией.
В одном варианте осуществления упомянутого способа, первый результат имеет первое двоичное представление, и упомянутое масштабированное значение имеет второе двоичное представление, и упомянутый скаляр выбирается, чтобы максимизировать разницу между упомянутым первым двоичным представлением и упомянутым вторым двоичным представлением.
В одном варианте осуществления упомянутого способа, упомянутый скаляр является целым числом, числом с плавающей точкой или числом двойной точности.
В одном варианте осуществления упомянутого способа, упомянутый скаляр является иррациональным числом.
В одном варианте осуществления упомянутого способа, разница между упомянутым скаляром и 1.0 минимизируется, чтобы сохранить разложение масштабированного результата.
В одном варианте осуществления упомянутого способа, упомянутый способ далее включает в себя этап добавления смещения к первому результату, если упомянутый первый результат определяется равным нулю.
В одном варианте осуществления упомянутого устройства, упомянутая электроника дополнительно сконфигурирована для выполнения безопасной операции, если упомянутый первый результат и упомянутый второй результат не эквивалентны.
В одном варианте осуществления упомянутого устройства, первое вычисление включает в себя одну или более операций, упомянутые одна или более операции включают в себя итоговую операцию, и при этом упомянутое второе вычисление включает в себя умножение упомянутого скаляра перед упомянутой итоговой операцией.
В одном варианте осуществления упомянутого устройства, первый результат имеет первое двоичное представление, и упомянутое масштабированное значение имеет второе двоичное представление, и упомянутый скаляр выбирается, чтобы максимизировать разницу между упомянутым первым двоичным представлением и упомянутым вторым двоичным представлением.
В одном варианте осуществления упомянутого устройства, упомянутый скаляр является целым числом, числом с плавающей точкой или числом двойной точности.
В одном варианте осуществления упомянутого устройства, упомянутый скаляр является иррациональным числом.
В одном варианте осуществления упомянутого устройства, разница между упомянутым скаляром и 1.0 минимизируется, чтобы сохранить разложение масштабированного результата.
В одном варианте осуществления упомянутого устройства, упомянутая электроника дополнительно сконфигурирована для добавления смещения к первому результату, если упомянутый первый результат определяется равным нулю.
В одном варианте осуществления упомянутого способа, генерирование упомянутого второго вычисления, включающего в себя первое вычисление и упомянутый скаляр, и генерирование индикации того, являются ли упомянутый первый результат и упомянутый второй результат эквивалентными, включает в себя определение класса.
В одном варианте осуществления упомянутого способа, упомянутый способ далее включает в себя этап сохранения первого результата и второго результата в удаленных участках памяти.
В одном варианте осуществления упомянутого способа, упомянутый способ далее включает в себя этап сохранения первого вычисления и второго вычисления в удаленных участках памяти.
В одном варианте осуществления упомянутого способа, включение упомянутого первого вычисления, упомянутого второго вычисления и упомянутой индикации в выполняемую программу включает в себя компиляцию выполняемой программы для запуска на одном процессоре.
В одном варианте осуществления упомянутого способа, включение упомянутого первого вычисления, упомянутого второго вычисления и упомянутой индикации в выполняемую программу включает в себя компиляцию выполняемой программы для использования одной математической библиотеки.
В одном варианте осуществления упомянутого способа, упомянутый способ далее включает в себя этап предварительного тестирования математической библиотеки для обнаружения ошибок вычислений.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Одинаковые ссылочные позиции представляет одинаковые элементы на всех чертежах. Чертежи не обязательно выполнены в масштабе.
Фиг. 1 - блок-схема отказоустойчивой системы 100 в соответствии с вариантом осуществления Заявки.
Фиг. 2 - алгоритм 200 отказоустойчивых вычислений в соответствии с вариантом осуществления Заявки.
Фиг. 3 - способ 300 отказоустойчивых вычислений в соответствии с вариантом осуществления Заявки.
Фиг. 4 - способ 400 компиляции отказоустойчивых вычислений в соответствии с вариантом осуществления Заявки.
ПОДРОБНОЕ ОПИСАНИЕ
Фиг. 1-4 и следующее описание изображают конкретные примеры для пояснения специалистам в данной области техники, как осуществить и использовать наилучший вариант Заявки. Для иллюстрации принципов изобретения некоторые общепринятые аспекты были упрощены или пропущены. Специалистам в данной области техники должны быть понятны варианты этих примеров, которые входят в объем Заявки. Специалистам в данной области техники должно быть понятно, что описанные ниже функциональные возможности могут быть объединены различными способами для образования многочисленных вариантов Заявки. В результате Заявка не ограничивается конкретными примерами, описанными ниже, а только пунктами формулы изобретения и их эквивалентами.
На Фиг. 1 показана блок-схема отказоустойчивой системы 100 в соответствии с вариантом осуществления изобретения. Отказоустойчивая система 100 включает в себя аппаратное обеспечение 102, электронику 104 и линию связи 106 между аппаратным обеспечением и программным обеспечением. Отказоустойчивая система 100 может включать в себя инструменты и/или оборудование, которое имеет критическое значение для здоровья и безопасности людей и/или окружающей среды и, следовательно, она должно работать в отказоустойчивой среде.
Аппаратное обеспечение 102 может работать, управляться, наблюдаться и считываться посредством электроники 104. Аппаратное обеспечение 102 может включать в себя любое работающее или считываемое электронным образом оборудование, для которого очень желательно обеспечить отказоустойчивую работу. Например, аппаратное обеспечение 102 может быть компонентом системы, имеющейся в аварийно-спасательных службах, в системе противопожарной защиты, в области телекоммуникаций, в медицинском устройстве, в ядерном реакторе, в авиации или в космической технике. Аппаратное обеспечение 102 может также включаться в другие прикладные технологии, что должно быть понятно специалистам в данной области техники. В одном варианте осуществления, аппаратное обеспечение 102 может включать в себя устройство мониторинга или измерения. Например, аппаратное обеспечение 102 может включать в себя вибрационный измеритель потока, который может определить скорость потока, плотность и вязкость жидкости.
Сигналы могут передаваться в обратном и прямом направлении между аппаратным обеспечением 102 и электроникой 104 по линии 106 связи. Например, электроника 104 может передавать сигналы, чтобы сконфигурировать и дать команду аппаратному обеспечению 102 или запросить данные по линии 106 связи. Аппаратное обеспечение 102 может кроме того передавать данные для электроники 104 при запросе событий внутренних по отношению к аппаратному обеспечению 102. Следует понимать, что в вариантах осуществления линия 106 связи может быть проводной или беспроводной, как будет понятно специалистам в данной области техники.
Электроника 104 может дополнительно включать в себя интерфейс 112 и систему 108 обработки. Система 108 обработки может дополнительно включать в себя систему 110 хранения. Электроника 104 может обрабатывать сигналы, принимаемые от аппаратного обеспечения 102 для того, чтобы определять различные свойства отказоустойчивой системы 100.
Интерфейс 112 может принимать сигналы датчиков по линии 106 связи или по дополнительным линиям. Интерфейс 112 может выполнять любое необходимое или требуемое преобразование сигналов, такое как любой способ форматирования, усиления, буферизации и т.д. Альтернативно, некоторые или все виды преобразования сигналов могут выполняться в системе 108 обработки. Кроме того, интерфейс 112 может обеспечивать связь между электроникой 104 и внешними устройствами. Интерфейс 112 может быть выполнен с возможностью любого способа электронной, оптической или беспроводной связи. Кроме того, интерфейс 112 может позволять соединения между электроникой 104 и внешними устройствами. Интерфейс 112 может быть выполнен с возможностью любого способа электронной, оптической или беспроводной связи.
Интерфейс 112 в одном варианте осуществления может включать в себя цифровой преобразователь (не показан), при этом сигналы датчиков, принимаемые по линии 106 связи, содержат аналоговые сигналы датчиков. Упомянутый цифровой преобразователь может осуществлять дискретизацию и преобразовывать в цифровую форму упомянутые аналоговые сигналы датчиков и производить цифровые сигналы датчиков. Упомянутый цифровой преобразователь может также выполнять любую необходимую децимацию, при этом цифровой сигнал датчика подвергается децимации для того, чтобы уменьшить объем требуемой обработки сигнала и уменьшить время обработки.
Система 108 обработки проводит операции электроники 104 и обрабатывает измерения от и команды к аппаратному обеспечению 102. Система 108 обработки может также выполнять оду или более алгоритмов обработки, таких как алгоритм 200 отказоустойчивых вычислений.
Система 108 обработки может содержать компьютер общего назначения, микропроцессорную систему, логическую схему или любое другое устройство обработки общего назначения или специализированное, способное выполнять функции, описанные здесь. Система 108 обработки может быть распределенной среди нескольких устройств обработки. Система 108 обработки может включать в себя любой вид интегральной или независимой электронной среды хранения, такой как система 110 хранения.
Система 110 хранения может хранить рабочие параметры и данные, алгоритмы программного обеспечения, значения констант и значения переменных. Система 110 хранения может содержать первичную или главную память, такую как оперативная память (random access memory, RAM). В вариантах осуществления, система 110 хранения может включать в себя накопитель на жестком диске, съемное устройство хранения, карту памяти, дисковод гибких дисков, накопитель на магнитной ленте, дисковод компакт-дисков, цифровой универсальный диск, диск Blue-ray, оптическое устройство хранения, устройство резервного копирования на ленту или любой другой машиночитаемый или используемый компьютером носитель для хранения.
Следует понимать, что электроника 104 может включать в себя другие различные компоненты и функции, которые, как правило, известны в данной области техники. Эти дополнительные функциональные возможности пропускаются из описания и чертежей для целей краткости. Следовательно, настоящее изобретение не должно ограничиваться конкретными изображенными и рассматриваемыми вариантами осуществления.
В то время как Фиг. 1 изображает только одну единицу аппаратного обеспечения 102 в соединении с электроникой 104, специалистам в данной области техники будет очевидно, что множество узлов аппаратного обеспечения могут соединяться с электроникой 104. Дополнительно, электроника 104 может работать с множеством различных типов аппаратного обеспечения. Каждый узел аппаратного обеспечения, такой как аппаратное обеспечение 102 в соединении с электроникой 104, может иметь соответствующую область системы 110 хранения, выделенную для обеспечения работы этого аппаратного обеспечения.
Система 110 хранения может хранить переменные, которые могут использоваться алгоритмом 200 отказоустойчивых вычислений для безопасной работы аппаратного обеспечения 102. Например, система 110 хранения может хранить первый результат 214, скаляр 216, второй результат 220 и индикатор 222 ошибки. Система 110 хранения может также хранить функции, которые могут использоваться алгоритмом 200 отказоустойчивых вычислений для безопасной работы аппаратного обеспечения 102. Например, система 110 хранения может хранить первое вычисление 212, второе вычисление 218, логику 202 первого вычисления, логику 204 второго вычисления, логику 206 сравнения и логику 208 безопасной работы. Система 110 хранения может также хранить алгоритм 200 отказоустойчивых вычислений.
В одном варианте осуществления, электроника 104 может инициировать и обеспечивать работу алгоритма 200 отказоустойчивых вычислений для безопасной работы аппаратного обеспечения 102. В вариантах осуществления, алгоритм 200 отказоустойчивых вычислений может выполнять избыточные математические операции, чтобы обеспечить безопасную работу и интерпретацию данных от аппаратного обеспечения 102.
Фиг. 2 изображает алгоритм 200 отказоустойчивых вычислений, в соответствии с вариантом осуществления Заявки. Алгоритм 200 отказоустойчивых вычислений включает в себя логику 202 первого вычисления, логику 204 второго вычисления, логику 206 сравнения и логику 208 безопасной работы.
Алгоритм 200 отказоустойчивых вычислений начинает работу с логики 202 первого вычисления. Логика 202 первого вычисления принимает первое вычисление 212 и генерирует первый результат 214. Первое вычисление 212 включает в себя одну или более математические операции, которые могут выполняться на процессоре отказоустойчивым способом. Например, логика 202 первого вычисления может включать в себя следующий неисключительный список математических операций: сложение, вычитание, умножение, деление и т.д. Первый результат 214 является результатом выполнения первого вычисления 212 в системе 108 обработки. В вариантах осуществления, первый результат 214 может быть числом, представленным в любой форме или любым типом данных, включающим следующий неисключительный список: целое число, число со знаком, число без знака, короткое число, длинное число, число с плавающей точкой, число с двойной точностью или любой другой тип данных, известный специалистам в данной области техники. В простом примере, первое вычисление 212 может включать в себя следующую логику:
x1=y1 * 2.0 (Вычисление B).
В примере Вычисления B, первое вычисление 212 является вычислением y1*2.0 и первый результат 214 равен x1.
Алгоритм 200 отказоустойчивых вычислений продолжается логикой 204 второго вычисления. Логика 204 второго вычисления принимает первое вычисление 212 и скаляр 216 и генерирует второе вычисление 218 и второй результат 220. Скаляр 216 является числом, которое может использоваться как вспомогательное средство при выполнении отказоустойчивых вычислений. Скаляр 216 может быть любым типом данных, включающим в себя, но не ограничивающимся целым числом, константой, числом со знаком, числом без знака, числом с плавающей точкой, числом двойной точности, коротким числом, длинным числом или любым другим типом обычно известным специалистам в данной области техники.
Как упоминалось ранее, первое вычисление 212 включает в себя одну или более математические операции. Логика 204 второго вычисления генерирует второе вычисление 218 посредством включения дополнительных математических операций умножения и деления на скаляр 216. Исходный код B предоставляет пример осуществления логики 204 второго вычисления:
xl=y1 * 2.0f; (Исходный код B)
x2=((y2 * 1.2f) * 2.0f)/1.2f).
В Исходном коде B, y1 * 2.0f представляет первое вычисление 212, ((y2 * 1.2f) * 2.0f)/1.2f) представляет второе вычисление 218, скаляр 216 равен 1.2, первый результат 214 представляется посредством x1 и второй результат 220 представляется посредством x2. Переменные y1 и y2 в Исходном коде B имеют то же значение и в вариантах осуществления y1 и y2 могут иметь те же или различные типы данных. В Исходном коде B показано, что первое вычисление 212 включает в себя умножение переменной y1 на константу 2.0f. Логика 204 второго вычисления масштабирует первое вычисление 212 посредством умножения первого вычисления 212 на скаляр 216, упомянутый скаляр составляет 1.2f в примере Исходного кода B, генерируя масштабированный результат. Специалисты в данной области техники поймут, что скаляр 216 может умножаться перед, после или между любой из одной или более операциями, включаемыми в первое вычисление 212, чтобы генерировать масштабированный результат. В варианте осуществления, операция умножения на скаляр 216 может быть предусмотрена перед итоговой операцией при выполнении первого вычисления 212, чтобы генерировать масштабированный результат. Логика 204 второго вычисления далее трансформирует первое вычисление 212 посредством деления упомянутого масштабированного результата на скаляр 216, генерируя второй результат 220. Второй результат 220 может быть любым типом данных, включающим в себя, но не ограничивающимся целым числом, константой, числом со знаком, числом без знака, числом с плавающей точкой, числом двойной точности, коротким числом, длинным числом или любым другим типом обычно известным специалистам в данной области техники.
Следует понимать, что первое вычисление 212 и второе вычисление 218 предоставляют избыточные математические вычисления, с упомянутым вторым вычислением, просто являющимся упомянутым первым вычислением, умноженным и деленным на скаляр 216. Несмотря на тот факт, что упомянутые первое и второе вычисления 212 и 218 могут выполняться на том же процессоре или с помощью той же математической библиотеки, они выполняются в отношении различных наборов чисел. Следовательно, в большинстве случаев, первое и второе вычисления 212 и 218 представляют уникальные математические вычисления. В примере Исходного кода B, первое вычисление 212 является просто операцией умножения. Это не предназначено для ограничения, однако. В дополнительных вариантах осуществления, первое вычисление 212 может включать в себя любое число математических операций.
Когда переменные, используемые в первом вычислении 212 равны нулю, однако, первое вычисление 212 и второе вычисление 218 не обязательно могут представлять уникальные математические вычисления. Например, если y1 и y2 Исходного кода B равны нулю, то использование скаляра 216 не приведет к уникальным вычислениям. В таких случаях, логика 204 второго вычисления может использовать как смещение, так и скаляр, чтобы предохранять от избыточности вычислений. Исходный код C предоставляет пример осуществления использования как смещения, так и скаляра:
xl =y1*2.0f; (Исходный код C)
x2=((((y2+z)* 1.2f)*2.0f )/1.2f) -(z*2.0f).
В Исходном коде C, z представляет смещение. Следовательно, если y1 и y2 равны нулю, уникальность первого и второго вычислений 212 и 218 будет зафиксированной.
Однако использование смещения может предоставить дополнительную сложность кода и время запуска программного обеспечения. Альтернативой включению смещения является предварительное тестирование математической библиотеки или сопроцессора с целью, чтобы подтвердить успешность вычисления в том случае, когда переменные, используемые в упомянутых первом и втором вычисления 212 и 218 равны нулю.
Следует отметить, что выбор скаляра 216 требует анализа и может зависеть от математической библиотеки и/или используемого сопроцессора. Вообще говоря, значение скаляра 216 не должно устанавливаться на 1 или ноль, поскольку такие значения не обеспечат уникальных первого и второго вычислений 212 и 218. В одном варианте осуществления, скаляр 216 выбирается так, чтобы максимизировать разницу между двоичным представлением первого результата 214 и двоичным представлением масштабированного результата, чтобы помочь в обнаружении искаженного вычисления.
В вариантах осуществления, скаляр 216 может выбираться, чтобы быть ближе к 1.0 для сохранения разложения первого и второго вычислений 212 и 218 для математических операций на основе целых чисел. В вариантах осуществления, скаляр 216 может быть иррациональным числом. Например, значение 2.222222 для скаляра 216 является обоснованным выбором в формате представления чисел с плавающей точкой по стандарту IEEE-754. Как иррациональное число в двоичной системе, значение 2.222222 обеспечивает совершенно различные мантиссы, которые могут обеспечивать большие различия между битовыми представлениями чисел. Примеры чисел и их масштабированных значений предоставляются ниже с использованием представления по стандарту IEEE-754 и скаляра 2.222222:
1.000000 (в шестнадцатеричном представлении: 3F800000)
1.000000 X 2.222222=2.222222 (в шестнадцатеричном представлении: 400E38E3)
1000000 (в шестнадцатеричном представлении: 49742400)
1000000 X 2.222222=2222222 (в шестнадцатеричном представлении: 4A07A238)
0.4500000 (в шестнадцатеричном представлении: 3EE66666)
0.4500000 X 2.222222=1.000000 (в шестнадцатеричном представлении: 3F800000).
Выбор значения для скаляра 216, которое сохраняет разложение упомянутых первого и второго вычислений 212 и 218, таким образом, может обеспечить преимущество помощи обнаружения искаженных вычислений.
Алгоритм 200 отказоустойчивых вычислений продолжается логикой 206 сравнения. Логика 206 сравнения принимает первый результат 214 и второй результат 220 и генерирует индикатор 222 ошибки. Логика 206 сравнения сравнивает первый результат 214 со вторым результатом 220, чтобы определить, совпадают ли результаты. Поскольку первое вычисление 212 и второе вычисление 218 могут выполняться на том же сопроцессоре и/или с помощью той же математической библиотеки, варианты осуществления Заявки обеспечивают преимущество по сравнению с известными ранее способами в том, что первый результат 214 и второй результат 220 могут быть того же типа данных. Это может существенно упростить операцию сравнения, устраняя необходимость выполнения подверженного ошибкам анализа разложения при сравнении значений различных типов. Если упомянутые первый и второй результаты 214 и 220 являются теми же, тогда вычисление считается отказоустойчивым. Если упомянутые первый и второй результаты 214 и 220 не совпадают, тогда может существовать состояние ошибки, и логика 206 сравнения может указывать, что существует состояние ошибки посредством установки индикатора 222 ошибки. В вариантах осуществления, индикатор 222 ошибки может сообщаться пользователю через дисплей или электронное сообщение.
Алгоритм 200 отказоустойчивых вычислений продолжается логикой 208 безопасной работы. Логика 208 безопасной работы принимает индикатор 222 ошибки. Если индикатор 222 ошибки указывает, что произошла ошибка, то логика 208 безопасной работы может выполнять операции для предотвращения повреждения или нанесения вреда людям или окружающей среде, которые могут произойти из-за неудавшихся вычислений. В вариантах осуществления, логика 208 безопасной работы может инициировать процедуру восстановления безопасности для аппаратного обеспечения 102. В другом варианте осуществления, логика 208 безопасной работы может предупреждать операторов о том, что измерения, принимаемые от аппаратного обеспечения 102, могут быть ошибочными.
Фиг. 3 изображает способ 300 отказоустойчивых вычислений. Способ 300 отказоустойчивых вычислений является примерным вариантом осуществления алгоритма 200 отказоустойчивых вычислений. Система 108 обработки может быть сконфигурирована для выполнения необходимой обработки сигналов и данных для выполнения способа 300 отказоустойчивых вычислений. Способ 300 отказоустойчивых вычислений начинает работу с этапа 302. На этапе 302, первое вычисление выполняется для генерирования первого результата. Например, первое вычисление 212 может выполняться посредством логики 202 первого вычисления, чтобы генерировать первый результат 214, как обсуждалось выше.
Способ 300 отказоустойчивых вычислений продолжается этапом 304. На этапе 304, второе вычисление выполняется с использованием скаляра и первого вычисления для генерирования второго результата, упомянутое второе вычисление включает в себя умножение первого вычисления на скаляр для генерирования масштабированного результата и деление упомянутого масштабированного результата на скаляр для генерирования второго результата. Например, логика 204 второго вычисления может принимать скаляр 216, первое вычисление 212 и производить второе вычисление 218. Второй результат 220 может включать в себя результаты выполнения второго вычисления 218 на системе 108 обработки, как обсуждалось выше.
Способ 300 отказоустойчивых вычислений продолжается этапом 306. На этапе 306, указывается, являются ли упомянутый первый результат и упомянутый второй результат эквивалентными. Например, логика 206 сравнения может принимать первый результат 214 и второй результат 220 и генерировать индикатор 222 ошибки, как описано выше.
Фиг. 4 изображает способ 400 компиляции отказоустойчивых вычислений. Способ 400 компиляции отказоустойчивых вычислений может выполняться для компиляции кода в выполняемое программное обеспечение, которое может выполнять отказоустойчивые вычисления на системе 108 обработки. Например, способ 400 компиляции отказоустойчивых вычислений может выполняться для компиляции, кода сконфигурирован для выполнения алгоритма 200 отказоустойчивых вычислений или способа 300 отказоустойчивых вычислений.
Способ 400 начинает работу с этапа 402. На этапе 402 первое вычисление идентифицируется, что сконфигурировано для генерирования первого результата. Например, первое вычисление 212 или Вычисление A может быть идентифицировано с помощью компилятора.
Способ 400 компиляции отказоустойчивых вычислений продолжается этапом 404. На этапе 404 второе вычисление генерируется, включая в себя первое вычисление и скаляр, упомянутое второе вычисление генерирует второй результат, упомянутое второе вычисление включает в себя умножение первого вычисления на скаляр для генерирования масштабированного результата и деление упомянутого масштабированного результата на скаляр для генерирования второго результата. Например, логика 204 второго вычисления может принимать первое вычисление 212 и скаляр 216, чтобы генерировать второе вычисление 218 и второй результат 220.
Способ 400 компиляции отказоустойчивых вычислений продолжается этапом 406. На этапе 406 генерируется индикация того, является ли упомянутый первый результат и упомянутый второй результат эквивалентными. Например, логика 206 сравнения может генерировать индикатор 222 ошибки, как обсуждалось выше.
Способ 400 компиляции отказоустойчивых вычислений продолжается этапом 408. На этапе 408 упомянутое первое вычисление, упомянутое второе вычисление и упомянутая индикация включаются в выполняемую программу. В вариантах осуществления, упомянутая выполняемая программа может компилироваться, чтобы запускаться на любом типе компьютера обычно известном специалистам в данной области техники. В вариантах осуществления, упомянутое программное обеспечение может быть выполняемой программой программного обеспечения или библиотекой, доступной другим выполняемым программам программного обеспечения.
Очевидно, что написание программного кода, включающего этапы 402, 404 и 406 для каждого отказоустойчивого вычисления, может значительно осложнить работу инженеров программного обеспечения. Дополнительное осложнение может негативно повлиять на качество и надежность конечного программного продукта. Следовательно, в вариантах осуществления этап 408 далее предусматривает, что функциональность этапов 404 и 406 может автоматически генерироваться во время компиляции программного обеспечения. Посредством генерирования этого кода ʺпод капотомʺ во время компиляции упомянутого программного обеспечения, могут быть предоставлены преимущества безошибочного, простого в обслуживании, надежного программного кода. Например, инженер программного обеспечения может написать Исходный код A, и функциональные возможности Исходного кода B могут включаться в программное обеспечение конечного продукта, при выполнении во время компиляции. Исходный код A легче понять путем проверки, гораздо менее подвержен ошибкам для осуществления и легче переносится на другие процессоры или вычислительные системы, чем Исходный код B.
Путем использования функциональных возможностей целевого языка программирования, такого как C, C++, Java или любого другого языка программирования, известного специалистам в данной области техники, и использования компилятора, возможно инкапсулировать функциональные возможности Исходного кода B при компиляции Исходного кода A. Например, в языках программирования C и C++, класс может быть определен и использован для инкапсуляции первого вычисления 212, второго вычисления 218 и сравнения между первым и вторым результатами 214, 220. Большинство компьютерных языков предоставляют некоторую поддержку для этого типа инкапсуляции и скрытия сложности.
В вариантах осуществления, этап 408 может дополнительно обеспечивать отказоустойчивые вычисления путем обеспечения сохранения результатов независимых вычислений в областях памяти, которые удалены друг от друга. Например, любая комбинация первого вычисления 212, первого результата 214, скаляра 216, второго вычисления 218 и второго результата 220 может быть записана в несмежных и/или удаленных областях памяти. Несмежные и/или удаленные области памяти могут включать в себя области памяти с несмежными адресами в том же пространстве памяти, или памяти, имеющейся в различных компонентах аппаратного обеспечения. В вариантах осуществления, некоторая память может включать в себя дополнительное аппаратное обеспечение и/или средства защиты программного обеспечения, что понятно специалистам в данной области техники. Очевидно, что посредством сохранения результатов операций, предоставляемых на этапах 402, 404 и 406, в удаленных областях, упомянутые вычисления могут быть дополнительно защищены против искаженных указателей.
В вариантах осуществления, этап 408 может включать в себя упомянутое первое вычисление, упомянутое второе вычисление и упомянутую индикацию в выполняемой программе, которая работает на одном процессоре. В дополнительных вариантах осуществления, этап 408 может включать в себя упомянутое первое вычисление, упомянутое второе вычисление и упомянутую индикацию в выполняемой программе, которая использует одну математическую библиотеку. В дополнительных вариантах осуществления, этап 408 может включать в себя предварительное тестирование математической библиотеки на наличие ошибок.
Подробные описания приведенных выше вариантов осуществления не являются исчерпывающими описаниями всех вариантов осуществления, предусмотренных изобретением в рамках объема Заявки. В действительности, специалистам в данной области техники понятно, что конкретные элементы описанных выше вариантов осуществления могут быть различным образом объединены или исключены для создания дополнительных вариантов осуществления, и такие дополнительные варианты осуществления попадают в объем Заявки. Также очевидно для специалистов в данной области техники, что описанные выше варианты осуществления могут быть скомбинированы полностью или в части для создания дополнительных вариантов осуществления в пределах объема и идей изобретения.
Таким образом, хотя конкретные варианты осуществления Заявки и примеры для Заявки описаны здесь в иллюстративных целях, различные эквивалентные модификации возможны в пределах объема Заявки, что понятно специалистам в данной области техники. Идеи, предоставленные здесь, могут применяться и в других случаях, и не только в вариантах осуществления, описанных выше и изображенных на прилагаемых чертежах. Соответственно, объем Заявки должен определяться нижеследующими пунктами формулы изобретения.