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

Title Comment
Ну вот получилось писать на 6.7Gb/sec, правда из четырех тре

Ну вот получилось писать на 6.7Gb/sec, правда из четырех тредов. Из одного только пять.

В-общем, один movntps/movntdq

В-общем, один movntps/movntdq льет примерно 5 гигабайт/сек.

Он же с openmp - 6-6.1 гигабайт/сек. Если зажать число потоков до 4 (у меня 8 ядер: 4 да гипертрединг), то 6.7
Как-то я ожидал большего, если честно. Хотя все равно приятно.

Код, который пишет компилятор - медленнее, примерно 5gb/sec в пике.

Ну формально - 3 канала на

Ну формально - 3 канала на ~11gb/sec (DDR3, 1500 гигагерцiв), итого 33, это на чтение. Как прикинуть влияние задержек - понятия не имею.

А по факту - вот сижу и щупаю, сколько можно нагадить в память зараз.

"8-9 гигабайт в секунду" это

"8-9 гигабайт в секунду"

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

Смысл изначально был в том,

Смысл изначально был в том, что было два слота, один PCI, второй PCIe и нужно было два порта, сотку к ISP, гигабит к рабочей станции (наплатный был занят гигабитом к остальному дому и порты в свитче кончились).

С тех пор однопортовая PT-шка просто есть. Когда она освободилась, я ее ткнул в WS, для сравнения с наплатным реалтеком. Большой разницы не обнаружил, впрочем.

PCI однопортовка стоит

PCI однопортовка стоит столько же сколько PT'шка :)

Забавно. У меня

Забавно. У меня net.isr.direct=0 и net.isr.direct_force=0 ровно наоборот делает, минимум 100 Мбит "срезает".
Кстати, iperf и em0:taskq у меня упорно на одно ядро сажались. Разнесение на разные ("cpuset") дало прирость на те же 100 мбит.

P.S. Не очень вижу смысла в покупке однопортовой PT для дома, 32-битного PCI на гигабит всё же хватает, пусть и впритык.

Взял себе такой

Заказывал на computeruniverse.
Отличный домашний НАСик. Всем брать :)

Я развлекался именно с интелом, профайлер хороший имею на ви

Я развлекался именно с интелом, профайлер хороший имею на винде только.

Выигрыш VS2010/Intel я хорошо помню только для конкретного распаковщика хаффмана, который как раз не параллелится. Процентов 10, кажется. Автовекторизация хотспоты не лечит, не-хотспоты неинтересны.

Что касается OpenCL - да, планирую конечно, но для других мест и не сейчас (и наверное не LibRaw, а другой продукт). Проблема тут в том, что на карту льется гигабайт 5 в секунду и столько же обратно, поэтому нужно там делать сразу здоровый кусок работы, а не хотспоты.

Разрешения SSE мало, тот-же GCC надо отдельным специальным к

Разрешения SSE мало, тот-же GCC надо отдельным специальным ключиком пинать, чтобы автовекторизовывать начал.

> И от смены компилятора с Visual Studio на 12-й интел - тоже заметный выигрыш.

А заметный - это сколько? И интел с автовекторизацией или как?

PS: Я почему столько вопросов задаю - уж очень любопытно выяснить, каких высот достиг прогресс. А у меня таких задач нет.
PPS: А OpenCL версию планируешь? :-)

От разрешения генерировать SSE код (что 2, что 4.1) выигрыш

От разрешения генерировать SSE код (что 2, что 4.1) выигрыш какой-то совершенно копеечный, единицы процентов.
Вот от 64-бит - гораздо больше, т.к. куда регистры поюзать компилятор очень быстро находит.
И от смены компилятора с Visual Studio на 12-й интел - тоже заметный выигрыш.

И выигрыш - не на хотспотах. Они, собственно, хотспоты (в большой степени) по той причине, что компилятор там напуган и хороший код сгенерировать не может.

Нравится/не нравится выходной ассемблер компилятора - не чис

Нравится/не нравится выходной ассемблер компилятора - не числительное. А вот померять времена выполнения и сравнить - сколько там процентов получится? Интересно ведь. Или это сложно/долго/муторно?

Я пробовал с интеловским компилятором. То, что он делает на

Я пробовал с интеловским компилятором. То, что он делает на хотспотах - мне не нравится, руками можно сильно лучше и с относительно небольшими затратами умственного труда.

Мы, кажется, о разном. Автовекторизатор вроде как работает

Мы, кажется, о разном.

Автовекторизатор вроде как работает с существующим кодом и разве только просит прагмы расставить.
Я развлекался и особого смысла в результате не увидел, реальные хотспоты все одно придется переписывать, так почему не сразу на псевдоассемблер. Он хоть совместим со всем разумным.

Да в-принципе да, может быть и больше можно. Всякие тесты m

Да в-принципе да, может быть и больше можно.

Всякие тесты memory-copy намеривают для DDR3-1600 (трехканальной) в районе 8-9 гигабайт в секунду, это и есть целевое значение.

скажем так, автовекторизация на icc работает, но для этого к

