Уважаемые гуру, есть проблема распаралеливания ресурсов процессора Core 2 Duo. Использую Debian. С помощью ImageMagick собираю из 3 изображений одно и вот проблема - сумма загрузки обоих ядер не превышает 100% (либо 100% на одном ядре, либо типа 20 на 80 на обоих) Всю инфу о загрузке проца получил командой top (1). И вот вопрос - могу ли я к.л. способом загрузить процессор на 100(200)% т.е. распаралелить процесс? Пробывал nice, не помогло. Заранее спасибо.
>Уважаемые гуру, есть проблема распаралеливания ресурсов процессора Core 2 Duo. Использую Debian.
>С помощью ImageMagick собираю из 3 изображений одно и вот проблема
>- сумма загрузки обоих ядер не превышает 100% (либо 100% на
>одном ядре, либо типа 20 на 80 на обоих) Всю инфу
>о загрузке проца получил командой top (1). И вот вопрос -
>могу ли я к.л. способом загрузить процессор на 100(200)% т.е. распаралелить
>процесс? Пробывал nice, не помогло. Заранее спасибо.SMP?
>>Уважаемые гуру, есть проблема распаралеливания ресурсов процессора Core 2 Duo. Использую Debian.
>>С помощью ImageMagick собираю из 3 изображений одно и вот проблема
>>- сумма загрузки обоих ядер не превышает 100% (либо 100% на
>>одном ядре, либо типа 20 на 80 на обоих) Всю инфу
>>о загрузке проца получил командой top (1). И вот вопрос -
>>могу ли я к.л. способом загрузить процессор на 100(200)% т.е. распаралелить
>>процесс? Пробывал nice, не помогло. Заранее спасибо.
>
>SMP?Да, конечно. Ядро 2.6.18-4-686 #1 SMP
>>SMP?
>
>Да, конечно. Ядро 2.6.18-4-686 #1 SMPЕщё нужно чтобы сама программа была многопоточной. Один поток выполняется только на одном логическом процессоре. Соответственно, если программа работает в один поток -- то быстродействие можно увеличить лишь увеличив частоту/кеш процессора.
>>>SMP?
>>
>>Да, конечно. Ядро 2.6.18-4-686 #1 SMP
>
>Ещё нужно чтобы сама программа была многопоточной. Один поток выполняется только
>на одном логическом процессоре. Соответственно, если программа работает в
>один поток -- то быстродействие можно увеличить лишь увеличив частоту/кеш процессора.
>Тогда как всё происходит в винде? Ведь она распределяет один поток на два и более ядер!
Я прводил тесты с этим же ImageMagick, только дистрибутив под винду соответственно.
На сервере стоит 2 двухголовых проца и когда запускаешь процесс конвертации, он распределяется на 2 ядра двух процессоров. И время конвертации сокращается в двое.
Только вот одна проблема - ImageMagick под винду не делает того, что он делает под линухом - не рисует и не наносит примитивы и текст.
И еще один вопрос. Как я могу shell заставить работать в два потока? Я понимаю, что это достаточно пространный вопрос, но всё же.
Заранее благодарен за ответ и спасибо за помощь.
>
>Тогда как всё происходит в винде? Ведь она распределяет один поток на
>два и более ядер!нет, нельзя один поток раскидать по ядрам=)
раскидываются потоки по ядрам, один поток на одно ядро, другой на другое.>Я прводил тесты с этим же ImageMagick, только дистрибутив под винду соответственно.
>
>На сервере стоит 2 двухголовых проца и когда запускаешь процесс конвертации, он
>распределяется на 2 ядра двух процессоров. И время конвертации сокращается в
>двое.Многопоточное приложение потому что. Поэтому ядро винды может разбросать потоки по процам.
А вот та же конвертация imageMagick под линух может так написана что юзает один поток в принципе. И вообще распределением на процессоры занимается kernel, в принципе есть API для принудительного распределения, но это редко используется т.к. не есть гуд для многопользовательской системы. т.к. существуют и другие приложения и их обделять нельзя.>Только вот одна проблема - ImageMagick под винду не делает того, что
>он делает под линухом - не рисует и не наносит примитивы
>и текст.
>И еще один вопрос. Как я могу shell заставить работать в два
>потока? Я понимаю, что это достаточно пространный вопрос, но всё же.Никак, если он сам того не захочет, а если захочет то сам создаст свои потоки, а kernel раскидает как ему удобней. Или речь про необходимость что-то запустить в фоне? В шелле для запуска процесса в фоне после команды ставиться символ &.
Подозреваю что есть недопонимание с понятиями процесс и поток и их соотношением с логическими и физическими процессорами. К тому же потоки бывают user space и kernel space :)
>[оверквотинг удален]
>>потока? Я понимаю, что это достаточно пространный вопрос, но всё же.
>
>Никак, если он сам того не захочет, а если захочет то сам
>создаст свои потоки, а kernel раскидает как ему удобней. Или речь
>про необходимость что-то запустить в фоне? В шелле для запуска процесса
>в фоне после команды ставиться символ &.
>
>Подозреваю что есть недопонимание с понятиями процесс и поток и их соотношением
>с логическими и физическими процессорами. К тому же потоки бывают user
>space и kernel space :)Спасибо за ответ!! Кстати, не я один ищу ответ на этот вопрос. На сайте ImageMagick есть подобные вопросы, но пока ответа я не нашёл :)
>[оверквотинг удален]
>>про необходимость что-то запустить в фоне? В шелле для запуска процесса
>>в фоне после команды ставиться символ &.
>>
>>Подозреваю что есть недопонимание с понятиями процесс и поток и их соотношением
>>с логическими и физическими процессорами. К тому же потоки бывают user
>>space и kernel space :)
>
>Спасибо за ответ!! Кстати, не я один ищу ответ на этот вопрос.
>На сайте ImageMagick есть подобные вопросы, но пока ответа я не
>нашёл :)Да, и ещё. Где мне взять этот API под линух и как мне с ним работать?
Спасибо.
>[оверквотинг удален]
>>>Подозреваю что есть недопонимание с понятиями процесс и поток и их соотношением
>>>с логическими и физическими процессорами. К тому же потоки бывают user
>>>space и kernel space :)
>>
>>Спасибо за ответ!! Кстати, не я один ищу ответ на этот вопрос.
>>На сайте ImageMagick есть подобные вопросы, но пока ответа я не
>>нашёл :)
>
>Да, и ещё. Где мне взять этот API под линух и как
>мне с ним работать?API это программный интерфейс, в данном случае набор системных вызовов ядра для управления распределением потоков между процессорами. Желаете переписать конвертер? :)
>[оверквотинг удален]
>>>
>>>Спасибо за ответ!! Кстати, не я один ищу ответ на этот вопрос.
>>>На сайте ImageMagick есть подобные вопросы, но пока ответа я не
>>>нашёл :)
>>
>>Да, и ещё. Где мне взять этот API под линух и как
>>мне с ним работать?
>
>API это программный интерфейс, в данном случае набор системных вызовов ядра для
>управления распределением потоков между процессорами. Желаете переписать конвертер? :)После кропотливой работы нашлось решение проблемы. Компиляция исходников (gcc) и производительность выросла в 2 раза. Однако это ещё не предел. Возможен вариант компиляции с помощью компилятора Intel C++, он заточен под SMP. Будем пробывать. :)
>[оверквотинг удален]
>>>Да, и ещё. Где мне взять этот API под линух и как
>>>мне с ним работать?
>>
>>API это программный интерфейс, в данном случае набор системных вызовов ядра для
>>управления распределением потоков между процессорами. Желаете переписать конвертер? :)
>
>После кропотливой работы нашлось решение проблемы. Компиляция исходников (gcc) и производительность выросла
>в 2 раза. Однако это ещё не предел. Возможен вариант компиляции
>с помощью компилятора Intel C++, он заточен под SMP. Будем пробывать.
>:)А что оптимизация ваще отключена что ли была? Раз 2х кратное улучшение?
Думается что Intel C++ еще 10% может и выдаст.. Интересно чем думали писатели конвертера если он так у них тупит :)
>[оверквотинг удален]
>>
>>После кропотливой работы нашлось решение проблемы. Компиляция исходников (gcc) и производительность выросла
>>в 2 раза. Однако это ещё не предел. Возможен вариант компиляции
>>с помощью компилятора Intel C++, он заточен под SMP. Будем пробывать.
>>:)
>
>А что оптимизация ваще отключена что ли была? Раз 2х кратное улучшение?
>
>Думается что Intel C++ еще 10% может и выдаст.. Интересно чем думали
>писатели конвертера если он так у них тупит :)Я ставил бинарники IM из пакета debian 4.X.X А когда скачал и скомпилил версию с сайта, то у меня получился такой результат. Я не знаю была ли включена оптимизация, но факт остаётся фактом.