Свежие комментарии
Title | Comment |
---|---|
Блин, новые горшки объявили, |
Блин, новые горшки объявили, которые Sandy Bridge. Всего в два раза больше (в смысле AVX), но памяти - только два канала. То бишь вместо 25Gb/sec полосы - только 17 намеривают. К концу года обещают 4-канальные, конечно, но ведь столько ждать - это утомиться! |
Вы че?! |
Всем привет - это ящик для тазиков реализованых под сервер а не под домашнюю игровую станцию.... Посему там нету пользовательских примочек зато серверный упор выдержан.... |
Поднял частоту памяти (и, |
Поднял частоту памяти (и, заодно, процессора), процессор стал 3.2, память - 1600. Запись выросла до 19.2GB/sec (_mm_stream_ps) |
У меня не 1600, а 1500 |
У меня не 1600, а 1500 реально. Во всяком случае, оно так пишет про себя при загрузке. Но, возможно, какие-то другие клоки при этом похуже. |
да, load_pd это чтение.. Я |
да, load_pd это чтение.. |
load_pd - это же чтение |
load_pd - это же чтение такое? Ну да, с префетчем и если регистров хватает, наверное как-то так. 17gb/sec. Чистое копирование меня интересует постольку-поскольку, хотя вот вместе с конверсией типа, скажем float в short - интересно будет попробовать. |
Вот только всё равно хочу |
значит vs2010, core i7 930, 3xDDR3-1333, ht выключен, openmp 4 потока, размер массива - 800MiB - выровнен по 64 байтам, каждый поток пишет/читает по 4 xmm(то есть 64 байта), перед началом всё инициализируется, основной цикл повторяется 16 раз _mm_stream_pd компилируется в movntpd ~ 17Gb/s |
Да, касаемо таблицы, скажем для замены табличным профилям. Т |
Да, касаемо таблицы, скажем для замены табличным профилям. Там на входе - триада (RGB), в некоторых случаях хочется тетраду (RGBG2). Даже если 10 бит на элемент (что гадски мало даже для линейного лукапа), получается таблица с 2^30-2^40 входов. Как-то многовато..... Другой вопрос, что точек для оценки/построения табличного профиля берется, в лучшем случае, несколько тысяч - значит это и будут реальные узлы таблицы. А дальше - интерполяция. |
У таблицы на 65k записей и просто лукап - получается точност |
У таблицы на 65k записей и просто лукап - получается точность (максимальное отклонение от идеала) порядка 1% (потому что производная в некоторых местах - большая) Если увеличивать таблицу - скорость будет падать, даже 65к записей - это уже целиком кэш L2. То есть, как уже написано в разделе "табличный лукап": "не для того мы заводили плавающую точку, чтобы сразу округлять" |
а просто таблица с прямым lookup - не? насколько я слышал ( |
а просто таблица с прямым lookup - не? насколько я слышал (точно не знаю) контроллеры управления двигателями в автомобилях ничего не вычисляют вообще - работают по таблицам значений f(x, y, z) если и не большего к-ва переменных |
Гугление показало следущее - у PGI-компилятора слет состоян |
Гугление показало следущее MS просит возвращать как было перед вызовом других функций за исключением вариантов "явного согласия". Ну и defaults описаны в доке. Подозреваю, что rounding mode вообще мало кто меняет. |
Хм... Тогда они, вероятно, не слетают, а возвращаются к неко |
Хм... Тогда они, вероятно, не слетают, а возвращаются к некоторым дефолтным настройкам. Значит наверное должен быть какой-то метод задания дефолтных настроек, это было бы логично.. |
И, кстати, я подозреваю, что вообще все настройки FPU/SSE сл |
И, кстати, я подозреваю, что вообще все настройки FPU/SSE слетают. |
Не, ну я то изучал влияние размера интерполяционных таблиц н |
Не, ну я то изучал влияние размера интерполяционных таблиц на точность, как только оно стало попадать не в те строки из-за округления, так сразу стало понятно.... |
Не, ну я OpenMP не то, чтобы первый раз увидел, но почти не |
Не, ну я OpenMP не то, чтобы первый раз увидел, но почти не пользовался, в реальных программах *было* проще распараллелить более крупными кусками. Вот, походил по грабелькам, стал опытнее. |
похоже это косяк VS. если переменная read only то никаких ло |
похоже это косяк VS. если переменная read only то никаких локов быть не должно. каждое ядро сделает копию в свой L2(L1) и будет её спокойно читать. возможен конфликт за доступ к общей линии L3, но это случится 1 раз, после этого каждый сделает копию себе (в случае private аналогично). |
ну да, хрен догадаешься... Повезло, что отловили, дебужить т |
ну да, хрен догадаешься... Повезло, что отловили, дебужить такую вещь может быть ооочень затейливо... |
Наиболее чУдным открытием оказался ресет rounding mode внутр |
Наиболее чУдным открытием оказался ресет rounding mode внутри OpenMP-потока. Вот это да - реальная жесть. |
Ооо, понятно. Знакомо)) Одна беда, что все спецификации, на |
Ооо, понятно. Знакомо)) Одна беда, что все спецификации, на основе которых надо работать, не начитаешься... Спасибо за апдейт, ценное уточнение. |
Все оказалось куда тупее: http://blog.lexa.ru/2010/12/29/ope |
Все оказалось куда тупее: http://blog.lexa.ru/2010/12/29/openmp_intel_vs_visual_studio.html |
где можно купить б.у такой |
где можно купить б.у такой фотик? |
Вы говорите о прямой |
Вы говорите о прямой имплементации, которая на C? Впрочем, попробовал. Oi и SSE2 у меня были включены, добавление _set_SSE2_enable(1) ничего не меняет: 7 мегапикселей в секунду для одного потока и 36 для OpenMP. С Visual C++ забавнее другое: в один поток SSE-вариант сплайнов быстрее, чем C-шный вариант сплайнов раза в полтора-два (не в четыре, потому что скалярный вариант просто считает, а мой векторный на ~8 операций счета делает еще 8 операций для транспонирования). А вот с OpenMP - С-шный вариант ускоряется почти вчетверо (и впрямь, чего ему), а SSE - замедляется. Я на досуге, конечно, попробую оторвать интеллект компилятору, возможно он увидев ассемблерные макросы внутри OpenMP-блока - дуреет и надо их от него попрятать в отдельную функцию в отдельной библиотеке. Или треды свои самому запускать, по числу ядер.... Разбираться надо, конечно, Visual - гораздо более распространенный компилятор, чем Intel, а у меня опенсорс... |
Алексей, а не пробовали |
Алексей, а не пробовали просто играться в 2010й студии |
А что там с инвалидацией? |
А что там с инвалидацией? Если она идет не по адресу, а по ассоциативному адресу, то даже с не-shared кэшем ядра будут портить малину брату. |
кэша у L2-кэша (L1 то у ядер |
У core i7 l2 не shared, l3 - shared. http://www.tomshardware.com/reviews/Intel-i7-nehalem-cpu,2041-10.html |
Да, местами она странная. Но конкретно к movaps/movntps пре |
Да, местами она странная. Но конкретно к movaps/movntps претензий нет: т.е. интел додумал в этом месте правильную инструкцию написать, но вообще надо там писать _mm_stream_ps (о чем я теперь знаю из гугла) и сейчас я это дело изучу... |
Ага, понятно, хитрО... Ну, т.е. если я правильно вас понял, |
Ага, понятно, хитрО... 2010 студия весьма противоречивая получилась. Крайний раз я что-то похожее помню то ли на версии VS5, то ли на первой с .NET, которая после вполне нормальной VS6 была. |
У меня есть ощущение, что все |
У меня есть ощущение, что все (разумные) смешивающие преобразования в RGB будут несмешивающими в Lab. Нет, ясно, что есть такая штука как Channel mixer делающая любой канал линейной комбинацией других (возможно даже в другом цветовом пространстве!) но часто ли это используют люди (кроме хардкорных последователей старого Маргулиса)? Особенно в фото а не в полиграфии? |
Даже одна матрица размером | Даже одна матрица размером 248 - это уже перебор. И даже размером 236 (3-мерный сплайн по 12 бит на сторону) - тоже перебор. Т.е. смешение каналов хорошо бы сводить к линейной операции, размером 3x3, возможно с каким-то поканальным препроцессингом до и после. |
Я на профиле (VTune) вижу, что сильно больше времени начинае |
Я на профиле (VTune) вижу, что сильно больше времени начинает уходить на сохранение результата (в параллельной версии в сравнении с последовательной). Возможно, причина в том, что это самое [i] в разных тредах очень синхронно попадает в один участок кэша у L2-кэша (L1 то у ядер свой). Разбираться - не очень понимаю как, это место в VTune (или, если хотите, в хардверных счетчиках у i7) я пока не понимаю. Интел в этом месте делает, как уже обсуждали в соседних каментах, movntps, которые кэш не размывают. |
Pages
