eddy_em: (hram nauki)
[personal profile] eddy_em
Что-то новогодние празднички сильно подзатянулись. Хоть я уже неделю как «вышел из запоя», ничего серьезного сделать не успел еще.
На сам НГ у нас были наблюдения: 31 декабря и 1 января. Причем первого было совсем «весело»: до утра сидели из-за того, что решили обнулить по-человечески датчики A и Z БТА, причем обнуление прошло успешно далеко не с первого раза… Еще должны были быть наблюдения 8 января, но как только мы открылись и собрались фокусироваться, начался такой ветродуй, что пришлось закрываться. Бывает здесь такое: небо вроде идеальное, а ветер — больше 20м/с.


Пока у нас тишина с ИК (денег-то все равно не будет до марта-апреля), я решил заняться двумя полезными вещами: на работе сделать человеческую модель «кривого зеркала» (по которой можно было бы все свои методы анализа гартманнограмм отлаживать — а то появились кое-какие идеи), а дома — дописать свою CGI'шную библиотеку (добавить простые вебсокеты).
Оба занятия оказались не такими уж и простыми: приличных работающих библиотек вебсокетов я не нашел, поэтому открыл стандарт и стал перепиливать нерабочую (а нерабочая была написана еще 3 года назад, когда стандарты другими были).

Моделирование потребовало еще уймы дополнительных вычислительных процедур: сразу же я столкнулся с необходимостью делать интерполяцию данных. Попробовал B-сплайны (по статье Ruijters, Romeny & Suetens «Efficient GPU-Based Texture Interpolation using Uniform B-Splines») — получилась какая-то фигня. Вот, например, этот тестовый кусок
0.117 1.132 
0.034 1.035 

превращается черт те во что:
0.137 0.185 0.284 0.440 0.642 0.872 1.116 1.357
0.133 0.181 0.280 0.435 0.638 0.867 1.112 1.354
0.125 0.173 0.272 0.427 0.630 0.859 1.104 1.347
0.112 0.161 0.259 0.414 0.616 0.846 1.092 1.337
0.099 0.147 0.245 0.400 0.602 0.832 1.079 1.325
0.088 0.136 0.234 0.388 0.590 0.819 1.067 1.315
0.085 0.133 0.230 0.383 0.584 0.813 1.060 1.308
0.091 0.138 0.235 0.388 0.587 0.815 1.061 1.306 

Придется ковырять более сложные методы. Хотя этот был таким заманчивым. Совершенно простой код:

__device__ float interpolate_bicubic(float x, float y){
	// transform the coordinate from [0,extent] to [-0.5, extent-0.5]
	float2 coord_grid = make_float2(x - 0.5f, y - 0.5f);
	float2 index = floor(coord_grid);
	float2 fraction = coord_grid - index;
	float2 one_frac = 1.0f - fraction;
	float2 one_frac2 = one_frac * one_frac;
	float2 fraction2 = fraction * fraction;

	float2 w0 = one_frac2 * one_frac / 6.f;
	float2 w1 = 2.0f/3.0f - fraction2 * (1.0f - fraction / 2.f);
	float2 w2 = 2.0f/3.0f - one_frac2 * (1.0f + fraction) / 2.f;
	float2 w3 = fraction2 * fraction / 6.f;

	float2 g0 = w0 + w1;
	float2 g1 = w2 + w3;
	// h0 = w1/g0 - 1, move from [-0.5, extent-0.5] to [0, extent]
	float2 h0 = (w1 / g0) - 0.5f + index;
	float2 h1 = (w3 / g1) + 1.5f + index;

	// fetch the four linear interpolations
	float tex00 = tex2D(data_texture, h0.x, h0.y);
	float tex10 = tex2D(data_texture, h1.x, h0.y);
	float tex01 = tex2D(data_texture, h0.x, h1.y);
	float tex11 = tex2D(data_texture, h1.x, h1.y);

	// weigh along the y-direction
	tex00 = lerp(tex01, tex00, g0.y);
	tex10 = lerp(tex11, tex10, g0.y);

	// weigh along the x-direction
	//return tex2D(data_texture, x+0.5,y+0.5);
	return lerp(tex10, tex00, g0.x);
}


Да, еще. Я решил заодно обкатать возможность совмещения вычислений на GPU и на CPU. Наделал макросов (кривоватых, правда) и сделал обертку, которая в случае, если пакет компилировался на системе с кудой, сначала пытается запустить ресурсоемкую задачу на GPU. Если не получается — задача отдается CPU. Если и там не выходит — увы, ошибка.
Из-за этого своего хотения я получил еще дополнительные проблемы, т.к. простенький код для CUDA надо будет еще и дублировать для OpenMP, что посложнее. OpenCL использовать не хочу: уж больно уродские там конструкции.

Изготовление платы я пока забросил. Оказалось, что подложка от самоклейки не годится: дорожки отвалились от нее еще в самом принтере. Надо будет попробовать со страничкой из линукс-формата (если я еще эту макулатуру не выкинул).


Учитывая то, что лучше всего у меня продвигаются дела с вебсокетами, следующая статейка, похоже, будет про них. Заодно обругаю дурацкий стандарт, из-за которого простенький код разросся так, что может быть даже не влезет в мегабайт памяти STM32F4xx (а ведь туда еще и стек IP надо всунуть, и для своих задач места оставить).
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 09:41 am
Powered by Dreamwidth Studios