Xenobyte42 / rndcmp_stochastic_emulator

Stochastic arithmetic library

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Stochastic rounding emulator

WARNING

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

Description

В данный момент эмулятор представляет собой header-only библиотеку с реализованными обертками над числовыми типами данных, позволяющими производить вычисления в fixed point (https://royalsocietypublishing.org/doi/pdf/10.1098/rsta.2019.0052) и floating point (http://eprints.maths.manchester.ac.uk/2758/1/fami20.pdf), используя стохастическое округление.

Дополнительно реализованы типы пониженной точности: halfsr (обертка над IEEE based half отсюда http://half.sourceforge.net/), bfloat16 и bfloat16sr.

Features

На данный момент классы Fixed и FixedSR обладают следующими фичами:

  • compile time проверка типов в конструкторах (можно создать Fixed либо из любого floating point типа, с указанием, сколько битов отдаем под хранение дробной части, либо из любого integer типа, которым шаблонизируем класс). Актуально только для fixed типов.

  • compile time проверка возможности приведения класса к типу (компиляция упадет, если будем делать static_cast к не floating point типу)

  • стохастическое округление для типов с фиксированной и плавающей точкой;

  • Частичная функциональность Fixed и FixedSR (см. TODO)

  • Для проведения экспериментов написан интегратор Рунге-Кутты 4 порядка, который в том числе может поддерживать Fixed, FixedSR, FloatSR

  • Реализован интегратор методом Эйлера

TODO

  • Документация к коду
  • Реализация Echo State Network для тестирования стохастической арифметики
  • tests & CI (частично сделано с помощью GoogleTest)
  • больше экспериментов

Build

mkdir build

cd build

cmake .. & make

Запуск эксперимента: ./experiment{number: 1,2,3,4}

Немного примеров использования класса fixed: ./example

Пример использования интегратора: ./integrator_example

Tests

./test_main

About

Stochastic arithmetic library

License:MIT License


Languages

Language:C++ 99.2%Language:CMake 0.8%