2009-08-03 2 views
7

Интересная статья из Тринити-колледжа Дублина:
AES Encryption Implementation and Analysis on Commodity Graphics Processing UnitsМогу ли я использовать GPU для шифрования AES с .NET? Если да, то как?

Их метод использует OpenGL завербовать GPU делать цифровые преобразования, необходимые AES.

Насколько сложно было бы выявить эту возможность - выполнение шифрования потока - через управляемую библиотеку .NET?

Как с этим начать? Советы? Примеры?

EDIT: У кого-нибудь есть опыт, связанный с использованием CUDA или Accelerator?

+0

Intriguing ... :) –

ответ

4

Вы можете использовать библиотеку Microsoft Accelerator. Это дает вам доступ к GPU через .NET.

После изучения работы требуется больше, это довольно нетривиальная вещь (если вам не нравится переписывать алгоритмы AES). Однако это возможно.

Там могут быть другие C# API, но я столкнулся с Bouncy Castle API. Что вам нужно сделать, так это использовать API ускорителей Microsoft и использовать его в любом месте, где выполняется математическая операция в исходном коде алгоритма AES.

+0

звучит как хорошая возможность. Есть примеры? – Cheeso

3

Я предлагаю создать управляемую оболочку вокруг реализации CUDA/(C++/cli) ИЛИ используя cuda.net, чтобы сделать все: , но само ядро ​​в C#. На самом деле невозможно реализовать реальную реализацию ядра на высокоуровневом языке, а CUDA вам нужно использовать c, с opengl/directx вам нужно использовать шейдеры. Для начала или взгляните на cuda.net или загрузите CUDA SDK и примеры, чтобы получить введение в программирование gpgpu.

+0

У нас уже есть обертка CUDA.NET: http://www.hoopoe-cloud.com/Solutions/CUDA.NET/Default.aspx –

+0

Я не говорил, чтобы использовать обертку вокруг CUDA, но оболочка вокруг CUDA _implementation_. Разница имеет решающее значение, так как если вы используете cuda.net, вам придется делать много вещей, которые намного проще в c/C++. У меня также было много проблем с cuda.net, некоторые из образцов даже не работают. Кроме того, вам нужно будет сделать много управления памятью/буфером в C#, что обычно проще в c/C++. Вам также придется выбирать между управляемой памятью (без памяти с пакетиками, что значительно снижает производительность передачи данных) или неуправляемой памятью (гораздо больше накладных расходов, если вы хотите работать в C#). –

2

Другой вариант: Brahma (веб-сайт, кажется, внизу).

Веб-сайт Цитата:

Что такое Брахма?

Brahma - это библиотека с открытым исходным кодом, написанная для платформы .NET 3.5 (в C# 3.0), для обеспечения высокоуровневого доступа к параллельным потоковым вычислениям на различных процессорах. Обратите внимание на то, что в то время как у Brahma есть поставщик GPU (и его фокус GPGPU), он может быть адаптирован для работы на любом процессоре.

Что я могу сделать с Брахмой?

Brahma 2.0 использует новый синтаксис LINQ C# 3.0 для указания потокового преобразования данных. Используя Brahma, вы можете смешивать операторы, которые запускаются на графическом процессоре, и операторы, которые запускаются на CPU внутри одного метода! При абсолютно полном отсутствии кода склеивания сложный многопроцессорный вычислительный процессор с промежуточными операциями ЦП может выполняться всего несколькими строками кода. Весь необходимый клей и шейдерный код автоматически генерируется Брахмой. Все, что вам нужно сделать, это написать высокоуровневый код .NET.

Я не использовал его, но я недавно слушал об этом podcast об этом на скалах .NET. Это звучит как хорошая библиотека для использования, если вы не хотите изучать язык шейдеров графического процессора.

Адрес sourceforge link.

0

Независимо от того, что вы используете для интеграции C# с графическим процессором, вы должны использовать CUDA-реализацию AES. Они самые быстрые. Самая быстрая реализация выглядит так, как будто она исходит от тех же парней, с которыми вы связались - Trinity group. Посмотрите на практическую симметричную ключевую криптографию на современной графической аппаратной бумаге.

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