Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Category:

Рихтовка алгоритма

Вчера провел небольшую "работу над ошибками" и нашел кое-какие мелкие "ашипки и очепятки", которые приводили к получению черт-те чего, но не того, что было нужно.
res
Все картинки "в куче" (точность поверхности — 50нм). Осторожно, аж полмегабайтная gif'ка!
Пока что я и не думал об оптимизации: просто пробежался по полученной маске зеркала и в каждый "пиксель" с ненулевыми значениями маски "швырнул" N фотонов. N изменял от десяти тысяч до десяти миллионов. Так как заполнение матрицы изображения у меня выполняется только при помощи CPU (ну не работает почему-то у меня в куде атомарный инкремент!), сложно сказать, чьего вклада здесь больше. "Прямая" на графике "время/количество фотонов" получилась какой-то кривоватой. Возможно, еще неплохую роль сыграло то, что экспериментировал я с довольно "кривым" зеркалом, из-за чего от опыта к опыту количество ненулевых пикселей на маске менялось (в среднем их значение плавало около 29400).
Вот по этой табличке
N, тысяч штукT, секунд
1050
5073
100102
200160
500303
1000556
20001128
50002541
100004826
получился такой график:
graph
Время работы программы в зависимости от количества фотонов на пиксель маски
Грубая линейная аппроксимация дала: T = 4.7991·10¯⁴N + 76.438. Многовато будет: есть еще куда оптимизировать.
Так как маска у меня была маленькая (256×256 пикселей), максимальная интенсивность на изображении была несколько (примерно на 35%) меньше количества "фотонов" на пиксель маски. Увеличивать маску я не стал ­— уж очень долго бы процесс подсчета проходил.
Кстати, оказалось, что модель моя кривая: независимо от количества фотонов пики пятен представляли собой вот такое уродство:
2013.02.07_09:38:37
Распределение энергии в моделируемом пятне
при том, что ожидалась форма куда как более гладкая! Сдается мне, что тип float был выбран неудачно. Надо попробовать с double (правда, прощай производительность!).
В общем, работать еще и работать! P.S. код я выложил на сосфорж.
Tags: cuda, гартманнограмма, математическое моделирование
Subscribe

  • DHT22/DHT11 на STM32F103

    Добил шайтана! Сначала ожидал, что нужно будет полноценным захватом ШИМ пользоваться, но т.к. в протоколе неинформативная часть имеет постоянную…

  • Свеженькие железячки

    Получил сегодня с али ожидаемые железки, в т.ч. для восстановления моей файлопомойки. Во-первых, это блок питания на 16.8В, который я брал для…

  • BMP180 на STM32F103

    Добавил еще один сниппет — работа с BMP180 (датчик температуры и давления). Опять в даташите формула для вычисления "компенсированных" значений…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 5 comments