Перенос кода с vb.net на dll C ++ обеспечивает значительное повышение производительности? - PullRequest
0 голосов
/ 08 ноября 2018

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

Я опытный в vb.net, но я новичок в c ++. У меня есть подпрограмма в vb.net, которая просто делает много математики. Есть некоторая тригонометрия, квадратные корни и т. Д. Ничего особенного , но это около 100 уравнений, и их нужно запускать тысячи раз.

Вот некоторый псевдокод того, что я делаю:

Sub mathsub()
For i = 0 to arraylength
A = somenum(i) * othernum(i)
...
Next
End sub

Так что я делаю всю математику внутри цикла for много тысяч раз. Каждый раз используется другой элемент группы массивов (somenum, othernum и т. Д.), Все эти массивы имеют одинаковую длину.

Ни одна строка кода не занимает сколько-нибудь значительного времени (при профилировании каждая строка занимает незначительное время), но в целом программа занимает больше времени, чем хотелось бы. Можно ли ожидать значительного увеличения скорости, переписав этот маршрут в c ++ и ссылаясь на него из vb.net?

Редактировать # 1 - ответы на вопросы в комментариях

Код занимает незначительное количество времени на элемент массива , но - это около 20 000 элементов, и мне нужно сделать это около 10 000 раз (так 200 миллионов раз - без шуток). В целом, по моим оценкам, это займет около 18 часов, исходя из того, сколько времени потребуется на долю работы. Всю программу также нужно будет запускать несколько раз, хотя каждый новый запуск на 100% отделен от несвязанного. Я попытался выполнить многопоточность кода, у меня есть процессор с ядром Ryzen 1800x8 (16 потоков) - я попытался разбить задачу на ровно 15 потоков (оставляя 1 поток для служебных и других операций) и используя цикл параллел. For и оба не предлагайте достаточно увеличения еще. Я не знаю, что такое AVX, но я начну изучать его, я никогда не писал ни одной строки на C ++, но сама математика - это всего лишь простые уравнения, и я с удовольствием проведу несколько дней / недель / месяцы обучения реализации, если это серьезно собирается изменить ситуацию!

1 Ответ

0 голосов
/ 08 ноября 2018

Оцените это . Невозможно узнать об этом без бенчмаркинга, но ответ, скорее всего, будет "да" из-за профиля производительности C ++ по сравнению с управляемым языком, таким как VB.NET, но с JIT-оптимизацией, переходами от управляемого к нативному, Порядок доступа к массиву / локальность данных, а также общая методика кодирования могут оказать здесь влияние.

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