Какой язык / платформу вы бы порекомендовали для приложений с привязкой к процессору? - PullRequest
5 голосов
/ 12 октября 2008

Я занимаюсь разработкой неинтерактивного приложения с привязкой к процессору, которое выполняет только вычисления, почти без ввода-вывода. В настоящее время он работает слишком долго, и в то время как я работаю над улучшением алгоритма, я также думаю, может ли это дать какую-либо пользу для изменения языка или платформы. В настоящее время это C ++ (без ООП, поэтому почти C) в Windows, скомпилированных с помощью компилятора Intel C ++. Может ли переключение на ASM помочь и насколько? Может ли помочь переход на Linux и GCC?

Ответы [ 22 ]

0 голосов
/ 11 декабря 2008

Если вы чувствуете, что оптимизировали свой код до такой степени, что улучшения не происходит, увеличьте ваш ЦП. Это можно сделать на разных платформах. Одна из них, с которой я развиваюсь, это Аппистия. Несколько ссылок:

http://www.appistry.com/resource-library/index.html

и вы можете скачать продукт бесплатно здесь:

http://www.appistry.com/developers/

Я работаю в Appistry, и мы выполнили множество инсталляций для задач, которые были связаны с процессором путем распределения работы на 10 или 100 машин.

Надеюсь, это поможет, -Brett

0 голосов
/ 05 ноября 2008

Сначала выведите лидерство. Затем, если это так быстро, как только возможно, не переходя к ASM, пусть будет так. Но если подумать, что вам нужно идти в ASM, то вы знаете, что делает его медленным, и я готов поспорить, что вы угадываете пончик.

0 голосов
/ 13 октября 2008

2 очевидных ответа на «привязку к процессору»: 1. Используйте больше процессоров (ядра) 2. Используйте что-нибудь еще.

Использование 2 потоков вместо 1 сократит время, затрачиваемое на 50%. Для сравнения, C ++ и ASM редко дают 5% (а для начинающих программистов ASM это часто -5%!). Некоторые проблемы хорошо масштабируются и могут выиграть от 8 или 16 ядер. Такое оборудование все еще довольно распространенное, поэтому посмотрите, не попадают ли ваши проблемы в эту категорию.

Другое решение - использовать более специализированное оборудование для выполнения этой задачи. Это может быть векторная единица вашего процессора - учитывая Windows = x86 / x64, это будет разновидностью SSE. Еще один вид векторного оборудования - современный графический процессор. Графический процессор также имеет собственную шину памяти, которая довольно быстрая.

0 голосов
/ 12 октября 2008

Для современных процессоров изучение ASM займет у вас много времени. Кроме того, при наличии всех различных версий SSE ваш код будет сильно зависеть от процессора.

Я довольно много работаю с процессором и обнаружил, что разница между компилятором Intel C ++ и g ++ обычно не так велика (максимум 15% или около того), и между Mac OS нет ощутимой разницы X, Windows и Linux.

Вам нужно будет оптимизировать свой код и улучшить свой алгоритм вручную. Боюсь, что нет "волшебной волшебной пыли", которая может сделать существующий код намного быстрее.

Если вы этого еще не сделали и заботитесь о производительности, вы ДОЛЖНЫ запустить свой код через хороший профилировщик (лично мне нравится kcachegrind & valgrind в Linux или Shark в Mac OS X. Я не знаю, что такое боюсь хорошо для windows).

Исходя из моего прошлого опыта, очень велика вероятность того, что какой-то метод отнимает 95% вашего процессорного времени, а простое изменение или добавление кэширования значительно улучшит вашу производительность. Аналогичным образом, если какой-либо метод занимает только 1% процессорного времени, никакая оптимизация не принесет вам ничего.

0 голосов
/ 12 октября 2008

В качестве альтернативного подхода вы можете посмотреть Распределенные вычисления , которые, похоже, могут удовлетворить ваши потребности.

0 голосов
/ 12 октября 2008

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

Например, переход с LINPACK на LAPACK дал нам 10-кратное увеличение скорости факторизации / решения LU с хорошей библиотекой BLAS.

0 голосов
/ 14 февраля 2012

Трудно создать код ASM, который работает быстрее, чем простой код C или C ++. В большинстве случаев, если вы выполняете эту работу действительно хорошо, вы, вероятно, получаете не более нескольких процентов, и ускорение на 10% считается большим успехом, но в большинстве случаев это просто невозможно.

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

0 голосов
/ 30 января 2009

Linux

Переключение на Linux может помочь, если вы сократите его до тех частей, которые вам действительно нужны.

0 голосов
/ 12 октября 2008

Если вы придерживаетесь C ++ в компиляторе Intel, взгляните на встроенные функции компилятора (полная ссылка здесь ). Я знаю, что VC ++ обладает аналогичной функциональностью , и я уверен, что вы можете сделать то же самое с gcc. Это позволит вам в полной мере использовать преимущества параллелизма, встроенного в ваш процессор. Вы можете использовать инструкции MMX, SSE и SSE2 для повышения производительности. Как уже говорили другие, вы, вероятно, лучше всего сначала посмотрите на алгоритм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...