Свежие комментарии

Title Comment
огого

типа юстировка ?
А попадет-не попадет ?

под какие края класть - по длинным сторонам или по коротким ?

я в прострации ...

Ну так полоски - именно на

Ну так полоски - именно на тот случай, если фокусировка неправильная.
Их надо подложить под, по краям.

У меня, впрочем, фокус был правильным.

установка экранчика

Здравствуйте!
Может, Вы мне поможите.
Получил купленный у Хаоды экранчик. Попробовал его установить. Результат огорчил :(

Есть такие непонятности:
1) форма экранчика от Хаоды отличается от формы штатного экранчика. Это нормально ?
2) В комплекте есть две длинные полоски. Не понимаю, зачем они.
3) С установленным экраном фокусировка по микропризме отличается от фокусировки по датчику фокуса. При этом по датчику - фокус правильный, по микропризмам - неправильный :(

Подскажите, пожалуйста, что не так. Если есть - киньтесь ссылкой на правильную инструкцию по установке (я пользовал вот эту http://www.focusingscreen.com/work/5d2en.htm

Обидно будет выбрасывать экранчик ... Да и микропризмы мне, привыкшему с среднему формату и ручной резкости, очень нужны.

Заранее благодарен.
Олег
+7 985 920 51 67
opsquick @ gmail . com

Ой какие клевые презентации, спасибо! Книжку я видел и она

Ой какие клевые презентации, спасибо!

Книжку я видел и она у меня даже есть в PDF, но очень не хочется разбираться еще и в этом, я же "прикладной" программист :)

Да ничего, если мы говорим о конкретной формуле. Но конкрет

Да ничего, если мы говорим о конкретной формуле.

Но конкретная формула - это частный случай. А хочется, на самом деле, общего и достаточно быстрого решения для накладывания произвольной "кривой" (в терминах фотошопа) на пикселы. Сплайны, вот, работают отлично - если вылеплены руками. А полиномы еще не попробовал.

По алгоритму Ремеза стоит посмотреть <a href="http://www.mat

По алгоритму Ремеза стоит посмотреть вот эту реализацию для Matlab. Хотя эта реализация у меня так и не заработала, к ней прилагается pdf, которого мне хватило для реализации алгоритма Ремеза самому.

А что мешает посчитать линейные значения отдельно + сделать

А что мешает посчитать линейные значения отдельно + сделать blend? При грамотной реализации это будет почти бесплатно.

А вообще по этой теме рекомендую почитать: Robert Green "Fas

А вообще по этой теме рекомендую почитать:
Robert Green "Faster Math Functions" (статья, презентация (часть 1), презентация (часть 2))
Jean-Michel Muller "Elementary Functions: Algorithms and Implementation"

А. Для степенной части отлично работает, правда скорость я

А.

Для степенной части отлично работает, правда скорость я не мерял. И там, конечно, седьмая степень еще не больно бъется.
А вот в линейной части может быть неприятно, все-таки более-менее реальные линейные значения - это порядка 10^-4 (12 стопов в фотографическом смысле), а малоинтересные, но на практике имеющиеся - это 10^-5 (14-битный АЦП т.е. 2^-14). В седьмой степени - уже на грани фола для float, не говоря о накоплении ошибок.

Интересно построить такой же для всей функции. Вроде бы в boost есть готовый алгоритм, буду пробовать, о результатах расскажу если получится.

Я считал minimax полином для степенной части функции на диап

Я считал minimax полином для степенной части функции на диапазоне от 0.0031308 до 1. Минимизировалась относительная ошибка.

А для SSE2 оно делает через

А для SSE2 оно делает через and и or, маска та же. разница не особо принципиальная.

А у AMD blendvps вроде

А у AMD blendvps вроде нету?
Хотя если для проверки что ISPC умеет...

Я не поленился, формулу скопипейстил и посчитал дельты на ди

Я не поленился, формулу скопипейстил и посчитал дельты на диапазоне 0-1 с шагом 0.001

Хочу уточнить - вы всю формулу приблизили полиномом или только степенную часть? А то у меня получается, что на степенной части все отлично, а вот на стартовом линейном участке - полная катастрофа.

Возможно, конечно, что дело в точности в этом месте: если у меня x 1E-3, то в седьмой степени это будет минус 21-я.

Ну насколько я вижу, ISPC

Ну насколько я вижу, ISPC работает так:
- вычисляет две ветки (если all/any убрать)
- вычисляет маску через cmpltps
- смешивает результаты двух веток через blendvps
- пишет результат
По смыслу то же самое, но наверное смешение в регистре, а потом одна запись - выгоднее, чем две записи.

А какой нибудь

А какой нибудь _mm_maskmoveu_si128 и совсем без ветвлений это очень плохо будет?
Маску сделать вычитанием из 0 как целых. Мы вроде на x86. Должно работать.
Правда AMD еще есть. Там maskmovdqu вроде хуже работает.
(С оптимизациями сталкиваться приходилось давно и не много.)

И точно. Мне показалось, что у них просто параметры в pow пе

И точно.
Мне показалось, что у них просто параметры в pow переставлены местами в тексте по ошибке.
Однако ж нет, из исходников следует, что ошибки вроде нет.

Тогда выигрыш не такой большой, как я думал.

Нет, если основание степени известно на время компиляции, то

Нет, если основание степени известно на время компиляции, то можно было посчитать логарифм во время компиляции.

Там параметр есть в функции, ilog2 называется. Он равен:
for pow(r, val): ilog2 = log(r) / log(2) = log(r) * 1.44269504088896

Если показатель степени известен на времени компиляции (как

Если показатель степени известен на времени компиляции (как в рассматриваемом моем примере), то логарифм тоже на времени компиляции считается.

По ссылке любопытно, однако придется все равно каждый раз вы

По ссылке любопытно, однако придется все равно каждый раз вычислять еще и логарифм.

С точки зрения моей практической задачи (imaging), sRGB gamm

С точки зрения моей практической задачи (imaging), sRGB gamma и Lab - есть частый, но частный случай "наложения тоновой кривой" на изображение. На практике же это может быть тоновая кривая из профиля (произвольная, заданная точками или кусочным полиномом), может быть модифицированный профиль "a-la Lab", по смыслу похожий, а по коэффициентам - чуть другой и т.п.

То есть речь идет о том, что коэффициенты в любом случае табличные. Просто их может быть десяток-полтора (общий полином на всю область) или полтора десятка тысяч (сплайн с 4k точек).

Правда есть еще OpenCL (и вообще LLVM), то есть код для общего полинома можно на ходу сгенерировать. Тоже интересно.

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

Да там же tradeoff точность/скорость. Про pow() вчера накоп

Да там же tradeoff точность/скорость.

Про pow() вчера накопал вот это, кстати: http://www.hxa.name/articles/content/fast-pow-adjustable_hxa7241_2007.html

Там очень такой аккуратненький компактный полином в сорцах, надо при случае попробовать.

http://piccy.info/view3/16798

http://piccy.info/view3/1679855/f269c3439b14b78451bd43c02577ce15/

Вообщем у меня получился исо

Вообщем у меня получился исо образ размером в 1.4 гб, когда дмг - 6,5 гб. ... это реально? а при запуски через ВМваре плеер пишет ошибочку... ща ссылку дам..

Я наоборот рад буду, если ISPC быстрее. Значит, сравнительно

Я наоборот рад буду, если ISPC быстрее. Значит, сравнительно неплохие функции используются.

ИМХО, сплайн и прочие табличные методы плохо сочетаются с SI

ИМХО, сплайн и прочие табличные методы плохо сочетаются с SIMD, особенно с out-of-order SIMD. А коэффициенты MiniMax полинома умеет считать Maple и (с некоторыми ограничениями) Mathematica. Да и вручную их несложно посчитать.

Э, фетч, запись и ветвление - это процентов 20 времени. А т

Э, фетч, запись и ветвление - это процентов 20 времени.

А так, конечно да, кто тут сильнее, слон или кит, это еще посмотреть.

Там в тексте есть ссылка, правильное на мой вкус решение - э

Там в тексте есть ссылка, правильное на мой вкус решение - это кубический сплайн (http://blog.lexa.ru/2010/12/27/o_stepennoi_funktsii_openmp_i_prochikh_gr...)

Но полиномом тоже можно, просто таблицу для сплайна я умею генерировать, а для minimax - нет.

Сплайн, если фигачить по 4 числа за раз, это
- 1 фетч данных (4 числа)
- 1 округление
- 4 фетча из таблицы сплайнов (она влезает в L2 с запасом)
- транспонирование
- ну и собственно расчет кубического полинома.

Для AVX я думаю что надо не кубический сплайн, а 7-й степени, но таблицу меньше. Еще не пробовал.

По моим прикидкам, большого выигрыша не будет. Да, длинные в

По моим прикидкам, большого выигрыша не будет. Да, длинные версии pow(log+exp) получаются на 10-20 процентов быстрее (не помню точных цифр), но ведь ветвление никуда не девается, поэтому придется честно делать второй проход (он будет раз в 5 быстрее) и для маленьких входных значений пересчитывать линейной функцией.
По прикидкам, выигрыш если и будет, то совсем уж копеечный. Ну разве что в MKL все уже многоядерное внутри и не придется #pragma omp писать.

По постановке:
У меня, собственно, задача была - пощупать за вымя ISPC на реальной, простой модельной задаче.

А правильное решение выглядит совсем иначе, кубический сплайн на 4k-таблице фигачит в пару раз быстрее при более чем приемлемой точности. И по ядрам масштабируется на OpenMP очень хорошо.

А почему бы не использовать приближение minimax полиномом? Н

А почему бы не использовать приближение minimax полиномом? Например, полиномиальная дробь -0.0282646 + 24.8353 x + 11724.6 x^2 + 625030. x^3 +
6.38388*10^6 x^4 + 1.2464*10^7 x^5 + 2.45062*10^6 x^6 -
187084. x^7)/(1 + 819.465 x + 93987.2 x^2 + 2.15735*10^6 x^3 +
1.05524*10^7 x^4 + 8.94367*10^6 x^5) даёт для вашей функции относительную ошибку 4.79681*10^-7, и скорее всего будет вычисляться быстрее, чем pow

А, точно :) Не, у меня все в L1 крутится. Я ж не пропускную

А, точно :)

Не, у меня все в L1 крутится. Я ж не пропускную способность памяти мерял, в конце концов. Но для того, чтобы понять, кто кого уделал, нужные все-таки более точные измерения и расчеты :)

Pages

Subscribe to comments_recent_new