Выплескивание эмоций

Тема в разделе "Флудилка", создана пользователем alp69, 15 окт 2016.

  1. akl

    akl Гуру

    воу воу полехче. я тут gmp установил чуть мозг не вскипел.
    Но если есть какие-то хорошие ссылки обучающие где написано как это применять в рамках виндоса - то буду рад почитать. потому что сам даже не понимаю куда гуглить, т.к. слов таких не знаю. шейдеры какие-то
     
  2. Un_ka

    Un_ka Гуру

    А что по поводу nvidia cuda?
     
  3. AlexU

    AlexU Гуру

  4. AlexU

    AlexU Гуру

    С этим пока ещё не работал.
     
  5. akl

    akl Гуру

    чет сложно. совершенно непонятно что это может из себя представлять теоретически. Типа берешь какое-нибудь HLSL-иде, в нем делаешь некую программу-шейдер, потом ее как-то подрубаешь к виндосному гуи, откуда в нее будут приходить некие цифры, а она эти цифры будет считать?
     
  6. AlexU

    AlexU Гуру

    На первый взгляд кажется сложным. Хотя и на второй тоже -- там стиль программирования сильно отличается.
    Как это устроено в DirectX в деталях не знаю.
    В OpenGL программа на GLSL -- это простые текстовые файлы для каждого типа шейдера (специальная IDE может и есть, но не искал, не было необходимости), которые загружаются основной программой, и текст из них "скармливается" видеодрайверу (в Вашем случае может хватить одного фрагментного шейдера). Видеодрайвер компилирует и линкует эти тексты и загружает в память видеокарты. После чего основная программа может загрузить в память видеокарты дополнительные данные и даёт команду драйверу на рендеринг картинки. Драйвер запускает процесс рендеринга, если для того или иного шага рендеринга есть шейдер, то он обрабатывает данные в соответствии со своей логикой. Последним работает фрагментный шейдер -- он задаёт цвет каждого пикселя картинки или цвет каждого пикселя дисплея (всё зависит от того куда видеокарта рендерит изображение -- на дисплей или просто в память).
    Отрендереная картинка может быть выгружена из памяти видеокарты в память компа для использования основной программой.
    Вся сложность в том, что в процессоре видеокарты ядер гораздо больше, чем в основном процессоре (например, в GeForce 840M их 384 штуки). А каждый экземпляр шейдера выполняется одновременно на всех ядрах видеопроцессора. И это нужно учитывать при разработке кода шейдера. Вот к примеру, на том же GeForce 840M фрагментный шейдер будет одновременно вычислять цвет 384 пикселей. Причём каждый экземпляр шейдера, не будет ни чего знать о цвете соседних пикселей, потому как их цвет будет вычисляться одновременно на других ядрах видеопроцессора.
    Но именно эта особенность (большое количество ядер) и позволяет видеопроцессору производить гораздо больше вычислений за единицу времени, чем может основной процессор.

    PS: просто Ваша задача идеально подходит для того, что бы её выполнял видеопроцессор, а не основной процессор, вот и сделал своё предложение попробовать всё это реализовать на шейдерах...
     
    Un_ka и akl нравится это.
  7. akl

    akl Гуру

    в теории выглядит круто, но боюсь на практике у меня на это уйдет сильно больше времени чем уже ушло на освоение си (при том что толком не освоил даже основы)
     
  8. akl

    akl Гуру

    а может быть такое что на 32-разрядном виндосе double менее точен, чем на 64?
     
  9. SergeiL

    SergeiL Оракул Модератор

    Нет :)
     
  10. parovoZZ

    parovoZZ Гуру

    Когда я ковырял DirectX году так в 2005-06, там было всё на матрицах. Ну и функции были сишные.
     
  11. AlexU

    AlexU Гуру

    Небольшой комментарий. И на 64-хбитном Intel'е, и на 32-хбитном ..., и на 8-мибитной Arduino UNO тип double в памяти хранится одинаково. А вот как с типом double работает процессор, зависит от многих факторов -- есть ли аппаратная поддержка, насколько эта поддержка корректная (вроде как была история с отзывом партии Intel'ов из-за аппаратной ошибки, связанной с числами с плавающей точкой) и т.п.
     
  12. Рокки1945

    Рокки1945 Гуру

    Здравствуйте! Может кто купит
    Снимок.PNG
     
  13. akl

    akl Гуру

    забавно получается. Оказалось что на масшатабах порядка менее 7 и боле 9 знаков после запятой (дальше пока не приближал) картинка мандельбротины портилась не из-за ограничения double, а из-за недостаточных итераций - оказалось при 10-100 тысячах итераций даже без применения GMP получается вполне хорошая картинка.

    Но фигня вылезла с другой стороны - оказалось что отображение координат курсора на этих масштабах начинает гнать - пропускает, причем чем дальше от нуля - тем сильнее. то есть если например квадрат находится в координатах
    min=-0,000000010 max=0,000000010 - то будет плавно меняться по единичке в девятом знаке.
    а если что-то вроде min=1.786440200 max=1.786440220 - то вообще меняться не будет - там где-то на 8 знаке только меняются цифры. Причем при этих расчетах используется точно та же функция map() что и при расчетах картинки.

    и вот тут уже применение GMP реально помогло.
    жаль толь что если это GMP применять при расчетах картинки, то оно работает медленнее раз в 10.

    кстати о фунции map возник вопрос
    вот допустим функция

    Код (C++):

    double mapx(int x, int in_min, int in_max, double out_min, double out_max)
    {
        double y;
        y = (((double)x - in_min)/(in_max - in_min));
        y *= (out_max - out_min);
        y += out_min;
        //y=(x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
        return y;
    }
     
    если применять формулу из закомментированной строчки - работает хорошо.
    но в таком разложенном на этапы состоянии, если не прописать там в первой формуле (double) - не работает. Это чтоль получается компилятор сам превращает y в int и всё обрасывает?
     
  14. akl

    akl Гуру

    вот например - обычный метод с double, масштаб 0.000000006*0.000000004
    10 000 итераций:
    [​IMG]

    100 тыщ:
    [​IMG]

    эти 100 тыщ считались 1100 секунд. запускать с GMP даже не пытался - лень ждать 2 часа :confused:
    но очевидно и без GMP этот масштаб еще не предел, предел скорее во времени, за которое будут считаться какие-нибудь например 500 тыщ итераций :eek:
     
  15. Un_ka

    Un_ka Гуру

    Тогда имеет смысл реализации программы на c/c++ без графики, где выводом будет .bmp фаил, а запускать её лучше на облачных сервисах.
     
  16. akl

    akl Гуру

    у меня и так программа на с/с++ с выводом в виде .bmp файла. вернее сперва все напихивается в массив, а потом записывается в файл (если попиксельно сразу в файл записывать, то медленнее процентов на 10 становится). можно наверно как-то распределить на 2-3 потока чтобы типа не одно ядро задействовалось, но это радикально не увеличит скорость, а мороки много.

    думаю лучше забить на поиск ктулху в глубинах более 9 знаков, и заняться допиливанием интерфейса, свистелок, перделок и спецэффектов
     
  17. SergeiL

    SergeiL Оракул Модератор

    Сейчас с CUDA по работе разбираюсь, в свободное от основной работы время.
    Есть похожий векторный процессор, попросили помочь, разобраться, в чем лучше в чем хуже NVIDIA.
     
  18. Airbus

    Airbus Радиохулиган Модератор

    Директор!Что опять с Форумом?Куда делась кнопка "Войти или зарегистрироваться"?На Компе она спрятана под поиском причём на всех браузерах.
    [​IMG]
    А на Айпаде её вообще нет и поэтому нельзя войти.
     
  19. AlexU

    AlexU Гуру

    Санкции....
    Не чего тут.....
     
  20. Airbus

    Airbus Радиохулиган Модератор

    Хакеры?Пару дней назад перестало открываться приложение ebay сначала на Айфоне а потом и на Айпаде. Сегодня решил зайти с Компа. Не смог-пароль не тот. С помошью телефона восстановил. Посмотрел-и поржал от души! Какой то Пендос взломал мой аккаунт. Попытался поназаказывать себе айфонов айпадов и Макбуков аж на 6000 баксов!
    [​IMG]
    Даже адрес свой ввёл для доставки. Наивный. У меня там фейковая карта привязана на ней рублей 300. Если надо что то купить я туда деньги кидаю и сразу оплачиваю чтоб зарплатную и кредитные карты не светить. Сменил пароль и отправил чуваку СМС на указанный мобильный номер США "фак ю вери матч! Фром раша виз фак!"
     
    Последнее редактирование: 7 дек 2020
    Andrey12 и Un_ka нравится это.