eddy_em: (hram nauki)
[personal profile] eddy_em
Вчера провел небольшую "работу над ошибками" и нашел кое-какие мелкие "ашипки и очепятки", которые приводили к получению черт-те чего, но не того, что было нужно.
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. код я выложил на сосфорж.

Date: 2013-02-13 08:09 am (UTC)
From: [identity profile] vk68.livejournal.com
А что в итоге строите? Ни как не могу понять.

Date: 2013-02-13 08:21 am (UTC)
From: [identity profile] eddy-em.livejournal.com
Гартманограммы. Чтобы протестировать разные методы обработки (т.к. по реальным гартманнограммам невозможно оценить, насколько точно тот или иной метод восстанавливает волновой фронт),

Date: 2013-02-13 08:50 am (UTC)
From: [identity profile] vk68.livejournal.com
Это проверка или получение корректировочных значений?

Date: 2013-02-13 09:42 am (UTC)
From: [identity profile] eddy-em.livejournal.com
Проверка: задаем тестовую форму зеркала (т.е. мы точно уже знаем, что должно будет получиться у алгоритма, восстанавливающего волновой фронт), задаем параметры маски и получаем пред- и зафокальные гартманнограммы. Потом обрабатываем их, восстанавливаем поверхность зеркала и проверяем: насколько точно это восстановление сработало. Если будет погрешность процентов 5 и меньше - берем алгоритм на вооружение; если нет - пробуем следующий.

Я сначала эту модель делал в октаве, но там получалось слишком грубо и медленно: этот вариант (даже еще не оптимизированный) за 5 минут выдает то, что октава считала бы неделю!

Date: 2013-02-13 11:51 am (UTC)
From: [identity profile] vk68.livejournal.com
Ну примерно понятно.

May 2025

S M T W T F S
    123
45678910
11121314151617
1819202122 2324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 31st, 2025 01:28 pm
Powered by Dreamwidth Studios