2009-08-03 7 views
7

재미있는 용지 :
AES Encryption Implementation and Analysis on Commodity Graphics Processing UnitsGPU를 사용하여 .NET에서 AES 암호화를 수행 할 수 있습니까? 그렇다면 어떻게? 더블린의 트리니티 대학에서

그들의 기술은 AES에 필요한 숫자 변환을 수행 할 GPU를 입대하기 위해 OpenGL을 사용합니다.

관리되는 .NET 라이브러리를 통해 스트림 암호화를 수행하는이 기능을 노출하는 것이 얼마나 어려울까요?

어떻게 시작합니까? 힌트? 예?

EDIT : 누구나 CUDA 또는 Accelerator를 사용해 볼 경험이 있습니까?

+0

흥미로운 ... :) –

답변

4

Microsoft의 Accelerator 라이브러리를 사용할 수 있습니다. .NET을 통해 GPU에 액세스 할 수 있습니다.

더 많은 작업이 필요하다면, AES 알고리즘을 다시 작성하지 않는 한,이 작업을 수행하는 것이 쉽지 않습니다. 그러나 가능합니다.

거기에 다른 C# API가있을 수 있지만 건너 뛴 것은 Bouncy Castle API입니다. Microsoft의 Accelerator API를 사용하여 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++에서는 더 쉽습니다. 또한 관리 메모리 (pagelocked 메모리가 없으므로 메모리 전송 성능이 훨씬 낮음) 또는 관리되지 않는 메모리 (C#으로 작업하려면 훨씬 많은 오버 헤드) 중에서 선택해야합니다. –

2

또 다른 옵션은 Brahma입니다 (웹 사이트는 atm 상태입니다).

웹 사이트 인용구 : 브라흐마 무엇

입니까?

브라마는 .NET 3.5 프레임 워크 (C# 3.0) 용으로 작성된 오픈 소스 라이브러리로서 다양한 프로세서에서 병렬 스트리밍 계산에 대한 높은 수준의 액세스를 제공합니다. 현재 브라마에는 GPU 제공 업체가 있으며 (그 중점은 GPGPU 임), 모든 종류의 프로세서에서 실행되도록 조정할 수 있습니다.

브라마 (Brahma)로 무엇을 할 수 있습니까?

Brahma 2.0은 C# 3.0의 새로운 LINQ 구문을 사용하여 데이터의 스트리밍 변환을 지정합니다. Brahma를 사용하면 GPU에서 실행되는 명령문과 단일 메서드 내에서 CPU에서 실행되는 명령문을 혼합 할 수 있습니다! 접착제 코드가 전혀 필요하지 않으므로 CPU 몇 개를 사용하여 복잡한 다중 패스 GPU 계산을 단 몇 줄의 코드로 수행 할 수 있습니다. 필요한 모든 접착제 및 쉐이더 코드는 Brahma에 의해 자동 생성됩니다. 고수준 .NET 코드를 작성하기 만하면됩니다.

나는 그것을 사용하지 않았지만 최근에는. NET 바위에 대해 podcast을 들었습니다. GPU 셰이더 언어를 배우기를 원하지 않는다면 좋은 라이브러리처럼 들립니다.

여기는 sourceforge link입니다.

0

C#을 GPU에 통합하는 데 사용하는 것이면 AES의 CUDA 구현을 사용해야합니다. 그들은 가장 빠릅니다. 가장 빠른 구현은 연결된 사용자 (예 : Trinity group)와 같습니다. Modern Graphics Hardware paper의 Practical Symmetric Key Cryptography를보십시오.