Тестирование производительности параллельных программ на одноядерном компьютере - PullRequest
4 голосов
/ 22 сентября 2009

Я хотел бы начать играть с параллелизмом в программах, которые я пишу (в основном для развлечения), но у меня нет многоядерной системы, и я не могу позволить себе ее в ближайшее время. Я запускаю Linux. Есть ли способ, например, на виртуальной машине, сравнить производительность многопоточной реализации программы с однопоточной версией, фактически не запуская ее на оборудовании с несколькими процессорами или ядрами?

То есть я хотел бы иметь возможность реализовывать параллельные алгоритмы и сказать, что да, эта многопоточная реализация эффективнее однопоточной.

Спасибо

Ответы [ 4 ]

4 голосов
/ 22 сентября 2009

Вы не можете надежно тестировать многопоточные программы на одноядерном компьютере. Гоночные условия будут отображаться совсем по-другому или даже полностью скрываться на одноядерном компьютере. Производительность будет снижаться и т. Д.

Если вы хотите НАУЧИТЬСЯ, как программировать несколько потоков, вы можете сделать это на компьютере с одним ядром для первых шагов (т.е. как работает API и т. Д.). Но вам придется тестировать на многоядерном компьютере, и вполне вероятно, что вы увидите ошибки на многоядерном компьютере, которых вы не видите на одноядерном компьютере.

Виртуальные машины по моему опыту не помогают с этим. Они вводят новые ошибки, которых раньше не было, но они НЕ МОГУТ имитировать реальный параллелизм с несколькими ядрами.

2 голосов
/ 22 сентября 2009

В зависимости от того, что вы тестируете, вы можете использовать узел Amazon EC2.Это не бесплатно, но дешевле, чем покупать компьютер.

0 голосов
/ 22 сентября 2009

Чтобы наблюдать эффекты, отличные от потенциально улучшенного местоположения, вам понадобится аппаратное обеспечение или симулятор, который фактически моделирует взаимодействие / взаимодействие, которое происходит, когда программа работает параллельно. Там нет магии, чтобы иметь.

0 голосов
/ 22 сентября 2009

Если у вас только одно ядро ​​/ процессор и ваш алгоритм интенсивно использует процессор, вы, вероятно, увидите, что многопоточная программа на самом деле медленнее однопоточной. Но если у вас есть программа, использующая ввод / вывод в одном потоке, например, процессор в другом, вы увидите, что многопоточная программа работает быстрее.

...