Свежие комментарии
Title | Comment |
---|---|
а зачем нужно столько ядер на выгребание? у линуха ведь есть |
а зачем нужно столько ядер на выгребание? у линуха ведь есть расштрения всякие типа zero copy. |
Если сравнивать различные поколения ускорителей, то да, объе |
Если сравнивать различные поколения ускорителей, то да, объем быстрой памяти на один вычислительный блок растет. Но что с того? В 2 раза за 4 года - это не так уж и много. Ну и вот еще что, вернусь к одной Вашей фразе несколькими комментариями выше: > Для алгоритмов, у которых отношение flops/memory небольшое и не растет с размером задачи - вы для внешних GPU окажетесь ограничены PCIe bandwidth Это верно лишь в случае, если данные для работы ядра необходимо передать из хоста в устройство. Что совершенно не обязательно. |
Ну "относительно" же. 8800GTX - 16kb shared, 32kb регистров |
Ну "относительно" же. 8800GTX - 16kb shared, 32kb регистров (8k по 4 байта) на SM, всего 48kb быстрой памяти. Да, SM тоже подрос, поэтому оно не учетверилось в расчете на единицу SIMD, а удвоилось. С точки зрения блочных алгоритмов - часть утроилась (shared), а часть - удвоилась (регистры). Это за 4 года, с 2006 по 2010. |
Согласен почти со всем. Не согласен с последним. Локальная п |
Согласен почти со всем. Не согласен с последним. Локальная память/L1 - это дорого. В сумме сейчас в районе 64КБ на один compute unit. Думаете, если бы у производителей была возможность ее увеличить сравнительно недорого, они бы этого не сделали? |
Да, все так, но не все так плохо :) Для алгоритмов, у котор |
Да, все так, но не все так плохо :) Для алгоритмов, у которых отношение flops/memory небольшое и не растет с размером задачи - вы для внешних GPU окажетесь ограничены PCIe bandwidth. А для внутренних - memory bandwidth (которая в разы больше). А если flops/mem растет с размером локального блока вычислений (как для dgemm, к примеру), то нагрузка на память уменьшается путем увеличения local/shared mem, что относительно недорого для производителей GPU/APU. |
APU архитектура сбалансирована только для слабых интегрирова |
APU архитектура сбалансирована только для слабых интегрированных GPU. Потому как более мощным GPU будет не хватать пропускной способности глобальной памяти, которая, в случае интеграции GPU и CPU - это обычная RAM. Вон, в 7xxx серии будет память XDR2 с 256-битной шиной с пропускной способностью под 300 ГБ/с. Такой пропускной способности у обычной RAM (DDR3) нет. |
Но, кстати, конструкция Бульдозер+GPU в одном флаконе (т.е. |
Но, кстати, конструкция Бульдозер+GPU в одном флаконе (т.е. APU, как они их называют) - для вычислений опять несбалансирована, потому что на I/O ничего тратить не надо. |
А по вопросу: Из новости на ФЦентре: "По сведению аналитико |
А по вопросу: Из новости на ФЦентре: "По сведению аналитиков компании IDC, доля AMD на рынке процессоров для серверов снизилась со второго квартала 2006 года с 25,9 % до 5,5 % во втором квартале 2011 года". |
А, ага. Да, софт придется делать, это не вопрос. Именно при |
А, ага. Да, софт придется делать, это не вопрос. Именно придется, потому что гетерогенные архитектуры - это неизбежное ближайшее будущее, да и настоящее уже, что уж там. |
Ну так я о том и пишу там выше - для гибридной конструкции б |
Ну так я о том и пишу там выше - для гибридной конструкции бульдозер получается примерно в самый раз. |
> Но на эти два GPU - надо 6 ядер на I/O, четырех мало. Пус |
> Но на эти два GPU - надо 6 ядер на I/O, четырех мало. Пусть так. Но этим ядрам не особо то и нужны FPU, верно? |
Оно как бы и да и нет, в смысле ускорителей. Матрицы перемно |
Оно как бы и да и нет, в смысле ускорителей. Матрицы перемножать - да, два GPU 6-тысячной серии раз в 6-7 быстрее, чем два 12-ядерных оптерона. И дешевле раза в четыре (6990 - 25k, оптерон 6176 - 45k, если я ничего не перепутал). А как только начинаются ветвления, так сразу все не так однозначно. |
Я вот думаю, что тут расчет у AMD простой: Матрицы перемножа |
Я вот думаю, что тут расчет у AMD простой: Матрицы перемножать в больших количествах - это на ускорителях (скоро уже и 7xxx серия подоспеет с 2,000 ядрами). А SQL-серверу, web-серверу FPU (практически) не нужен. В последнем абзаце статьи по ссылке об этом как раз упоминается. |
Про fence я не понимаю. 1) |
Про fence я не понимаю. Так зачем fence? Если бы обработка была "чтение по адресу Х, обработка, запись по адресу Х+1" - тогда я понимаю. Но обработанный (прочитанный-обработанный-записанный) элемент данных - не трогается. BTW, в каких-то ситуациях intel сам лепит movntps без (m|l|s)fence |
Я именно об этом и говорю - |
Я именно об этом и говорю - строка уже в кеше, и процессор может, но не обязан, это заметить. В любом случае, код некорректен из-за отсутствия fence, и все это мои спекуляции. |
Моя гипотеза - вымывается кэш. Поэтому чисто write (залить |
Моя гипотеза - вымывается кэш. Поэтому чисто write (залить память константой) должно быть быстро, а read-write - медленно. Сейчас попробую. |
Ну так чтение происходит *до* |
Ну так чтение происходит *до* записи, после записи - по тому же адресу ничего не читается. История обсуждается вот тут в комментариях: http://blog.lexa.ru/2010/12/21/polna_chudes_moguchaya_priroda.html И на i7-920 у меня получалось, что movntps для записи - заметно быстрее, чем movaps. Для i7-avx принципиальной разницы я не вижу. |
Я пробовал как то _mm_stream_ps на Core2Duo. Медленнее, чем |
Я пробовал как то _mm_stream_ps на Core2Duo. Медленнее, чем обычный store. Тоже не понял, в чем же фокус. |
Могу поугадывать. Если |
Могу поугадывать. Если тестовым примером был код из http://blog.lexa.ru/2011/09/01/o_kompilyatorakh_i_protsessorakh.html, то хочу обратить внимание, что тут производится кешируемое чтение по тем же страницам, по которым идет WC-запись. Интел называет это неопределенным поведением и требует обязательно использовать как минимум store fence вокруг WC-записей. Мое предположение состоит в том, что self-snoop на core i7 и старше замечает, что строка уже в кеше, а на старых Core2 нет. Даже на терабайтных записях кеш помогает за счет более гибкого write coalescing. Писатели драйверов видеокарт давно знают, что линейная запись текстуры в основной памяти и ремап в апертуру в разы быстрее записи через WC-апертуру. |
Лучшая система |
На сегодняшний момент Windows7 одна из лучших систем в мире. Это наверное самый удачный продукт, который выпустила компания Microsoft за многие годы. Vista изначально была обречена на неудачу, даже ее разработчики признали, что это мертвая система, у которой нет будущего. Многие пытаются сравнивать две системы Vesta и Windows7 это не правильно, внешнее сходство ни о чем не говорит. Это абсолютно разные системы и по интерфейсу, и по надежности, и по скорости работы! |
В реальном мире оно как-то без шансов. |
В реальном мире оно как-то без шансов. |
> А значит - писать таки на SIMD-ассемблере. А не проще ли |
> А значит - писать таки на SIMD-ассемблере. А не проще ли предупредить в ридми о наличии фигни и рекомендовать оптимальный компилятор? |
У меня данных - 1.6Gb, |
У меня данных - 1.6Gb, поэтому кэш уже несущественен. На i7 movntps (для больших объемов) был заметно быстрее, на i7-AVX я не вижу большой разницы, на Core2 - медленнее и сильно. Чудеса. |
А что удивительного ? |
Сам интел пишет, что записи, ининциируемы movntps исользуют WC-протокол, т.е кешируются только во write-буферах процессора. Поскольку буферов единицы (максимум десятки) штук, записи, после заполнения имеющихся буферов, начинают выполнятся на скорости памяти. Буферы имеют размер строки кеша, так то срабатывает C (combining) и запись идет все-таки быстрее чем совсем медленная память, но медленнее, чем в кеш. |
На моём i7 2670QM (2GHz) этот код выдаёт 475 MPix/sec если д |
На моём i7 2670QM (2GHz) этот код выдаёт 475 MPix/sec если данные в L2, 450 MPix/sec если данные в L3, и 310 MPix/sec если данные в памяти SECTION .text global convert_pixels ; extern "C" void convert_pixels(const float* source, float* destination, size_t length) vzeroupper vmulps ymm4, ymm0, [table0] vhaddps ymm4, ymm4, ymm5 vhaddps ymm4, ymm4, ymm6 vmovaps [rdx], ymm4 ret |
Заврался я совсем sse4.1 на |
Заврался я совсем sse4.1 на core2 не было. Это был i5. |
Да, именно это я и |
Да, именно это я и предпологал. Писал я генератор псевдослучайных floats и там как раз скалярное произведение. Обрадовался я, и побежал sse4.1 использовать, а на практике оказалось на 15% медленее вручную прописанных mult_ps, add_ps. Но это на core2 было, подумал я что на i7 могли уже допилить до ума. А нет... В таком духе можно и 256bit вариант написать. Должен быть самый быстрый. |
Вот так вот можно: __m128 x0 |
Вот так вот можно: |
Сделал: |
Сделал: http://blog.lexa.ru/2011/09/04/o_kompilyatorakh_i_protsessorakh_avx.html |
Ну так а мне, по счастью, и не надо 256 бит за раз, у меня с |
Ну так а мне, по счастью, и не надо 256 бит за раз, у меня скалярное умножение двух векторов длиной 4 |
Pages
