Свежие комментарии
Title | Comment |
---|---|
а разве они уже умеют 1 блоком делать операцию над 256 бит в |
а разве они уже умеют 1 блоком делать операцию над 256 бит вектором за раз ? |
Только так, как вы |
Только так, как вы предлагаете - ничего не получится, увы.
|
Ага, действительно |
Ага, действительно интересно. Я был уверен, что AVX-вариант умножает вектора длиной 8, но посмотрел в reference - нет, две половинки по 4. Сделаю обязательно. Плюс, сделаю обязательно векторный вариант с транспонированными матрицами, как 256-битный, так и 128-битный. Надо бы еще clang/llvm под виндой развернуть.... |
Большое спасибо за |
Большое спасибо за приведенные измерения. Вот еще какой вопрос меня волнует. У меня железа нет такого, чтобы проверить. Как измениться производительность intrinsic варианта на Core-i7, если поменять То-есть насколько вырастить производительность если мы совсем на AVX переедем и будет обрабатывать по 8 float за проход? А то слухи разные ходят... от 0% до 200% роста. |
Срок хранения на флэшке? |
Есть данные сколько времени современные флэшки хранят информацию? Сейчас наверное больше, но нужно будет создавать оптимальные условия. Появляется еще одна аналогия со слайдами - не только сливер и стоимость, но и отдельный "холодильник" для хранения. :) |
Да, с транспонированной |
Да, с транспонированной матрицей конечно должно быть быстрее. Я пощупаю и расскажу. А проход по инициализированным (т.е. без page fault) пикселям должен быть примерно одинаковый каждый раз, массив *много* больше кэша (для гигапикселя - на три порядка). |
М-да. У меня gcc 4.6.1 и |
М-да. У меня gcc 4.6.1 и брать елемент по индексу в векторе умеет. С и без union-ом код разный получаеться С union v4u Без union-а код, как по мне, получше, но черт его знает как быстро инструкция extractps отрабатывает.
В итоге я предлагаю переписать функцию, вот таким вот образом. Все заметно быстрее начинает бегать. typedef float __v4sf __attribute__ ((__vector_size__ (16))); void fdotp_vec3 (__v4sf *d, int sz) Здесь и без слов понятно, что все на порядок быстрее Кстати, я также думаю что первый проход по массиву пикселей будет всегда медленней всех последующих. Было бы хорошо проверить. |
Вот занесло на dealxtreme и я эту лягушку нашел: http://www |
Вот занесло на dealxtreme и я эту лягушку нашел: http://www.dealextreme.com/p/usb-powered-universal-cell-phone-battery-ch... Два бакса стоит! |
Да как-то не вижу я ее в |
Да как-то не вижу я ее в 4.6.2: Возможно, я готовлю как-то не так, примеров на вебе как-то совсем мало вменяемых. $ gcc -v Вот clang так понимает, только разницы никакой: (_vec2 - это без union) |
Лично мне, векторный код gcc |
Лично мне, векторный код gcc кажеться кривоватым. Ну, нафига ты вводил новый union тип v4u...... Ты же обгадил всю малину для gcc оптимизатора. А к елементам __v4sf можна обратиться просто по индексу без этих костелей. Правда эта фичя только в 4.6.0 появилась. typedef float __v4sf __attribute__ ((__vector_size__ (16))); __v4sf v; |
Ну вот у меня в посте ссылка ("например такой") на какой-то |
Ну вот у меня в посте ссылка ("например такой") на какой-то китайский универсальный зарядник для 3.7 и 7.4 с питанием от 5В и от 12. А вопрос больной, потому что батарей разных набегает много и брать запасных каждого вида очень уж хлопотно. |
Вроде его Вампирчик всегда продавал как свою железку ? Может |
Вроде его Вампирчик всегда продавал как свою железку ? Айфону нужно 700мА, насколько я помню, а многие USB-зарядки дают только 500, в отличие от вампирчиковских, которые умеют 1.5А Вопрос про то, чем заряжать сами аккумуляторы, вне устройств, которые умеют заряжать, типа айфона, Thuraya и пр. |
"лягушка" - это не "от вампирчика", это чистый и незамутненн |
"лягушка" - это не "от вампирчика", это чистый и незамутненный китай. А стабилизатор 5В ("от вампирчика") работал на ура и зарядил и книжку и, что более ценно, айфон (который от китайского солнечного зарядника не только не заряжался, но даже просто не включался, току мало). |
"Зарядное устройство Лягушка зарядило Турайю "на одну палку" |
"Зарядное устройство Лягушка зарядило Турайю "на одну палку", зажгло лампочку "зарядка закончена" и приказало долго жить" Я ещё в прошлом обсуждении писал, что электроника у Вампирчика (ну и MobiPower, соответственно) "на уровне детсада" по надежности и качеству исполнения. В поход, возможно, есть смысл брать одну секцию солнечной и заряжать в аварийных ситуациях литий напрямую, максимум с токоограничителем. |
Ну круто, а то asm встраивать |
Ну круто, а то asm встраивать везде по своему надо (AT&T/etc). В VisualStudio x64 asm вообще нельзя встраивать в код, приходится отдельно линковать.. |
gcc понимает _mm (и набор |
gcc понимает _mm (и набор #include тот же). Они транслируются в _builtin_ через дефайны. Update: и clang - тоже. Т.е. fdotp_sse из поста - транслировалась всеми четырьмя компиляторами (и давала правильный результат!) |
Ну да, оно все раздражает. И |
Ну да, оно все раздражает. И трансляция из регистров в имена переменных и разный порядок операндов в командах у gcc и Intel/MS. С vex-командами (трехадресными) вообще начало сносить крышу: vdpps xmm11, xmm5, xmm0, 241 Блин. |
Покрайней мере у ICC и Visual |
Покрайней мере у ICC и Visual C++ они одинаковы, про gcc незнаю точно но мне кажется тоже самое. |
Такой код бы был хорошо |
Такой код бы был хорошо портируемый и с хорошей производительностью, хотя скорее всего не с оптимальной. intrinsic вроде у каждого компилятора свои, или нет? |
Так и приходится, только в |
Так и приходится, только в Visual C++. Долго переписывать с assembler'а на intrinsic'и. Где-то видел скрипт на питоне преобразующий ассемблерные вставки на intrinsic'и но что то найти его никак не могу. |
Его на intrinsic'и |
Его на intrinsic'и переписывать не очень удобно, мне приходиться для многих инструкций по справке искать ее название в intrinsic'ах. |
Жаль нету компиляторов/утилит |
Жаль нету компиляторов/утилит который бы по C коду генерировал бы черновой векторизованный вариант для нужной версии SSE для дальнейшей ручной оптимизации gcc -S |
А чем просто ассемблерный |
А чем просто ассемблерный вывод нехорош? Ну и ispc есть, для векторного случая (т.е. сильно векторизуемых данных) - в самый раз. |
Intrinsics |
Ссори за оффтоп. Жаль нету компиляторов/утилит который бы по C коду генерировал бы черновой векторизованный вариант для нужной версии SSE для дальнейшей ручной оптимизации. Такой код бы был хорошо портируемый и с хорошей производительностью, хотя скорее всего не с оптимальной. |
OpenCL выиграет только если |
OpenCL выиграет только если надо "10 раз". |
OpenCL |
> Кормились 1 миллиардом пикселей 10 раз. Времена исполнения каждого сниппета получаются в диапазоне 3.5-20 секунд, что более чем достаточно. |
Ну вот я смотрю в книгу в |
Ну вот я смотрю Ну не должна быть такая разница от инвариантов. Хрен его знает, конечно. |
Заметно меньшая эффективность |
Заметно меньшая эффективность компилятора Intel для "ручного кода" на AVX-процессоре объясняется банально: для load/store используется [v]movups (невыровненые данные) вместо [v]movaps. Так на i7 вроде без разницы movups или movaps (всмысле по скорости). Я по-моему даже тест делал, хотя могу и ошибаться. quick google показал: http://www.google.ru/url?sa=t&source=web&cd=9&ved=0CGsQFjAI&url=http%3A%... "Intel SSE included movups (on previous IA-32 and Intel 64 processors, |
Ну так "производительность не переносится". Ну разве только |
Ну так "производительность не переносится". Я тут, к удивлению своему, обнаружил, что SSE4.1 (в виде dpps и blendps) есть не на всех Core2. На макбуке 4-летнем (2007-й) процессор T7500, а на нем только SSE3. |
Я с удивлением недавно |
Я с удивлением недавно заметил что VC++ автоматически анролит циклы с небольшим константным количеством итерации. Возможно он и без прагмы цикл unroll'ит :-). |
Pages
