LINUX.ORG.RU
ФорумTalks

Что там с 128 бит?

 


0

2

А именно quad precision float. Сейчас вроде как максимум, поддерживаемый аппаратно на x86(-64) это 80 битные регистры FPU. А что-нибудь для более точного есть или планируется? Это актуально для некоторых задач численного интегрирования диффуров, где даже в double постепенно копится заметная ошибка

★★★★★

Ну или какие-то другие специфические SIMD инструкции

pekmop1024 ★★★★★
()

Мне вчера Густафсон рассказывал, что 128 бит float не нужно, нужно 754й формат выбросить, и тогда всем хватит 32х(или 64х, детали забываются).

DonkeyHot ★★★★★
()

для некоторых задач численного интегрирования диффуров, где даже в double постепенно копится заметная ошибка

Деды™ придумали XSC Languages ©.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

А как поможет XSC, если аппаратного 128 бит нет? Имитировать то float 128 бит и фортран умеет. Только скорость страдает

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от YesSSS

ну на фортране то я просто указать могу -fdefault-real-16 (для gfortran). Но это, естественно, даст проигрыш в скорости. Ну а для расчетов все-таки есть разница, ждать полчаса или полтора

Неплохо бы конечно еще на GPU это все запустить дополнительно

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 3)

на x86(-64) это 80 битные регистры FPU

А разве не в 32-битных инструкциях 80 бит максимум? Потому что даже на армах x64 long double - 128 бит

SR_team ★★★★★
()
Ответ на: комментарий от cvs-255

Проигрыш по скорости от перехода 64->128 даже в случае аппаратной реализации будет, хоть и меньший. Очевидно, что верторизация будет короче, меньше чисел будет влезать в кэш и т.д. Насчёт GPU - было бы отлично, но портировать qd на это дело будет не очень просто. Как я понимаю, там есть учёт неточностей и округлений для double, которые есть в CPU. Для GPU потребуется перенастройка.

YesSSS ★★★
()
Ответ на: комментарий от SR_team

даже на армах x64 long double - 128 бит

Про ARM не скажу, но если я не ошибаюсь, на x86-64 банально не на чем аппаратно 128 битные float считать

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от cobold

Подозреваю, что fpga будет тормозно. Но штука прикольная)

Ну в общем похоже, что пока что искомого решения пока что нет, видимо надо будет подумать как лучше использовать то, что есть

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от SR_team

ну как получить 128 байтные программным путем - это не вопрос. Но это будет гораздо медленнее аппратных 128 бит.

Есть разница - ждать полтора часа или полчаса

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)

хранение действительных чисел в каком-то ограниченном формате будет всегда чем-то не устраивать математиков
число нужно хранить как функцию, которая для любого N генерит первые N бит этого числа
арифметические операторы + - * / будут функциями, которые принимают две функции и возвращают функцию

Egor_
()
Ответ на: комментарий от SR_team

В обшем да, 80бит:

DB 2D 6A 0E 00 00                             fld     cs:tbyte_2020

А по поводу того, что 16 выводит - там вообще видимо константа взятая с потолка это из-за выравнивания:

BE 10 00 00 00                                mov     esi, 16
48 8D 3D BB 2E 00 00                          lea     rdi, _ZSt4cout@@GLIBCXX_3_4
E8 66 FE FF FF                                call    __ZNSolsEm

А вот в армах и правда 128 бит: https://en.wikipedia.org/wiki/Long_double

SR_team ★★★★★
()
Последнее исправление: SR_team (всего исправлений: 3)
Ответ на: комментарий от cvs-255

вот как раз все численные задачи после этого можно будет переписать в более простом и понятном виде
сейчас вся вычислительная математика - это сборник правил игры на бубне, чтобы «текущие абстракции» не утекли слишком далеко

Egor_
()

А что-нибудь для более точного есть или планируется?

Реализация высокоточных вычислений в базисе модулярно-интервальной арифметики (PDF) ©.

Можно попытаться реализовать вычисления в системе остаточных классов на ARM системах, или специализированных СБИС ПЛ ©.

