현재 SSE 사용으로 많은 이점을 얻을 수있는 C#의 응용 프로그램을 코딩하고 있습니다. 상대적으로 작은 코드로 인해 실행 시간이 90-95 %가됩니다. 코드 자체는 SSE (매트릭스 및 벡터 기반)에서도 완벽하므로 Mono.Simd를 사용하기 시작했습니다. 실행 시간에 상당한 차이가 있었지만 여전히 충분하지 않습니다. Mono.Simd의 문제점은 매우 오래된 SSE 명령 (주로 SSE1 및 SSE2에 기반한 것으로 생각합니다)이 있기 때문에 dotproduct (또는 스칼라/내부 제품)가 예를 들어 3 개의 명령을 처리하도록 만듭니다. SSE4는 단 1 개의 명령어로 구현됩니다. (2006 년부터 SSE4를 사용할 수 있기 때문에 모든 현대 컴퓨터가 SSE4를 사용할 수 있다고 가정 할 수 있습니다). 또한, 다른 함수들의 묶음은 전혀 포함되지 않습니다. (예를 들어, 모든 숫자의 절대 값을 얻습니다. 또한 어색한 해결 방법이 필요합니다).C#에서 SSE 사용
내 질문은 내 C# 코드 내에서 SSE/SIMD를 사용하도록 호출 할 수있는 다른 라이브러리가 있습니까? C#에서 인라인 어셈블리를 사용하는 것도 가능합니다. 따라서 C++ 코드를 사용할 수도 있지만, 성능이 약간 떨어지더라도 말입니다. 그렇지만이 함수를 사용하여 비교적 쉽게 사용할 수있는 C++ 라이브러리가 있으면 허용 될 수 있습니다. 그렇 겠지.
미리 도움을 청하십시오.
C++/CLI로 클래스 라이브러리를 만듭니다. #pragma unmanaged in effect로 컴파일 된 코드에서 SSEx 내장 함수를 사용할 수 있습니다. 그러나 단일 SSE4 명령어를 효율적으로 사용할 수는 없으며 관리 코드에서 비 관리 코드 실행으로 전환하는 데 오버 헤드가 발생합니다. 약 5 나노 초가 소요되며 인수를 마샬링하는 데 필요한 오버 헤드와 변수를 16 개로 정렬해야하는 필연적 인 복사본이 필요합니다. 네이티브 코드는 해당 비용을 상환 할만큼 충분히 커야합니다. –
"2006 년부터 SSE4를 사용할 수 있기 때문에 현재 모든 컴퓨터에 지금까지있는 모든 컴퓨터가 있다고 가정 할 수 있습니다."- Penryn (Intel)은 2008 년 1 월이었고 Bulldozer (AMD)는 2011 년 10 월이었습니다. SSE2에 대한 대체 기능이 없다면 인텔과 AMD의 경우이 날짜보다 오래된 모든 CPU에서 충돌합니다. – Asik
opencl 래퍼를 사용할 수 있습니다. –