1
제 그래픽 응용 프로그램에서 SharpDX.Matrix3x2
또는 System.Numerics.Matrix3x2
을 사용하여 행렬을 나타낼 수 있습니다. 그러나 성능 테스트를 통해 두 매트릭스를 모두 실행하면 SharpDX의 매트릭스가 시간의 측면에서 최대 70 %의 여백만큼 편리하게 System.Numerics.Matrix3x2
을 이긴다는 것을 알게되었습니다. 내 시험은 아주 간단 반복되는 곱셈했다, 여기에 코드입니다 : Matrix3x2 성능
var times1 = new List<float>();
for (var i = 0; i < 100; i++)
{
var sw = Stopwatch.StartNew();
var mat = SharpDX.Matrix3x2.Identity;
for (var j = 0; j < 10000; j++)
mat *= SharpDX.Matrix3x2.Rotation(13);
sw.Stop();
times1.Add(sw.ElapsedTicks);
}
var times2 = new List<float>();
for (var i = 0; i < 100; i++)
{
var sw = Stopwatch.StartNew();
var mat = System.Numerics.Matrix3x2.Identity;
for (var j = 0; j < 10000; j++)
mat *= System.Numerics.Matrix3x2.CreateRotation(13);
sw.Stop();
times2.Add(sw.ElapsedTicks);
}
TestContext.WriteLine($"SharpDX: {times1.Average()}\nSystem.Numerics: {times2.Average()}");
내가 인텔 i5-6200U 프로세서에서 이러한 테스트를 실행.
이제 내 질문은 SharpDX의 매트릭스가 어떻게 더 빠를 수 있을까요? System.Numerics.Matrix3x2
은 SIMD 명령어를 더 빨리 실행하기로되어 있습니까?
SharpDX.Matrix3x2
의 구현은 here이며 사용 가능한 C#으로 작성되었습니다. 내가 안에 내가 회전 행렬 및 곱셈의 생성을 테스트하는 것을 의미 루프, 회전 행렬 를 작성했다 -
_ "System.Numerics.Matrix3x2가 SIMD 명령어를 사용하여 더 빨리 실행되지 않습니까?"- [예, .NET 4.6 x64에만 해당] (https://docs.microsoft.com/en-us)/dotnet/표준/숫자 # simd 가능 벡터 유형). – MickyD
타이밍에 결함이있을 가능성이 큽니다. 정확한 결과를 얻으려면 [BenchmarkDotNet] (https://github.com/dotnet/BenchmarkDotNet)과 같은 표준 벤치마킹 라이브러리를 사용하십시오. – ja72