RU2276805C2 - Method and device for separating integer and fractional components from floating point data - Google Patents
Method and device for separating integer and fractional components from floating point data Download PDFInfo
- Publication number
- RU2276805C2 RU2276805C2 RU2004104325/09A RU2004104325A RU2276805C2 RU 2276805 C2 RU2276805 C2 RU 2276805C2 RU 2004104325/09 A RU2004104325/09 A RU 2004104325/09A RU 2004104325 A RU2004104325 A RU 2004104325A RU 2276805 C2 RU2276805 C2 RU 2276805C2
- Authority
- RU
- Russia
- Prior art keywords
- value
- constant
- floating point
- integer
- floating
- Prior art date
Links
Images
Abstract
Description
ПРЕДПОСЫЛКИ ИЗОБРЕТЕНИЯBACKGROUND OF THE INVENTION
Область техники, к которой относится изобретениеFIELD OF THE INVENTION
Изобретение связано с вычислительной обработкой данных и, более конкретно, относится к методу и устройству для сокращения числа операций с плавающей точкой, необходимых для извлечения целой и дробной компонент.The invention relates to computational data processing and, more specifically, relates to a method and apparatus for reducing the number of floating-point operations required to extract an integer and fractional component.
Уровень техникиState of the art
Во многих системах обработки данных, существующих в настоящий момент, таких как персональные компьютеры (ПК), математические вычисления играют важную роль. Численные алгоритмы для вычисления значений многих математических функций, таких как операция возведения в степень и тригонометрические операции, требуют разложения чисел с плавающей точкой на соответствующие целые и дробные части. Такие операции могут использоваться для редукции аргументов, указателей к значениям таблицы или для построения результата из некоторого числа составных частей. Разложения чисел с плавающей точкой на целые и дробные части часто встречаются в критических вычислительных путях. В результате время на выполнение вычислений значений математических функций часто ограничено.In many current data processing systems, such as personal computers (PCs), mathematical calculations play an important role. Numerical algorithms for calculating the values of many mathematical functions, such as exponentiation and trigonometric operations, require decomposition of floating-point numbers into corresponding integer and fractional parts. Such operations can be used to reduce arguments, pointers to table values, or to construct a result from a number of components. Decompositions of floating point numbers into integer and fractional parts are often found in critical computational paths. As a result, the time to perform calculations of the values of mathematical functions is often limited.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙBRIEF DESCRIPTION OF THE DRAWINGS
Настоящее изобретение иллюстрируется с помощью примера и не ограничивается приведенными поясняющими чертежами, в которых одинаковые ссылки обозначают одинаковые элементы. Необходимо отметить, что ссылки на "одну" или "некоторую" реализацию в данном описании не обязательно относятся к одной и той же реализации и подобные ссылки относятся, по меньшей мере, к одной реализации.The present invention is illustrated by way of example and is not limited to the accompanying explanatory drawings, in which like references denote like elements. It should be noted that references to “one” or “some” implementation in this description do not necessarily refer to the same implementation, and similar links refer to at least one implementation.
Фиг.1 иллюстрирует стандарт ANSI/IEEE 754-1985, стандарт IEEE для двоичной арифметики с плавающей точкой, IEEE, Нью-Йорк 1985 (IEEE) представление числа с плавающей точкой с одинарной точностью, представление с двойной точностью и представление с расширенной двойной точностью.Figure 1 illustrates the ANSI / IEEE 754-1985 standard, the IEEE standard for binary floating-point arithmetic, IEEE, New York 1985 (IEEE) single-precision floating-point representation, double-precision representation, and extended double-precision representation.
Фиг.2 изображает типовой способ вычисления целых чисел и чисел с плавающей точкой для некоторых равенств.Figure 2 depicts a typical method for calculating integers and floating point numbers for some equalities.
Фиг.3 иллюстрирует одну реализацию настоящего изобретения, в которой уменьшено число операций с плавающей точкой, необходимых для вычисления целой и дробной компонент.Figure 3 illustrates one implementation of the present invention in which the number of floating-point operations necessary to calculate the integer and fractional components is reduced.
Фиг.4 содержит одну реализацию изобретения, используемую для обобщения выбора константы S.Figure 4 contains one implementation of the invention used to generalize the choice of the constant S.
Фиг.5 иллюстрирует типовой процесс загрузки констант и вычисления необходимых коэффициентов для разложения чисел с плавающей точкой на целую и дробную части.Figure 5 illustrates a typical process of loading constants and calculating the necessary coefficients for decomposing floating-point numbers into integer and fractional parts.
Фиг.6А-Б показывает некоторую реализацию изобретения для загрузки констант и осуществления разложения чисел с плавающей точкой на целую и дробную части.6A-B show some embodiment of the invention for loading constants and decomposing floating-point numbers into integer and fractional parts.
Фиг.7 показывает некоторую реализацию настоящего изобретения, имеющую вычислительную компоненту.7 shows some implementation of the present invention having a computing component.
ПОДРОБНОЕ ОПИСАНИЕ ИЗОБРЕТЕНИЯDETAILED DESCRIPTION OF THE INVENTION
В целом изобретение касается способа и устройства уменьшения числа операций с плавающей точкой, необходимых для вычисления целой и дробной компонент. Далее со ссылками на фигуры будут описываться типичные реализации настоящего изобретения. Типичные реализации выбраны для того, чтобы проиллюстрировать изобретение и они не должны рассматриваться в качестве какого-либо ограничения рамок изобретения.In General, the invention relates to a method and apparatus for reducing the number of floating point operations necessary for calculating the integer and fractional components. Next, with reference to the figures, typical implementations of the present invention will be described. Typical implementations are selected in order to illustrate the invention and should not be construed as limiting the scope of the invention.
Фиг.1 иллюстрирует стандарт ANSI/IEEE 754-1985, стандарт IEEE для двоичной арифметики с плавающей точкой, IEEE, Нью-Йорк 1985 (IEEE) изображения для представления 105 числа с плавающей точкой с одинарной точностью, представления 106 с двойной точностью и представления 107 с расширенной двойной точностью. Для представления 105 IEEE с одинарной точностью необходимо 32-битовое слово. Данное 32-битовое слово может быть представлено битами, пронумерованными слева направо (от 0 до 31). Первый бит, помеченный как S 110, является битом для знака. Следующие восемь бит, помеченные как Е 120, являются битами показателя степени. Последние 23 бита, с 9 по 31 бит, помеченные как F 110, служат для представления значащей части числа (также называемой мантиссой).1 illustrates the ANSI / IEEE 754-1985 standard, the IEEE standard for binary floating-point arithmetic, IEEE, New York 1985 (IEEE) images for representing 105 single-precision floating-point numbers, double-precision representations 106, and 107 representations with extended double precision. A single-precision representation of IEEE 105 requires a 32-bit word. This 32-bit word can be represented by bits numbered from left to right (from 0 to 31). The first bit, marked as S 110, is a bit for the sign. The next eight bits, labeled E 120, are exponent bits. The last 23 bits, from 9 to 31 bits, labeled F 110, are used to represent a significant part of the number (also called mantissa).
Для стандарта IEEE в представлении 106 числа с двойной точностью бит S 110 является битом для знака, биты Е 140 являются битами показателя степени (11 бит), и последние биты представления F 150 являются 52-ми битами представления значащей части числа (также называемой мантиссой).For the IEEE standard in double precision representation of a 106 number, the S 110 bit is a sign bit, the E 140 bits are exponent bits (11 bits), and the last F 150 representation bits are 52 bits representing the significant part of the number (also called mantissa) .
Для стандарта IEEE в представлении 107 числа с двойной точностью бит S 110 является битом для знака, биты Е 160 являются битами показателя степени (15 бит), и последние биты представления F 170 являются 64-ми битами представления значащей части числа (также называемой мантиссой).For the IEEE standard in double precision representation of a 107 number, bit S 110 is the sign bit, bits E 160 are exponent bits (15 bits), and the last bits of the representation F 170 are 64 bits representing the significant part of the number (also called mantissa) .
В качестве примера разложения чисел с плавающей точкой на целые и дробные части предлагаются следующие равенства, которые иллюстрируют один подобный пример:As an example of decomposition of floating-point numbers into integer and fractional parts, the following equalities are proposed, which illustrate one similar example:
ДаноGiven
w=х*А (равенство 1),w = x * A (equality 1),
где А=1/В (равенство 2).where A = 1 / B (equality 2).
Найти n и r такие, что х=n*B+r (равенство 3),Find n and r such that x = n * B + r (equality 3),
где n является целым числом, а А, В, r и w - числа с плавающей точкой. Таким образом задачу можно переформулировать так: для заданных входного числа х и констант А и В надо найти число n такое, что число В ровно n раз "умещается" в числе х и какой при этом получается остаток? Более того, n часто используется в качестве указателя для поиска в таблице или в качестве показателя степени некоторой величины, такой как 2n. Следовательно, необходимо представлять число n и как целое число (ni), и как число с плавающей точкой (nf). Таким образом, после вычислений необходимо получить три величины: ni (n как целое число), nf (n как число с плавающей точкой) и r в виде числа с плавающей точкой.where n is an integer, and A, B, r and w are floating point numbers. Thus, the problem can be reformulated as follows: for a given input number x and constants A and B, it is necessary to find a number n such that the number B exactly "fits" in the number x exactly and what is the rest? Moreover, n is often used as an index for searching a table or as an exponent of a certain quantity, such as 2 n . Therefore, it is necessary to represent the number n both as an integer (n i ) and as a floating-point number (n f ). Thus, after the calculations, it is necessary to obtain three quantities: n i (n as an integer), n f (n as a floating-point number) and r as a floating-point number.
Фиг.2 изображает типовой способ вычисления ni, nf и r. На фиг.2 процесс 200 начинается с блока 210, где w=х*А. В блоке 220 число w преобразуется в ненормализованное целое число, полученное после округления. Значение, вычисленное в блоке 220, затем используется в блоке 230 для вычисления nf посредством его нормализации как целого числа. В блоке 240 также используется значение из блока 220: преобразуя значение из блока 220 в целое число, вычисляется число ni. В блоке 250 полученное значение ni пересылается в арифметико-логическое устройство (АЛУ) или сохраняется в памяти. В блоке 260 вычисляется число r: из числа х вычитается значение nf*В. В блоке 270 значение r можно пересылать в АЛУ или сохранять в памяти.Figure 2 depicts a typical method for calculating n i , n f and r. 2,
Таблица I иллюстрирует типовой способ вычисления ni, nf и r в терминах команд псевдокода. Как видно из Таблицы I, существует три операции с плавающей точкой, которые выполняются устройством арифметических и логических операций с плавающей точкой (Палу), и одна операция с целыми числами, выполняемая устройством арифметических и логических операций с целыми числами (Цалу). Заметим, что числа в круглых скобках являются общими количествами тактов работы при выполнении команд (задержка) для процессора, такого как процессор Intel Itanium™.Table I illustrates a typical method for computing n i , n f, and r in terms of pseudo-code instructions. As can be seen from Table I, there are three floating-point operations that are performed by the floating-point arithmetic and logical unit (Palu), and one integer operation performed by the integer-arithmetic and logical unit (Tsalu). Note that the numbers in parentheses are the total number of clock cycles when executing commands (delay) for a processor such as an Intel Itanium ™ processor.
Фиг.3 иллюстрирует одну реализацию настоящего изобретения, в которой уменьшено число операций с плавающей точкой, необходимых для вычисления ni, nf и r. Процесс 300 начинается в блоке 310, в котором вычисляется величина x*A+S, где S и А являются константами, а х - число с плавающей точкой. В одной реализации изобретения константа S выбирается так, чтобы прибавление числа S к числу х*А сдвигает округленную целую часть числа х*А в крайние правые биты мантиссы. Затем в блоке 320 вычисляется nf посредством вычитания S из значения, вычисленного в блоке 310. Таким образом получается целое число. В блоке 330 получается ni+S следующим образом: извлекаются биты мантиссы из результата блока 310. В блоке 340 вычисляется значение r: из х вычитается величина nf*В. В блоке 350 из значения, вычисленного в блоке 330, извлекаются младшие биты и получается значение ni. В блоке 360 значение ni доступно готово для передачи в АЛУ или для сохранения в памяти. В блоке 370 значение r доступно для передачи в АЛУ или для сохранения в памяти.Figure 3 illustrates one implementation of the present invention in which the number of floating-point operations needed to calculate n i , n f and r is reduced.
Таблица II иллюстрирует реализацию настоящего изобретения в виде команд псевдокода, причем в данной реализации уменьшено число операций с плавающей точкой. Заметим, что в качестве примера приведены числа в круглых скобках, которые являются общими количествами тактов работы при выполнении команд (задержка) для процессора, такого как процессор Intel Itanium™. В одной реализации изобретения константа S выбирается так, чтобы прибавление числа S к числу х*А сдвигает округленную целую часть числа х*А в крайние правые биты мантиссы. Таким образом S можно преобразовать в целое число ni после одной операции Палу вместо двух. Более того, представление с плавающей точкой nf может быть непосредственно получено с помощью второй операции Палу: вычитание S из результата первой операции Палу. Таким образом при получении необходимых величин используется на одну команду Палу меньше. Таким образом, реализация изобретения выливается в экономию семи тактов работы процессора, такого как процессор Intel Itanium™.Table II illustrates the implementation of the present invention in the form of pseudo-code instructions, and in this implementation, the number of floating-point operations is reduced. Note that, as an example, the numbers in parentheses are the total number of clock cycles when executing commands (delay) for a processor such as an Intel Itanium ™ processor. In one implementation of the invention, the constant S is selected so that adding the number S to the number x * A shifts the rounded integer part of the number x * A to the rightmost bits of the mantissa. Thus, S can be converted to an integer n i after one Palu operation instead of two. Moreover, the floating-point representation n f can be directly obtained using the second Palu operation: subtracting S from the result of the first Palu operation. Thus, when obtaining the required values, one less Palu command is used. Thus, the implementation of the invention translates into savings of seven clock cycles of the processor, such as the Intel Itanium ™ processor.
Выгода в производительности нарастает при использовании данной реализации изобретения в циклах программных продуктов. Многие циклы ограничены количеством команд с плавающей точкой, требуемых для вычислений. Так как данная реализация изобретения предполагает на одну операцию с плавающей точкой меньше, по сравнению с типовым методом, то максимальная производительность цикла увеличивается.The benefit in productivity increases when using this implementation of the invention in the cycles of software products. Many loops are limited by the number of floating point instructions required for calculations. Since this implementation of the invention assumes one less floating point operation than the typical method, the maximum cycle throughput is increased.
Дальнейшее обсуждение относится к выбору константы S в одном варианте осуществления изобретения. Для простоты предположим, что представление с плавающей точкой содержит b бит мантиссы (например, 64 бита), явный целый бит и b-1 бит дробной части. Поле показателя степени представления числа с плавающей точкой определяет положение двоичной точки внутри или вне значащих цифр. Таким образом целая часть нормализованного числа с плавающей точкой - это крайние справа биты мантиссы после применения операции обратной нормализации, которая сдвигает b-1 бит мантиссы вправо, округляет мантиссу и прибавляет b-1 к показателю степени. Мантисса содержит целые числа как последовательность b бит, являющуюся дополнением до 2. Младшие биты мантиссы, содержащие целую часть первоначального числа с плавающей точкой, могут быть получены с помощью прибавления к числу константы 1.10...000*2b-1. Данная константа является одним из значений S, выбранных в одной из реализации настоящего изобретения.Further discussion relates to the selection of the constant S in one embodiment of the invention. For simplicity, suppose a floating-point representation contains b bits of the mantissa (for example, 64 bits), an explicit integer bit, and b-1 bits of the fractional part. The exponent field of the floating point representation determines the position of the binary point inside or outside the significant digits. Thus, the integer part of the normalized floating-point number is the rightmost mantissa bits after applying the reverse normalization operation, which shifts the b-1 bit of the mantissa to the right, rounds the mantissa, and adds b-1 to the exponent. The mantissa contains integers as a sequence of b bits, which is a complement to 2. The least significant mantissa bits containing the integer part of the original floating-point number can be obtained by adding the constant 1.10 ... 000 * 2 b-1 to the number . This constant is one of the values of S selected in one implementation of the present invention.
Результирующая мантисса содержит целое число в виде (b-2) бит, являющихся дополнением до 2. Бит, находящийся сразу левее b-2-x нулей в значащей части, используется для того, чтобы для отрицательных чисел убедиться, что результат не был повторно нормализован, тем самым, сдвигая целое число левее от требуемого положения в самом правом бите мантиссы. Если в последующих операциях с целыми числами используется менее b-2 бит, то команды для вычисления ni, nf и r в Таблице II эквивалентны соответствующим командам из Таблицы I.The resulting mantissa contains an integer in the form of (b-2) bits complementing 2. The bit immediately to the left of b-2-x zeros in the significant part is used to ensure that the result is not normalized for negative numbers , thereby shifting the integer to the left of the required position in the rightmost bit of the mantissa. If in subsequent operations with integers less than b-2 bits are used, then the instructions for calculating n i , n f and r in Table II are equivalent to the corresponding commands from Table I.
В одной реализации изобретения выбор числа S может быть обобщен, если требуемый результат должен быть равен m, где m=n*2k. В этом случае показатель степени константы будет равен (b-k-1). В данной реализации выбор S полезен тогда, когда искомое целое число необходимо разделить на множества индексов для поиска в таблице с несколькими входами. Например, число n может быть разбито следующим образом n=n0*27+n1*24+n2 для того, чтобы вычислить индексы для доступа в таблицы с 16 и 8 входами. Для данной реализации необходимо, чтобы число S было доступно тогда же, когда и константа А. В одной реализации изобретения константу S можно загружать из памяти или для процессоров, таких как Intel Itanium™, S можно легко вычислить с помощью следующих команд: 1) movI для 64-битового IEEE двоичного кода двойной точности, 2) setf.d для загрузки S в регистр для работы с числами с плавающей точкой.In one implementation of the invention, the choice of the number S can be generalized if the desired result should be equal to m, where m = n * 2 k . In this case, the exponent of the constant will be equal to (bk-1). In this implementation, the choice of S is useful when the desired integer must be divided into sets of indices for searching in a table with several inputs. For example, the number n can be broken down as follows n = n 0 * 2 7 + n 1 * 2 4 + n 2 in order to calculate the indices for access to tables with 16 and 8 inputs. For this implementation, it is necessary that the number S be available at the same time that the constant A. In one implementation of the invention, the constant S can be loaded from memory or for processors such as Intel Itanium ™, S can be easily calculated using the following commands: 1) movI for 64-bit IEEE binary double precision, 2) setf.d for loading S into the register for working with floating-point numbers.
В одной реализации настоящего изобретения константа может иметь следующую форму: "1", за ней десятичная точка, j-1 бит (нули или единицы) сразу справа от десятичной точки, "1" за указанными j-1 битами, а затем b-j-1 бит нулей. Заметим, что реализация, описываемая раньше, содержала константу той же формы c j=1.In one implementation of the present invention, a constant may take the following form: “1” followed by a decimal point, j-1 bits (zeros or ones) immediately to the right of the decimal point, “1” after the indicated j-1 bits, and then bj-1 bit of zeros. Note that the implementation described earlier contained a constant of the same form with j = 1.
Последующее обсуждение относится к реализации данного изобретения, включающего порождение констант, необходимых для вычисления ni, nf и r. Требования алгоритмов математической библиотеки к точности обычно подразумевают, что умножение w=x*A выполняется для представлений с расширенной двойной точностью (64 битовое пространство мантиссы). Таким образом константа А при загрузке должна иметь представление с расширенной двойной точностью. Обычно это достигается следующим образом: константа сохраняется статично в памяти, а затем загружается в регистр для работы с числами с плавающей точкой (например, команда ldfe для процессора Intel Itanium™).The following discussion relates to the implementation of the present invention, including generating the constants necessary to calculate n i , n f and r. Accuracy requirements of mathematical library algorithms usually imply that w = x * A multiplication is performed for representations with extended double precision (64-bit mantissa space). Thus, the constant A at boot should have a representation with extended double precision. Usually this is achieved as follows: the constant is stored statically in memory and then loaded into the register for working with floating-point numbers (for example, the ldfe command for Intel Itanium ™ processor).
Из-за требования того, что библиотека должна располагаться независимо (то есть быть совместно используемой) загрузка выполняется с помощью косвенной загрузки. При данной косвенной загрузке сначала вычисляется адрес указателя на константу, затем загружается указатель на константу, а затем загружается константа. Для процессора, такого как Intel Itanium™, такая последовательность выполняется как минимум 13 тактов. Эта последовательность действий может потребовать более 13 тактов в случае, если указатель и константы не находятся в кэш-памяти.Due to the requirement that the library must be located independently (that is, be shared), loading is performed using indirect loading. With this indirect loading, the address of the pointer to the constant is first calculated, then the pointer to the constant is loaded, and then the constant is loaded. For a processor such as Intel Itanium ™, this sequence runs at least 13 clock cycles. This sequence of actions may require more than 13 clock cycles if the pointer and constants are not in the cache.
Для некоторых процессоров, таких как Intel Itanium™, не существует способа прямой загрузки константы расширенной двойной точности без использования команд памяти. Тем не менее, существует способ прямой загрузки мантиссы константы с плавающей точкой: сначала формируется 64-битная мантисса в регистре для работы с целыми числами, а затем используется команда (например, set.sig для процессора Intel Itanium™) для загрузки мантиссы в регистр с плавающей точкой. Подобная команда устанавливает значение показателя степени в 263. Для процессора, такого как Intel Itanium™, такая последовательность выполняется за 10 тактов. В одной реализации изобретения три такта можно сохранить, используя константу S, имеющую правильную мантиссу, но измененный показатель степени.For some processors, such as Intel Itanium ™, there is no way to directly load the extended double precision constant without using memory instructions. Nevertheless, there is a way to directly load the constant mantissa with a floating point: first, a 64-bit mantissa is formed in the register for working with integers, and then a command is used (for example, set.sig for the Intel Itanium ™ processor) to load the mantissa in the register with floating point. A similar team sets the exponent to 2 63 . For a processor such as Intel Itanium ™, this sequence runs in 10 cycles. In one implementation of the invention, three measures can be stored using a constant S having the correct mantissa but a modified exponent.
Фиг.4 иллюстрирует одну реализацию изобретения, используемую для обобщения выбора константы S при определении ni, nf и r. В процессе 400 в блоке 410 вычисляется результат х*А'+S' (где S' - это вариант S, который будет обсуждаться ниже). В блоке 420, с использованием результата блока 410, производится умножение результата блока 410 на Т (Т - это множитель, равный 2-(b-1-j)), и из полученного результата вычитается S. В блоке 430 биты мантиссы извлекаются из результата блока 410, таким образом получается целое число. В блоке 440 вычисляется r, а именно вычисляется выражение x-nf*B. В блоке 450 из результата блока 430 извлекаются младшие биты. В блоке 460 значение ni доступно для передачи в АЛУ или для сохранения в памяти. В блоке 470 значение r доступно для передачи в АЛУ или для сохранения в памяти. В процессе 400 величина А равна 2j*F, где F - это мантисса вида 1.xxxxxxxx, 1.0≤|F|<2.0. Также A'=2b-1*F.Figure 4 illustrates one implementation of the invention used to generalize the choice of the constant S in determining n i , n f and r. In
Таблица III содержит псевдокоды шагов для процесса 400, показанного на фиг.4.Table III contains pseudo-codes of steps for the
В одной реализации изобретения для того, чтобы сдвиг происходил корректно, при выполнении команды Палу опер. 1 необходим вариант числа S - число S', где S'=S*2b-1-j. При получении nf во время выполнения Палу опер. 2 число w_плюс_S_сдвинутвправо масштабируют "обратно" с помощью множителя Т, где Т=2-(b-1-j). В данной реализации изобретения генерируются четыре константы: A', S', S и Т. В одной реализации изобретения данные четыре константы задаются параллельно.In one implementation of the invention, in order for the shift to occur correctly, when executing the command of the Palais operas. 1, a variant of the number S is needed - the number S ', where S' = S * 2 b-1-j . Upon receipt of n f during the execution of the Pal oper. 2, the number w_plus_S_shifted to the right is scaled “back” using the factor T, where T = 2 - (b-1-j) . In this implementation of the invention, four constants are generated: A ', S', S, and T. In one implementation of the invention, these four constants are defined in parallel.
Фиг.5 иллюстрирует типовой процесс 500 загрузки констант и вычисления коэффициентов для разложения чисел с плавающей точкой на целую и дробную части. На обычном процессоре, таком как Intel Itanium™, вся последовательность действий от загрузки констант для вычисления r требует 36 тактов. Процесс 500 начинается в блоке 510, в котором вычисляется адрес указателя на А и В. В блоке 520 загружаются адреса указателя на А и В. В блоке 530 загружаются А и В. В блоке 540 вычисляется значение w=x*A. В блоке 550 результат из блока 540 (число w) преобразуется в ненормализованное целое число. В блоке 560 результат блока 550 нормализуется как целое число и получается nf. В блоке 570, преобразуя значение из блока 550 в целое число, вычисляется число ni. В блоке 580 полученное значение ni доступно для передачи в АЛУ или сохранения в памяти. В блоке 590 вычисляется число r: из числа х вычитается значение nf * В. В блоке 595 значение r доступно для передачи в АЛУ или сохранения в памяти.5 illustrates a
Таблица IV иллюстрирует процесс 500 в командах псевдокода. Числа в правой части Таблицы IV представляют собой обычные такты для процессора, такого как Intel Itanium™.Table IV illustrates the
Фиг.6А-Б показывает некоторую реализацию изобретения для загрузки констант и осуществления разложения чисел с плавающей точкой на целую и дробную части. Процесс 600 начинается с блока 605, в котором в регистре для работы с целыми числами формируется двоичный код S'. В блоке 610 в регистре для работы с целыми числами формируется двоичный код мантиссы А. В блоке 615 в регистре с плавающей точкой генерируется S'. В блоке 620 в регистре с плавающей точкой генерируется А'. В блоке 625 в регистре для работы с целыми числами формируется двоичный код для S. В блоке 630 в регистре для работы с целыми числами формируется двоичный код для Т. В блоке 635 вычисляется адрес указателя на В. В блоке 640 в регистре с плавающей точкой генерируется S. В блоке 645 в регистре с плавающей точкой генерируется Т. В блоке 650 загружается адрес указателя на В. В блоке 655 загружается В. В блоке 660 вычисляется x*A'+S'. В блоке 665 производится умножение результата блока 660 на Т и из полученного значения вычитается S. Результатом операций, проводимых в блоке 665, является nf. В блоке 670 биты мантиссы извлекаются из результата блока 660, таким образом получается целое число. В блоке 675 вычисляется r, а именно: вычисляется выражение х-nf*В. В блоке 680 из результата блока 670 извлекаются младшие биты. Результатом операций, проводимых в блоке 680, является ni. В блоке 685 значение ni становится доступным для передачи в АЛУ или для сохранения в памяти. В блоке 690 значение r становится доступным для передачи в АЛУ или для сохранения в памяти.6A-B show some embodiment of the invention for loading constants and decomposing floating-point numbers into integer and fractional parts.
Таблица V содержит псевдокоды шагов для процесса 600 (смотри фиг.6А-Б). Заметим, что числа в правой части Таблицы V, которые заключены в скобки, представляют такты процессора, такого как Intel Itanium™. В одной реализации настоящего изобретения процесс 300 и процесс 600 загружаются в математические библиотеки, которыми пользуются различные компиляторы. В другой реализации изобретения те же процессы, загруженные в математическую библиотеку, могут использоваться для вычисления функций, таких как скалярный с двойной точностью тангенс, синус, косинус, экспоненциальные функции, гиперболический косинус, гиперболический синус, гиперболический тангенс и так далее. Использование данной реализации позволяет уменьшить число тактов, необходимых для выполнения операций по сравнению с методами, существующими в настоящий момент. Необходимо заметить, что другие реализации данного изобретения могут использоваться для обработки функций, таких как скалярные функции одинарной точности, векторные функции двойной точности и векторные функции одинарной точности.Table V contains pseudo-codes of steps for process 600 (see FIGS. 6A-B). Note that the numbers on the right side of Table V, which are enclosed in brackets, represent clock cycles of a processor such as Intel Itanium ™. In one implementation of the present invention,
Фиг.7 показывает некоторую реализацию настоящего изобретения, имеющую вычислительную компоненту 710. Схема 700 также содержит микропроцессор 720, кэш-память 730, память 740, дисковое запоминающее устройство 750, очередь предварительной выборки 755, декодер/присваивание/экстраполятор 760, магистраль для целых чисел А 770, магистраль для целых чисел В 775, магистраль для чисел с плавающей точкой А 780, АЛУ 781-782, АЛУ для плавающей точки 783, наборы регистров для целых чисел 785-786, набор регистров для плавающей точки 787 и шину данных 790. В одной реализации настоящего изобретения вычислительная компонента 710 включает в себя процессы 300, 400 или 600, проиллюстрированные на фиг.3, 4 и 6А-Б соответственно.7 shows some implementation of the present invention having a
Упомянутые выше реализации изобретения могут быть использованы всякий раз, когда целые и дробные компоненты чисел с плавающей точкой необходимы для выполнения редукции аргументов скалярных и векторных функций с двойной точностью, скалярных и векторных функций с одинарной точностью, различных математических функций и предварительной обработки перед вычислением математических функций. При использовании описанных выше вариантов осуществления изобретения уменьшается время вычислений без отрицательного влияния на точность результата.The above implementations of the invention can be used whenever integer and fractional components of floating-point numbers are necessary to perform the reduction of the arguments of scalar and vector functions with double precision, scalar and vector functions with single precision, various mathematical functions, and preprocessing before calculating mathematical functions . Using the above-described embodiments of the invention, computation time is reduced without adversely affecting the accuracy of the result.
Указанные выше реализации также могут храниться на устройстве или машинно-считываемом носителе и считываться машиной для выполнения команд. Машинно-считываемые носители включают в себя любые механизмы, которые содержат (то есть хранят и/или передают) информацию, которая может быть считана машиной (например, компьютером). Например, машинно-считываемый носитель может быть постоянным запоминающим устройством (ROM); оперативным запоминающим устройством или памятью с произвольным доступом (RAM); накопителем на магнитных дисках; оптическим диском; флэш-памятью; электрическим, оптическим, звуковым сигналом или любой другой формой распространяемого сигнала (например, несущие волны, инфракрасные сигналы, цифровые сигнала и так далее). Устройство или машинно-считываемый носитель может быть полупроводниковым устройством памяти и/или вращающимся магнитным или оптическим диском. Устройство или машинно-считываемый носитель может быть распределенным, когда части команд разделены между различными машинами, например между соединенными в сеть компьютерами.The above implementations can also be stored on a device or machine-readable medium and read by a machine to execute commands. Machine-readable media include any mechanisms that contain (i.e. store and / or transmit) information that can be read by a machine (e.g., computer). For example, a machine-readable medium may be read-only memory (ROM); random access memory or random access memory (RAM); magnetic disk drive; optical disk; flash memory; an electrical, optical, audible signal, or any other form of propagated signal (for example, carrier waves, infrared signals, digital signals, and so on). The device or machine-readable medium may be a semiconductor memory device and / or a rotating magnetic or optical disk. A device or machine-readable medium can be distributed when parts of the commands are divided between different machines, for example, between networked computers.
Несмотря на то, что некоторые типичные реализации описаны и показаны на сопровождающих чертежах, необходимо понять, что такие реализации являются лишь иллюстрациями и не ограничивают рамки изобретения, и что данное изобретение не ограничивается конкретными структурами и конструкциями, здесь показанными и описанными, так как специалист в соответствующей области может предложить множество других модификаций.Although some typical implementations are described and shown in the accompanying drawings, it must be understood that such implementations are merely illustrations and do not limit the scope of the invention, and that the invention is not limited to the specific structures and structures shown and described herein, as one skilled in the art many other modifications can be offered to the corresponding area.
Claims (25)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
RU2004104325/09A RU2276805C2 (en) | 2001-07-13 | 2001-07-13 | Method and device for separating integer and fractional components from floating point data |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
RU2004104325/09A RU2276805C2 (en) | 2001-07-13 | 2001-07-13 | Method and device for separating integer and fractional components from floating point data |
Publications (2)
Publication Number | Publication Date |
---|---|
RU2004104325A RU2004104325A (en) | 2005-06-27 |
RU2276805C2 true RU2276805C2 (en) | 2006-05-20 |
Family
ID=35836393
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
RU2004104325/09A RU2276805C2 (en) | 2001-07-13 | 2001-07-13 | Method and device for separating integer and fractional components from floating point data |
Country Status (1)
Country | Link |
---|---|
RU (1) | RU2276805C2 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8185723B2 (en) | 2001-07-13 | 2012-05-22 | Intel Corporation | Method and apparatus to extract integer and fractional components from floating-point data |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9146706B2 (en) | 2006-05-05 | 2015-09-29 | Qualcomm Incorporated | Controlled-precision iterative arithmetic logic unit |
RU2614931C1 (en) * | 2016-02-25 | 2017-03-30 | Федеральное государственное бюджетное образовательное учреждение высшего образования "Кубанский государственный технологический университет" (ФГБОУ ВО "КубГТУ") | Device for calculating trigonometric functions |
-
2001
- 2001-07-13 RU RU2004104325/09A patent/RU2276805C2/en not_active IP Right Cessation
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8185723B2 (en) | 2001-07-13 | 2012-05-22 | Intel Corporation | Method and apparatus to extract integer and fractional components from floating-point data |
Also Published As
Publication number | Publication date |
---|---|
RU2004104325A (en) | 2005-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6694880B2 (en) | Effectiveness matching | |
US5844830A (en) | Executing computer instrucrions by circuits having different latencies | |
US4941120A (en) | Floating point normalization and rounding prediction circuit | |
US7949696B2 (en) | Floating-point number arithmetic circuit for handling immediate values | |
US4338675A (en) | Numeric data processor | |
US5357237A (en) | In a data processor a method and apparatus for performing a floating-point comparison operation | |
US4484259A (en) | Fraction bus for use in a numeric data processor | |
KR100291383B1 (en) | Module calculation device and method supporting command for processing digital signal | |
JP2557190B2 (en) | Optimization system for argument reduction | |
US5671170A (en) | Method and apparatus for correctly rounding results of division and square root computations | |
US5426600A (en) | Double precision division circuit and method for digital signal processor | |
US5305248A (en) | Fast IEEE double precision reciprocals and square roots | |
US5341320A (en) | Method for rapidly processing floating-point operations which involve exceptions | |
JP3313560B2 (en) | Floating point processor | |
USH1222H (en) | Apparatus for determining sticky bit value in arithmetic operations | |
US6233595B1 (en) | Fast multiplication of floating point values and integer powers of two | |
US8140608B1 (en) | Pipelined integer division using floating-point reciprocal | |
RU2276805C2 (en) | Method and device for separating integer and fractional components from floating point data | |
Tsen et al. | A combined decimal and binary floating-point multiplier | |
US7747669B2 (en) | Rounding of binary integers | |
US7080112B2 (en) | Method and apparatus for computing an approximation to the reciprocal of a floating point number in IEEE format | |
US8185723B2 (en) | Method and apparatus to extract integer and fractional components from floating-point data | |
US7236999B2 (en) | Methods and systems for computing the quotient of floating-point intervals | |
US6820106B1 (en) | Method and apparatus for improving the performance of a floating point multiplier accumulator | |
US7237000B2 (en) | Speed of execution of a conditional subtract instruction and increasing the range of operands over which the instruction would be performed correctly |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | The patent is invalid due to non-payment of fees |
Effective date: 20100714 |