문제

C# 코드 최적화에 대한 질문을 읽고 있었고 하나의 솔루션은 SSE와 함께 C ++를 사용하는 것이 었습니다. AC# 프로그램에서 직접 SSE를 수행 할 수 있습니까?

도움이 되었습니까?

해결책

다가오는 단핵증 2.2 릴리스에는 SIMD 지원이 있습니다. Miguel de Icaza는 다가오는 기능에 대해 블로그를 작성했습니다 여기, API는입니다 여기.

Microsoft의 .NET Wind 상황에 따라 가능할 수 있습니다.

업데이트 : Mono 2.2 IS 출시된

다른 팁

C#은 명시 적으로 SSE 호출을 할 수 있습니까?

C#은 인라인 IL을 훨씬 덜 인라인 x86/AMD64 어셈블리를 생성 할 수 없습니다.

CLR, 특히 JIT는 대부분의 상황에서 강제를 제거 할 필요가있는 경우 SSE를 사용합니다. 나는 SSE 전문가가 아니기 때문에 가장 많이 말하고 있으며 그것이 유익 할 수있는 경우가 있고 JIT가 최적화를 만들지 않는다고 확신합니다.

.NET 용 SIMD를 사용할 수 있습니다 가까운 미래에. 류지트 이 기능 ATM에 필요한 (.NET의 차세대 JIT 컴파일러).

당신은 사용해야합니다 Microsoft.Numerics.Vectors.Vector<T> 수업 Microsoft.bcl.simd 패키지 이 기능을 활용하려면. 샘플 코드 여기.

기반 이것 포럼 게시, MS JIT 컴파일러는 대상 시스템에서 SSE를 사용할 수있는 경우 SSE를 자동으로 사용합니다.

당신이하고 싶은 일의 '청크'가 있다면, 가장 좋은 방법은 mmx /sse 내막을 사용하여 C ++로 작성한 다음 기능성을 감싸고이를 매우 간단한 /CLR 관리 C ++ 클래스를 만드는 것입니다. .NET 클래스. 그러면 코드가 해당 어셈블리가 마치 일반 클래스 인 것처럼 사용할 수 있습니다.

VC Intrinsics에 대한 자세한 내용은 몇 년 전에 쓴이 작은 디티를 볼 수 있습니다.

http://msdn.microsoft.com/en-us/library/0aws1s9k.aspx

오 - 나는 당신이 실제로 병렬 기능을 사용하여 속도를 높이고 싶다고 가정합니다. 다른 사람들이 지적했듯이 - 더 큰 청크 등으로 데이터를 이동하려면 JIT는 이미 해당 기본에 SSE를 사용하는 방법을 알고 있습니다.

필립이 정확합니다. 비슷하지만 더 자세한 예를 보여주는 또 다른 오래된 게시물이 있습니다. 나는 실제로이 코드를 실행하고 그것이 효과가 있다는 것을 스스로 증명하기 위해 직접 수정했습니다. 나는 내가 일하고있는 프로젝트 에서이 기술을 사용하고 있다고 생각하고 있으며, 이것이 조금 오래 되었기 때문에 새로운 것이 무엇인지보고자하는 이유입니다. 저자가 알 수 있듯이 C ++에서 원하는 기능을 작성하고 컴파일 한 다음 바이트를 C#에 복사 할 수 있습니다.

http://blogs.msdn.com/b/devinj/archive/2005/07/12/438323.aspx

Joe의 CLI C ++ 클래스도 좋은 아이디어라고 덧붙일 것입니다. 그러나 SSE 컴파일러 플래그와 /CLR 플래그는 동일한 프로젝트에서 호환 될 것이라고 생각하지 않습니다. 방금 확인했습니다. SSE ( /Arch : SSE 또는 /Arch : SSE2) 컴파일러 플래그를 사용하여 /clr가 수정할 수없는 별도의 프로젝트에 높은 성능 코드를 작성해야합니다. 몇 가지 입력에서 간단한 산술보다 훨씬 더 복잡한 일을하려면 이것이 최선의 접근법이라고 생각합니다.

최근 Microsoft는 베타 Simd Vector 라이브러리를 출시했습니다 (Microsoft.bcl.simd) Ryujit CTP의 설치가 필요한 C#의 경우 Windows 8 만 작동합니다.

기본 SSE 라이브러리를 사용하여 C#에서 호출 할 수도 있습니다. 예를 들어 YEPPP 라이브러리는 참조하십시오 이 stackoverflow 답변.

물론 당신은 할 수 있습니다 (더 중요한 질문은 왜 - 왜 런타임에 맡기십시오. 그 일입니다).

C#을 사용하면 대의원을 메모리 주소에 매핑 할 수 있습니다. 해당 메모리 주소에는 원시 어셈블리 코드가 포함될 수 있습니다. 더 읽을 수 있습니다 Michael Giagnocavo의 블로그.

나는 나 자신을 시도하지 않았지만 사용하는 것이 가능할 수 있습니다. Marshal.getDelegateForFunctionPointer 또한.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top