<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: синхронизация с быстрым мьютексом</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8684.html</link>
    <description>Здравствуйте!&lt;br&gt;Вопрос о многопоточном приложении. Задача параллелиться путем разделения на очень много очень мелких подзадач (200-1000 умножений/суммирований), которые выплняються практически независимо. Для синхронизации есть ячейка памяти типа int, с которой надо значение считать (id фрагмента для обработки) и увеличить на 1 (пока меньше некоторого значения). Сначала использовал для синхронизации доступа семафор и все работало. Но реально скорость росла до 6 процессоров (SMP), дальше выполнение замедлялось, вероятно из-за малости параллельных фрагментов для обработки (нельзя увеличить) и дороговизны синхронизации семафорами. Потому я переписал на синхронизацию мьютексом (ядро 2.6, мьютексы быстрые). Теперь код &amp;#171;проскакивает&amp;#187; значения т.е. не останавливаеться при достижении заданого количества счетчика фрагментов. Может, это конечно проблемы с отладкой, но все работает с семафорами, и при замедлении (пересчитать все 10 раз), и в 1-потоковом режиме. Вот я и подумал, может это процессор не успевает п</description>

<item>
    <title>синхронизация с быстрым мьютексом (svn)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8684.html#8</link>
    <pubDate>Mon, 12 Apr 2010 05:35:46 GMT</pubDate>
    <description>&amp;gt; не могу понять как такое может быть &lt;br&gt;&amp;gt;впринципе... &lt;br&gt;&lt;br&gt;Шансы что ты распараллелишь лучше openmp - крайне малы. OpenMP использует пул потоков, который намного эффективнее создания потоков. С ним вероятность сделать ошибку, приводящую к неправильным результатам или падению производительности намного ниже.&lt;br&gt;</description>
</item>

<item>
    <title>синхронизация с быстрым мьютексом (ghost_in_machine)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8684.html#7</link>
    <pubDate>Sat, 10 Apr 2010 00:25:00 GMT</pubDate>
    <description>&amp;gt;Интереснее было бы узнать какой результат показал на этой задаче OpenMP. &lt;br&gt;&amp;gt;Вполне вероятно что было бы ещё лучше, и меньше вероятность сделать ошибку. &lt;br&gt;&amp;gt;&lt;br&gt;&lt;br&gt;Ваше сообщение поставило меня в тупик :). Не могли бы Вы тезисно пояснить как некая надстройка может быть быстрее прямого взаимодействия нитей? Тоесть я Вас ни в коем случае не критикую ибо не имею практики с OpenMP, но не могу понять как такое может быть впринципе... &lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>синхронизация с быстрым мьютексом (svn)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8684.html#6</link>
    <pubDate>Fri, 09 Apr 2010 12:59:36 GMT</pubDate>
    <description>Интереснее было бы узнать какой результат показал на этой задаче OpenMP.&lt;br&gt;Вполне вероятно что было бы ещё лучше, и меньше вероятность сделать ошибку.&lt;br&gt;</description>
</item>

<item>
    <title>синхронизация с быстрым мьютексом (ghost_in_machine)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8684.html#5</link>
    <pubDate>Thu, 08 Apr 2010 23:08:53 GMT</pubDate>
    <description>Всем спасибо, ошибка нашлась в коде (были гонки с main потоком по включению/засыпанию расчетных потоков при переходе к параллельным вычислениям и назад). &lt;br&gt;Да, о pthread_mutex в NPTL я и говорил (честно говоря с чистыми фьютексами чувствую себя некомфортно и как-то запутанно).  &lt;br&gt;П.С. Если кому интересно подобный опыт, то код с скмафорами на 16-ядерном SMP Xeon E7340 &#064;2.4GHz, Linux 2.6.9-55 забирал 600-800&#037; по top, а теперь 1550-1570&#037; (почти случайные франменты данных из 30Mb процесса). Это для параллельного расчета подзадач на 200-1000 умножений/суммирований, общий ресурс - из 1 ячейка int считываеться и увеличиваеться на 1. Это я к тому что для числодробилок вообще штатная ситуация когда многие, но весьма маленькие куски можно расчитывать независимо (тратить 1 поток на сборку кусков и подготовку нових пока все остальные их перемалывают) ну и так, если не дергать ядро, можно вполне эффективно распараллелить код  для алгоритма, который вообще-то не параллелиться. Вывод: не зря шумели вокруг фьютексов :).&lt;br&gt; &lt;br&gt;</description>
</item>

<item>
    <title>синхронизация с быстрым мьютексом (svn)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8684.html#4</link>
    <pubDate>Thu, 08 Apr 2010 08:27:40 GMT</pubDate>
    <description>&amp;gt;видимо используются fast userspace mutexes &lt;br&gt;&lt;br&gt;Его и использует pthread_mutex в NPTL.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>синхронизация с быстрым мьютексом (Kane)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8684.html#3</link>
    <pubDate>Thu, 08 Apr 2010 06:53:27 GMT</pubDate>
    <description>&amp;gt;&amp;gt;я переписал на синхронизацию мьютексом (ядро 2.6, мьютексы быстрые).&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;pthread_mutex? &lt;br&gt;&amp;gt;&lt;br&gt;&lt;br&gt;видимо используются fast userspace mutexes &lt;br&gt;&lt;br&gt;int sys_futex (void *futex, int op, int val, const struct timespec *timeout);  &lt;br&gt;</description>
</item>

<item>
    <title>синхронизация с быстрым мьютексом (svn)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8684.html#2</link>
    <pubDate>Wed, 07 Apr 2010 06:48:44 GMT</pubDate>
    <description>&amp;gt;я переписал на синхронизацию мьютексом (ядро 2.6, мьютексы быстрые).&lt;br&gt;&lt;br&gt;pthread_mutex?&lt;br&gt;&lt;br&gt;&amp;gt;&amp;#171;проскакивает&amp;#187; значения т.е. не останавливаеться при достижении заданого количества &lt;br&gt;&lt;br&gt;Где-то забыл блокировку. Вероятно на проверке этого самого значения.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>синхронизация с быстрым мьютексом (ACCA)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8684.html#1</link>
    <pubDate>Wed, 07 Apr 2010 02:07:54 GMT</pubDate>
    <description>&amp;gt;Вот я и подумал, может это процессор не успевает перенести из &lt;br&gt;&amp;gt;кеша в память новое значение счетчика, пока его считает второй процессор &lt;br&gt;&amp;gt;(ведь мьютекс защищает только на время считывания и арифметики первого CPU)? &lt;br&gt;&lt;br&gt;У многоядерного камня кэш один на все ядра, у многопроцессорной системы принимаются специальные меры, чтобы кэш был &quot;когерентный&quot; между всеми процессорами. Это одна из причин, почему многоголовые матери такие дорогие. Хотя баг в чипсете возможен, но маловероятен. Что вероятнее - дешёвая мать _вообще без_ когерентного кэша. При таком раскладе попробуй включить режим кэша write-through.&lt;br&gt;&lt;br&gt;Уточни - что за процессоры, что за чипсет, что за мать. Может кто слышал про грабли именно с ними.&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
