2015-12-06 10 views
4

У меня есть приложение .NET, где тип half precision отлично подходит. Для обработки этого типа данных существует "old" C# project. Однако процессоры Intel теперь предлагают аппаратное ускорение от half to single conversion. Кто-нибудь знает, как использовать такое аппаратное ускорение в .NET?Как конвертировать Half-Single в .NET с аппаратным ускорением?

+0

Я знаю, что они добавили поддержку SIMD в пакет [System.Numerics.Vectors] (https://www.nuget.org/packages/System.Numerics.Vectors), но я не знаю, могут ли быть выполнены другие ускорения изнутри C#. Может быть, через C++/CLI? –

+2

Это требует, чтобы джиттер генерировал инструкции. Поскольку в CLI такого типа нет, для этих инструкций нет никакой поддержки. Intrinsics, такие как _mm256_cvtph_ps(), могут использоваться только в программе на C или C++, вы можете получить это из проекта C++/CLI. Поддерживается не менее VS2013. –

ответ

0

Как насчет этой связи: http://sourceforge.net/p/csharp-half/code/HEAD/tree/?

Предоставляет NET API для половинной точности, а также некоторые модульные тесты, содержащие некоторые примеры.

+0

Я уже связываю эту библиотеку в своем посте ... К сожалению, она не обеспечивает никакого аппаратного ускорения. –

+0

Я вижу. Тогда, вероятно, ответ @syazdani соответствует законопроекту. –

3

Для использования встроенной поддержки CPU для float16 в C# вам придется использовать неуправляемую сборку (например, C/C++ dll) для обработки самого типа данных и/или алгоритмов, которые зависят на тип float16. Вызов неуправляемого кода достаточно просто, используя PInvoke, но если у вас нет компилятора Intel, вам придется закодировать части неуправляемой библиотеки в ассемблере, потому что MSVC напрямую не поддерживает прагмы, необходимые для компилятора для генерации x86-64 необходим для типа float16.

Предполагая, что вы все это сделаете, вы все равно можете разочароваться в результате, так как подготовка структур данных и вызов неуправляемого кода могут иметь значительные накладные расходы процессора, которые могут противостоять производительности, которую вы получите от float16.

 Смежные вопросы

  • Нет связанных вопросов^_^