P.S. Ещё глянь The GNU Multiple Precision Arithmetic Library (GMP) ©.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

Ну да, тред не читай. Речь то идет именно про аппаратную поддержжку. программная то понятно что есть

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Речь то идет именно про аппаратную поддержжку.

Дык ссылка на ПЛИСины намекает на аппаратную поддержку, которую сам спаяй и прошей на модулярную арифметику :)

quickquest ★★★★★
()

Если не нравяться готовые библиотеки, технически, что мешает замутить самодельный float тип любой произвольной точности? Будет медленно, но зато точно. Все алгоритмы работы с floating point давно известны, так что учебник в зубы и вперед…

qrck ★★
()

где даже в double постепенно копится заметная ошибка

Чёт с трудом верится. Сколько точных знаков после запятой тебе надо?

no-such-file ★★★★★
()

даже в double постепенно копится заметная ошибка

Ну так ошибка будет копиться, будь там хоть 128000 бит. Для решения этой проблемы предназначены совершенно иные методы.

buddhist ★★★★★
()
Ответ на: комментарий от no-such-file

Мне нужно чтобы величина угла (0-360 градусов) считалась с точностью не хуже 1 секунды дуги. У меня же в примере, где должен получаться строгий 0, т.к. в этом случае должна интегрироваться производная от 1 (т.е. 0), а получается 64 секунды дуги, причем ошибка получается именно из за погрешностей double

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от buddhist

Да, у меня копится ошибка вычислений в double

У меня есть функция заданная на сетке, а между узлами провожу интерполяцию. И даже если я на всей сетке я задам 1, то интерполяция дает не строго 1. И эта ошибка копится

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 2)

А задача на GPU вообще ложится? Если да, то я бы всё-таки покопал в сторону GPU с ручной реализацией арфиметики достаточной точности, ибо замедление из-за софтовой арифметики может уравновеситься параллельностью GPU.

slovazap ★★★★★
()
Последнее исправление: slovazap (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Мне нужно чтобы величина угла (0-360 градусов) считалась с точностью не хуже 1 секунды дуги

Т.е. порядка 10^-6. Остаётся запаc порядка 10^9. У тебя столько операций?

У меня тмм сейчас рунге кутта-4 обычная

Так может у тебя просто шаг недостаточно мелкий?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Ошибки самого рунге кутты это другая тема.

Суммарно шагов порядка 10^5 - 10^6

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от SR_team

Потому что даже на армах x64 long double - 128 бит

Удивил, полез гуглить.

https://en.wikipedia.org/wiki/ARM_architecture

«Floating point: 32 × 128-bit registers[1] for scalar 32- and 64-bit FP or SIMD FP»

Т.е. там тупо нет аппаратных скалярных 80-бит => поэтому приходится long double делать софтверно => разницы перформанса между софтовым 80 бит и 128 бит наверняка нет => ну тогда пусть будет 128 бит.

Вообщем, не засчитывается.

snizovtsev ★★★★★
()
Ответ на: комментарий от hateyoufeel

en.m.wikipedia.org

За такое нужно банить безжалостно. Ну в чём проблема убрать эту «m» когда копируешь ссылку?

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 1)
Ответ на: комментарий от next_time

почему «обломаться»?
вычисление определённого интеграла будет такой же функцией (по заданной точности вычисляет первые биты результата)

Egor_
()
Ответ на: комментарий от eternal_sorrow

большая часть действительных чисел транстцендентные и обламываемся

и что?
трансцендентные числа - это те, которые не являются корнями алгебраических уравнений
это никак не мешает их вычислять с любой заданной точностью

Egor_
()
Ответ на: комментарий от Egor_

по заданной точности вычисляет первые биты результата

вот поэтому - всё равно приходим к необходимости получить результат в численном виде с некоторой точностью

next_time ★★★★★
()
Ответ на: комментарий от next_time

а никто от этой необходимости и не уходил
функция - это лишь удобный промежуточный вид для работы с числами, когда ты не знаешь заранее, сколько бит числа тебе понадобятся при расчётах
и особенно это актуально для длинных алгоритмов (хороший пример: численное интегрирование)

Egor_
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.