|
|
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
Есть программа на C++ которая должна выполняться на определенном железе. Соответственно оптимизируем до тех пор пока не добьемся желаемого. Но по мониторингу загрузки CPU/RAM/HDD. CPU 20%, RAM свободно 50%, HDD(2.5'' 500 GB rpm 7200) 20 МБсек (очередь меньше 1). Во что здесь мы в принципе можем упираться: 1. В скорость RAM? 2. В неэффективную работу кэша CPU? (загрузка CPU показывает только загрузку ядер или так же и активность по синхронизации кэшей всех уровней L1/2/3?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2011, 04:13 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
Вполне возможно, что упираешься в HDD. Я бы сначала это проверил, поставив рейд или SSD для теста. А на счет CPU и памяти, то для начала надо узнать их характеристики, а так же хоть что-то о самой проге, чтобы иметь представление о том, что и в каких масштабах она выполняет. Иначе никаких предположений с этой стороны монитора никто не сделает. Единственный адекватный ответ - проблема может быть в чем угодно, если проблема вообще есть. Ну и очевидно лишь одно - раз проц не грузится, значит не хватает пропускной способности чего-то - шин, памяти, винтов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2011, 12:11 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPU, наскоько я понимаю - ни то ни другое. диспетчер задач показывает только время проведенное процессором в процессе. если загрузка 20% - значит 80% времени процессор провел вне вашего кода. скорее всего жесткий диск, если поверить вышеизложенному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2011, 13:22 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
Нагрузку смотрю через perfomance monitor. Железо: Core i5 750 (4 Cores) по монитору нагрузки на всех ядрах она равномерная RAM 16 GB DDR3 (PC12800, 1600МГц, CL9) dual channel по монитору занято 8 GB HDD WD 500 GB rpm 7200, по монитору очередь меньше 1 Сначала тоже думал что HDD и 20 МБсек похоже на уход в рандомные операции, но перенос на RAM диск ускорения почти не дал. Т.е. вопрос в следующем, в какие из шин может упираться при не полной загрузке CPU и как определить эту конкретную шину (кэш CPU, QPI, RAM)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2011, 15:32 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPU, а почему именно шинам столько внимания? Шины будут влиять на результат при 100% загрузке процессоров. Что программа делает? Что там с семафорами, мьютексами, таймерами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2011, 16:04 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
мое мнение - раз идет раскидывание по ядрам - то скорее всего затычки на синхронизации потоков. это все при условии что в hdd вы уверены ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2011, 17:41 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
ИзопропилRAM / кэш CPU, а почему именно шинам столько внимания? Шины будут влиять на результат при 100% загрузке процессоров. Что программа делает? Что там с семафорами, мьютексами, таймерами? А если выполнять тупо копирование из памяти в память, разве не упрется в шины при не 100% загрузке процессора? Выполняет потоковую обработку информации, подсчитывает статистическую информацию. 4 потока выполняются максимально независимо. В основном общие данные только читаются, а результирующие данные раз в 10 меньше. По всей видимости CPU обрабатывает данные быстрее чем они успевают попасть из RAM в L1/2/3. pavel_nvмое мнение - раз идет раскидывание по ядрам - то скорее всего затычки на синхронизации потоков. это все при условии что в hdd вы уверены Т.е. тупо в айдле ядра ждут друг друга? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2011, 18:41 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPU, % загрузки считает планировщик, ему фиолетово, какие команды и скакой скоростью исполняет процессор. Результирующие данные - куда поступают? Часом не визуализируются OpenGl/Direct3D? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2011, 18:48 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
ИзопропилRAM / кэш CPU, % загрузки считает планировщик, ему фиолетово, какие команды и скакой скоростью исполняет процессор. Результирующие данные - куда поступают? Часом не визуализируются OpenGl/Direct3D? Т.е. при нехватки пропускной способности шин перфоманс монитор всегда покажет 100% загрузку CPU? Результаты сохраняются на диск чанками по 1 МБ чтобы не выходить в рандомные операции. На экран никакая графика не отображается. Модератор: Тема перенесена из форума "C++". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2011, 21:09 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPU4 потока выполняются максимально независимо.Для 4 ядер потоков должно быть больше. Сейчас же получается следующее (цифры с потолка) - один поток на ядро, 60 мс читается порция входных данных, 20 мс обсчет на CPU, 20 мс сохранение результатов. Итого 20% загрузки ядра. Если пропорции времени ввода/вывода ко времени расчета изменить не удастся, то нужно увеличивать количество потоков примерно в 5 раз. "Примерно" - потому что еще нужно следить как поведет себя дисковая подсистема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2011, 12:14 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPU4 потока выполняются максимально независимо. из 11049989 получается что загружено 1 (одно) ядро и очередь из 1 запроса на HDD, т.е тупо выполняется один поток, КМК ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2011, 15:46 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
miksoftRAM / кэш CPU4 потока выполняются максимально независимо.Для 4 ядер потоков должно быть больше. Сейчас же получается следующее (цифры с потолка) - один поток на ядро, 60 мс читается порция входных данных, 20 мс обсчет на CPU, 20 мс сохранение результатов. Итого 20% загрузки ядра. Если пропорции времени ввода/вывода ко времени расчета изменить не удастся, то нужно увеличивать количество потоков примерно в 5 раз. "Примерно" - потому что еще нужно следить как поведет себя дисковая подсистема. А не получится так что из-за увеличения кол-ва потоков добавится ещё время переключения между потоками и дополнительные расходы на синхронизацию кэшей, ведь каждый поток работает со своими данными и потребует полного обновления кэша L1/L2. Т.е. увеличив в 5 раз кол-во потоков получим на один поток: 12 мс чтение данных, 4 мс обсчет CPU, 4 мс сохранение результатов, 4 мс переключение между потоками и синхронизация кэшей. Итого умножая на кол-во потоков получим все тоже самое даже больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2011, 17:04 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
А ты не в 5 раз увеличивай. А для начала хотя бы по 2 потока на ядро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2011, 17:10 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPUА не получится так что из-за увеличения кол-ва потоков добавится ещё время переключения между потоками и дополнительные расходы на синхронизацию кэшей, ведь каждый поток работает со своими данными и потребует полного обновления кэша L1/L2. Решай проблемы по мере возникновения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2011, 17:41 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPUА не получится так что из-за увеличения кол-ва потоков добавится ещё время переключения между потоками и дополнительные расходы на синхронизацию кэшей, ведь каждый поток работает со своими данными и потребует полного обновления кэша L1/L2. Т.е. увеличив в 5 раз кол-во потоков получим на один поток: 12 мс чтение данных, 4 мс обсчет CPU, 4 мс сохранение результатов, 4 мс переключение между потоками и синхронизация кэшей. Итого умножая на кол-во потоков получим все тоже самое даже больше.Не получится. Переключение потоков происходит значительно быстрее, чем любая операция физического ввода/вывода на дисках. Да и все равно оно происходит, когда программа что-то читает или пишет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2011, 17:57 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
Я конечно попробую, но чисто даже теоретически не вижу в чем может быть выигрышь за счет увеличения количества потоков. Если нехватает пропускной способности одной из шин, то с увеличением кол-во потоков скорость шин не увеличится. Или в чем тут профит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2011, 18:15 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
Да, еще попробуй не только 8-16 потоков, но и 1-2. Чтобы уж наиболее полно картину зависимости увидеть. Но все-таки, я не понимаю один момент. Данные, которые ты читаешь с диска помещаются в памяти (ты их загонял в RAM-диск), так? Следовательно, во время работы без RAM-диска, но на этой же памяти они все-равно должны бы в системный кеш все влезть и чтение с диска прекратить. Откуда 20 МБ/с чтение с диска постоянно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2011, 18:47 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPUЕсть программа на C++ которая должна выполняться на определенном железе. Соответственно оптимизируем до тех пор пока не добьемся желаемого. Но по мониторингу загрузки CPU/RAM/HDD. CPU 20%, RAM свободно 50%, HDD(2.5'' 500 GB rpm 7200) 20 МБсек (очередь меньше 1). Во что здесь мы в принципе можем упираться: 1. В скорость RAM? 2. В неэффективную работу кэша CPU? (загрузка CPU показывает только загрузку ядер или так же и активность по синхронизации кэшей всех уровней L1/2/3?) это все проверялось на одном ПК? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2011, 04:08 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
С0ВЕСТЬ, да, пока на одном. Уменьшил число потоков до 2 скорость упала. Загрузка CPU 10-15%. Увеличил число потоков до 8 скорость почти не изменилась. Все тоже самое. Так кто-нибудь может сказать как посмотреть загрузку шин и выяснить являются ли они узким местом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2011, 16:37 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPUС0ВЕСТЬ, да, пока на одном. Уменьшил число потоков до 2 скорость упала. Загрузка CPU 10-15%. Увеличил число потоков до 8 скорость почти не изменилась. Все тоже самое.А до 20 ? RAM / кэш CPUТак кто-нибудь может сказать как посмотреть загрузку шин и выяснить являются ли они узким местом?Забудьте вы пока про эти шины (процессорные) и, попутно, про кэш CPU. У вас значительно более грубая проблема. Имхо, либо потоки где-то ждут друг друга (синхронизация потоков), либо устройства - CPU/HDD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2011, 16:58 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPUС0ВЕСТЬ, да, пока на одном. Уменьшил число потоков до 2 скорость упала. Загрузка CPU 10-15%. Увеличил число потоков до 8 скорость почти не изменилась. Все тоже самое. Так кто-нибудь может сказать как посмотреть загрузку шин и выяснить являются ли они узким местом? Попобовать на других машинах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2011, 17:12 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPU, что будет при отключении записи результатов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2011, 18:14 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
RAM / кэш CPUВыполняет потоковую обработку информации, подсчитывает статистическую информацию. 4 потока выполняются максимально независимо. В основном общие данные только читаются, а результирующие данные раз в 10 меньше. А если не 8 а 80 потоков сделать? А чанки данных для обработки какого размера, 16кб, 1Мб, 100Мб? может разбить на более мелкие или наоборот, укрупнить, может маленький объем потоком обрабатывается слишком быстро и он тупо ждет диск в ожидании следующего чанка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2011, 20:34 |
|
||
|
Упираемся в скорость RAM или неэффективную работу кэша CPU?
|
|||
|---|---|---|---|
|
#18+
Как мне кажетсяRAM / кэш CPUВыполняет потоковую обработку информации, подсчитывает статистическую информацию. 4 потока выполняются максимально независимо. В основном общие данные только читаются, а результирующие данные раз в 10 меньше. А если не 8 а 80 потоков сделать? А чанки данных для обработки какого размера, 16кб, 1Мб, 100Мб? может разбить на более мелкие или наоборот, укрупнить, может маленький объем потоком обрабатывается слишком быстро и он тупо ждет диск в ожидании следующего чанка? Ну если ты читал выше, то ТС якобы провел успешный тест с RAM-диском вместо HDD. Тогда проблем со чтением быть не должно. Или же можно усомниться в тесте. А так надо ТСу посоветовать профилированием заняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2011, 20:39 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37374372&tid=1342797]: |
0ms |
get settings: |
10ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
166ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 506ms |

| 0 / 0 |
