Доступ к математическому сопроцессору из C # - PullRequest
0 голосов
/ 18 марта 2011

Как я могу получить доступ к математическому сопроцессору из кода C #? Я хотел бы сделать некоторые вычисления на целые числа как можно быстрее. Я знаю, что под компиляторами C ++ можно использовать код ассемблера внутри него, но как насчет .Net?

Ответы [ 4 ]

8 голосов
/ 18 марта 2011

JIT-компилятор знает о математическом сопроцессоре и будет его использовать.Что вы действительно хотите, так это использовать SIMD-движок, а не математический сопроцессор.Это было частью обещания JIT-компиляции, что среда выполнения может выбирать самое быстрое аппаратное ускорение, доступное на каждом компьютере, но я не думаю, что .NET на самом деле делает это, по крайней мере, в v4.Вы используете термин «математический сопроцессор» для обозначения чего-то другого, кроме x87 FPU?Есть несколько плат FPGA, продаваемых как ускорители / сопроцессоры.Если это то, что вы имеете в виду, вам нужно обратиться к руководству по программированию, которое поставляется с конкретным продуктом.Специальных инструкций ЦП для доступа к ним нет, встроенный ассемблер в этом случае не поможет.

Например, графический процессор на больших наборах данных работает даже быстрее, чем SIMD-процессор ЦП, и вы можетеэто из .NET с использованием DirectX Compute Shaders (или p / вызывает OpenCL), ассемблер не требуется.

4 голосов
/ 18 марта 2011

Нет, вы не можете напрямую использовать встроенный ассемблер в управляемом коде C #.

Лучше всего убедиться, что ваш общий подход / алгоритм чист и эффективен, а математические операции чисты и эффективны, а затем полагаться на компилятор для эффективного использования имеющегося сопроцессора.

4 голосов
/ 18 марта 2011

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

1 голос
/ 18 марта 2011

Это изначально не поддерживается ни C # как языком, ни .NET как фреймворком.

Если вам нужна такая скорость или мастерство, используйте что-то совсем другое.

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