2015-01-14 4 views
-2

Мне было интересно, может ли простая программа без потоков работать быстрее на некоторых компьютерах с множеством ядер? или на кластере Linux-серверов? Недавно я запустил свой алгоритм, который должен обрабатывать миллиарды IP-пакетов на моем ПК (ядро i7 с 16 ГБ оперативной памяти), и для завершения обработки потребовалось 1881 минут. Затем я подумал, что неплохо запустить алгоритм на кластерах Linux-серверов на каждом узле с 10 процессорами и 48 ГБ оперативной памяти, чтобы быстрее получить результаты. Однако между этими двумя экспериментами нет большой разницы. Может кто-то комментирует то, что мне не хватает?Как запустить java-программу быстрее?

+2

Является ли ваша программа связанной с процессором или IO-привязана? вы могли бы запустить верхнюю команду, чтобы узнать, сколько ядер вы используете? – qqibrow

+3

Ответ: «это зависит», от вашего кода, от входных данных и от того, как вы распространяете свою задачу, и некоторых других вещей. Поскольку ни одна из этих деталей не дана ... ну, это зависит – reto

+0

Возможно, вы ищете Hadoop? – Tanay

ответ

2

Если ваш алгоритм фактически не использует эти множественные экземпляры и дополнительную память, не должно быть большой разницы. Параллельное программирование - это своеобразное искусство, и «регулярная» однопоточная программа не просто превращается в параллель сама по себе.

0

Если у вас есть нить исполнения большего количества ядер, CPU или машины не помогут. Только более быстрый процессор будет ускорять работу, и только в том случае, если ваш процесс связан с ЦП, а не с привязкой к IO.

Прежде всего, вы должны проверить, где потрачено время обработки, в CPU или ожидает ввода-вывода. Если у вас есть значительное количество использования ЦП, вы можете попытаться распараллелить свою работу, то есть разделить данные на куски и иметь разные потоки соответственно. машины обрабатывают их параллельно.

Смежные вопросы