C #, Visual Basic и .NET CLR — отличные среды разработки для пользовательских интерфейсов, бизнес-приложений и т. Д.
Тем не менее, я писал много кода с таймингами выполнения O(n^3): n > 1000
и в нескольких местах выше этого. По сути, эти циклы читают из одного большого массива, выполняют небольшую математику и выполняют пять или шесть тестов и записывают результат во второй массив идентичного размера.
Большая часть кода — это код, перенесенный из программ на Intel Fortran, чтобы перенести их в 64-битный мир. Я заметил, что без какой-либо автоматической векторизации этого кода время выполнения намного медленнее. .NET не поддерживает использование операций SIMD на всех процессорах Intel, проданных сегодня.
Поскольку функции уже написаны в строгом алгоритме, который может переносить опытный программист, я подумал, что попросить этого программиста перенести код в библиотеку C ++ CLR может быть подходом.
Конечно, без проблем. Проект библиотеки классов C ++ / CLI дает вам возможность написать управляемую оболочку, реф класс, который может напрямую вызывать нативный код C ++. Такой класс может непосредственно использоваться любым управляемым кодом.
VS2012 или выше требуется для автоматической векторизации и распараллеливания в собственном коде C ++. Разработка уровня взаимодействия таким образом, чтобы минимизировать количество переходов от управляемого к неуправляемому коду и обратно, может быть важным. Другими словами, не копируйте ни одного двойной стоимость за раз.
Других решений пока нет …