скажем так, автовекторизация на icc работает, но для этого код должен быть написан в специальном виде (что по затратам фактически эквивалентно написанию кода на SSE intristics (фактически аналог ассемблера)).

<b>>> т.е. в ~5.5Gb/sec <<</b> Это откуда такие данные ?!? и

>> т.е. в ~5.5Gb/sec <<
Это откуда такие данные ?!?
и что это за память такая ?

(или это в битах и для кэша? :-))

речь не о слепоте (которой там нет и в помине), а об спектра

речь не о слепоте (которой там нет и в помине), а об спектральных характеристиках.

не забываем, что сенсор специально закрывают УФ+ИК фильтрами, чтобы придать нужную форму кривым (на границах диапазона).

Я может щас всем известное

Я может щас всем известное напишу или глупость какую.
К jpeg 6b существовал патч, гуглится по "pvrg jpeg ijg". Кусок из его реадме "This software implements JPEG baseline, extended-sequential, progressive
! and lossless compression processes.". Может поможет?
Плюс есть libjpeg-turbo на основе jpeg 6b c simd инструкциями, порченная и под 64 бита тоже. В свое время много юзал его японского прародителя. Давал существенный прирост в скорости против оригинального libjpeg, просто заменой shared библиотек. Но вот хаффмана там по моему не трогали.

Ну например GCC кое-что умеет, но в принципе понятно, что ру

Ну например GCC кое-что умеет, но в принципе понятно, что руками можно сделать больше. Ты-бы, кстати, попробовал хохмы ради на libraw, получится-ли что-нибудь, и главное - сколько :)

А библиотеки - ессно ручной вылизанный код для определенных задач будет кошернее. Да и обычные программисты меньше косяков понаделают.

В автовекторизацию просто скалярного кода на C - я верю слаб

В автовекторизацию просто скалярного кода на C - я верю слабо.
И Интел, судя по всему, тоже не особо верит, впихивая повсюду свои библиотеки.

Не, естественно reference C будет, как без него Я скорее пр

Не, естественно reference C будет, как без него

Я скорее про то, что SSE2 варианта я специально делать не буду. Если вдруг появится сам для каких-то кусков, ну отлично тогда.

Ну да. Lossles jpeg, да еще и с нетрадиционным layout, <a hr

Ну да. Lossles jpeg, да еще и с нетрадиционным layout, только что обсуждали.

И одним куском, DNG с такой же паковкой - побит на tiles (необязательно, но по факту - очень часто) и можно параллелить по процессорам хотя бы.

Забивать-то зачем? Сделай reference C вариант, и дальше опти

Забивать-то зачем? Сделай reference C вариант, и дальше оптимизируй ассемблер, сколько влезет. На рантайме довольно дешево можно решить, что использовать.

PS: А потом, лет через N, останется убедиться, что С уже не медленнее ручного вариант и расслабиться, качаясь на кресле-качалке у камина :-D

Кэнон чем-то ресурсоёмким запакован ?

Кэнон чем-то ресурсоёмким запакован ?

Да, там конечно другие вычисления и та же интерполяция - отн

Да, там конечно другие вычисления и та же интерполяция - относительно медленная.

Но 600 миллисекунд там, 250 - сям, глядишь и еще секунду снимем с 20-мегапиксельной картинки. Если без демозаики - а этот режим весьма интересен для всяких просмотрщиков - то я надеюсь в 1.5 секунды для 20-мегапикселей уложиться на все. Это для Кэнона, который медленно распаковывается, с теми же Сонями нет причин не уложиться в полсекунды.

А 300Mb/sec - это цветовое преобразование, на входе тройка R-G-B (или четверка R-G-B-G) и матрица матричного профиля, на выходе - R-G-B в каком-то приличном цветовом пространстве вроде sRGB/gamma 1

Ого. Вопрос в том, насколько это ускорит всё преобразование

Ого.
Вопрос в том, насколько это ускорит всё преобразование, там же и другие вычисления.

>> тот код что сейчас есть офигачивает ~300Mb/sec,

Те. 300 метров raw данных в секунду ? А на каком преобразовании ?

Минимум-максимум - ровно вчетверо быстрее. На одном треде.

Минимум-максимум - ровно вчетверо быстрее. На одном треде.

Умножение вектора на матрицу еще не попробовал, но сдается мне что разница будет еще больше: тот код что сейчас есть офигачивает ~300Mb/sec, а причин не упереться в ту же память (т.е. в ~5.5Gb/sec т.к. мы еще и пишем туда) я не вижу.

пардон 8-) А это сильно ускорит ? Ну, если можно получит

пардон 8-)
А это сильно ускорит ?
Ну, если можно получить ту же скорость на 2-х ядрах, а не на 4-х, то было бы классно.

А причем тут фотошоп? Я чисто о своем (см. теги). Смотрю на

А причем тут фотошоп?

Я чисто о своем (см. теги). Смотрю на хотспоты, смотрю на SSE-инструкции и думаю.

Я, конечно, эти тестовые примеры еще и в OpenMP заверну, может оказаться, что на 4 горшках оно и без SSE упирается в память, тогда и ладно.

Pages

Subscribe to comments_recent_new