Я экспериментирую с алгоритмом выхвата лица для создания сетки вокселей и пробовал два оптимизированных подхода: < /p>
- - использует битовые маски и операции ручного бита.
Код: Выделить всё
VisibilityCalculatorBinary.GetVisibleFaces()
- -обрабатывает воксели с использованием system.numerics.vector .
Код: Выделить всё
VisibilityCalculatorSimd.GetVisibleFaces()
Репозиторий: https://github.com/nicolas-goyon/voxel- ... on-library> writer:> > > > > > warphors:> warphors-fruy-prainto-com 10-Update-Chunk- и Voxel-Architecture-out-simd-операция < /p>
Код: Выделить всё
[Benchmarks from `ConsoleAppExample/benchmark/VisibilityBenchmark.cs`]
[Code from `VisibilityCalculator.cs`, `VisibilityCalculatorBinary.cs`, and `VisibilityCalculatorSimd.cs` in the folder : `VoxelMeshOptimizerLibrary/examples/ConsoleAppExample/VisibilityCalculators/`]
Цифры в ConsoLeaPexample (с использованием BenchmarkDotnet) показывают оба метода, работающие медленнее, чем наивная реализация (
Код: Выделить всё
VisibilityCalculator.GetVisibleFaces
stddev < /th>
медиана < /th>
aterio < /th>
Соотношение Alloc < /th>
< /tr>
< /thead>
Naive < /td>
50 < /td>
1,06 < /td>
-< /td>
1,9901 мс < /td>
12,028 MS < /td>
-< /td>
1.03 < /td>
< /tr>
simd < /td>
50 < /td>
0.37 < /td>
-< /td>
-< /td>
-< /td>
0,3471 мс < /td>
0,9848 мс < /td>
3,758 мс < /td>
0.83 < /td>
-< /td>
< /td>
< /tr>
Naive < /td>
250 < /td>
1,404.183 мс < /td>
27,6543 MS>
22000.0000
21000.0000
3000.0000
0.25 < /td>
22000.0000 < /td>
21000.0000 < /td>
610,96 Mb < /td>
1.03 < /td>
< /tr>
simd < /td>
250 < /td>
2,52 < /td>
0.10 < /td>
22000.0000 < /td>
21000.0000
3000.0000
596,05 Mb
Подробнее здесь: https://stackoverflow.com/questions/797 ... than-the-n