Как быстро VB .NET по сравнению с нативным кодом для арифметики?

StackOverflow https://stackoverflow.com/questions/2379590

Вопрос

Мне нужно написать программное обеспечение, которое сделает много математики. В основном это будет матричное умножение с целыми числами, чтобы вычислить 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 вы собираетесь начать. Я сделал это с визуализации утилитой, которую я развиваю, это было намного проще, чем ожидалось, и она сливочная предыдущая версия. Плюс, если вы используете несколько процессы Благодаря правильно обработке проблемной проблем вы избегаете легкого для бремени программирования в программном порядке. Или убедитесь, что ваши коллеги, которые ваши куллы скобки находятся в нужном месте. Мир.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top