Вот моя проблема: у нас есть математическая библиотека, написанная на C ++, которая интенсивно использует SSE. Нам нужно использовать ту же самую математическую библиотеку в нашем управляемом слое наших инструментов (которые написаны на C #).
Проблема в том, что классы математической библиотеки должны быть выровнены по 16 байтов (чтобы SSE работал). Однако при компиляции управляемого кода я получаю много ошибок, поскольку «__declspec (align (X))» не поддерживается.
Есть идеи, возможно ли это как-нибудь? Я не смог найти никакой полезной информации.
Некоторая дополнительная информация:
Математическая библиотека, написанная на C ++, использует SSE для максимальной производительности. Однако нашему инструменту не требуется максимальная производительность, мы можем даже снизить производительность по сравнению с общим кодом C #. Это больше о возможности фактически выполнить весь наш код (это огромная база кода), без необходимости людей конвертировать туда и обратно между типами данных.
Так что на самом деле речь идет только об удобстве использования, а не о производительности.
Я попробовал это: я поместил все наши математические функции в cpp вместо того, чтобы использовать их как встроенные функции. Теперь они экспортируются из собственной библиотеки DLL. Тем не менее, вектор-класс, конечно, все еще имеет закрытый член __m128 для своих данных.
Как только я поместил такую переменную в управляемый код, компилятор сообщает мне, что мой управляемый код теперь является нативным кодом.
Значит ли это, что я не должен иметь такой тип в своем определении класса и полностью скрывать его за интерфейсом DLL? Спасибо.