Как быстро VB .NET по сравнению с нативным кодом для арифметики?
-
24-09-2019 - |
Вопрос
Мне нужно написать программное обеспечение, которое сделает много математики. В основном это будет матричное умножение с целыми числами, чтобы вычислить DCT. Насколько быстрее я должен ожидать, что код запущен на родном C по сравнению с VB .NET? Фактор 2, фактор 10, фактор 1000 ...? Кто-то попробовал и собрал статистику по этому поводу?
Решение
Код .NET скомпилирован в нативный код с помощью Compiler JIT, поэтому вы получаете нативный код в обоих случаях.
Разница состоит в том, что C-код имеет несколько меньше над головой вокруг расчетов, поэтому вы, возможно, должны ожидать разность исполнения фактора 2.
Другие советы
.NET CODE - jit-compated для нативного кода перед выполнением, поэтому он не должен быть медленнее, чем нативный код в целом. Я ожидал, что фактор <10.
Более того, адаптивные методы оптимизации профиля код как работает, набирает больше информации, чем типичный статический компилятор. Итак, JIT может принимать более информированные решения для дальнейших оптимизаций
VB - 93,7% так же быстро, как и C. Если Вы выбираете правильный сценарий.
На самом деле, если ваш «родной C» включает в себя регулярные звонки в MALLOC () и Free (), любой вид набора собранного языка, такой как VB.NET, собирается буквально проходить круги вокруг него. GC может быть 10 раза быстрее, чем mallocs во внутренних циклах.
Если вы сломаетесь и используете C, попробуйте повторно использовать структуры, которые вы объявили только один раз вместо того, чтобы сделать новые, чтобы избежать этой проблемы. Это может преимущена даже в VB, если ваше решение поддается ему. Однако будет сложнее программу и GC очень быстро.
Что касается границ / проверки переполнения, если бы скорость важно, и тестирование показало, что они не происходят, и вы не рискуете, и вы не рискуете или миллионами от ошибки или претендуете, они пустые время. Но если вы не можете избавиться от них, ваше время, скорее всего, все еще будет более ценным на языке, с которым вы можете программировать быстрее.
Если вы ожидаете серьезных размеров и использования, он платит, чтобы разделить задачу с помощью программы управления и хранить выделенные «определения задач» в общий каталог с файлом на решатель задач или базы данных. Затем вы можете запустить решателя на процессор (2 на CPU) или сетевые компьютеры. Будьте утомлены из очереди. Структуры - это сложно атомировать «маркин-и-полученные данные, если не взяты». Вы знаете, сколько задач Solvers вы собираетесь начать. Я сделал это с визуализации утилитой, которую я развиваю, это было намного проще, чем ожидалось, и она сливочная предыдущая версия. Плюс, если вы используете несколько процессы Благодаря правильно обработке проблемной проблем вы избегаете легкого для бремени программирования в программном порядке. Или убедитесь, что ваши коллеги, которые ваши куллы скобки находятся в нужном месте. Мир.