C# SOA против производительностиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# SOA против производительности

Сообщение Anonymous »


My Clackmark пытается сравнить AOS с SOA для 1 000 000 пунктов.
< /p>

Результат для 1 000 000 пунктов:
< /p>

| Метод | Означает | Ошибка | Stddev |
| ---------------------- | ---------: | ----------: | ----------: |
| Onearraybigstruct | 8,798 мс | 0,2200 мс | 0,6278 мс |
| Многорэрсссмслянт | 6,999 мс | 0,2156 мс | 0,6221 мс |
< /pre>
Результат для 10 000 пунктов: < /p>

| Метод | Означает | Ошибка | Stddev |
| -------------------------- | ---------: | --------- | ----------: |
| Onearraybigstruct | 72,69 США | 5.161 США | 15.137 US |
| Многорэрсссмслянт | 70,20 США | 3.250 США | 9.429 US |
< /pre>

Я сомневаюсь, что SOA получит столько внимания, если он не даст не менее 2x производительности.
Что отсутствует в тесте? Имел ли SOA смысл только для старых процессоров и RAMS?using System.Numerics;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Engines;

namespace Benchmark1;

public class BigSmallStruct
{
public const int BufferSize = 10_000;

private readonly Consumer _consumer = new();

private readonly Big[] _big = new Big[BufferSize];
private readonly Vector3[] _position01 = new Vector3[BufferSize];
private readonly Vector3[] _position02 = new Vector3[BufferSize];
private readonly Vector3[] _position03 = new Vector3[BufferSize];
private readonly Vector3[] _position04 = new Vector3[BufferSize];
private readonly Vector3[] _position05 = new Vector3[BufferSize];
private readonly Vector3[] _position06 = new Vector3[BufferSize];
private readonly Vector3[] _position07 = new Vector3[BufferSize];
private readonly Vector3[] _position08 = new Vector3[BufferSize];
private readonly Vector3[] _position09 = new Vector3[BufferSize];
private readonly Vector3[] _position10 = new Vector3[BufferSize];
private readonly Vector3[] _position11 = new Vector3[BufferSize];
private readonly Vector3[] _position12 = new Vector3[BufferSize];

private readonly int[] _blob = new int[1000 * 1000 * 1000];

[GlobalSetup]
public void Setup()
{
for (var i = 0; i < BufferSize; i++)
{
_big = new Big
{
Position01 = new Vector3(i, i, 1),
Position02 = new Vector3(i, i, 2),
Position03 = new Vector3(i, i, 3),
Position04 = new Vector3(i, i, 4),
Position05 = new Vector3(i, i, 5),
Position06 = new Vector3(i, i, 6),
Position07 = new Vector3(i, i, 7),
Position08 = new Vector3(i, i, 8),
Position09 = new Vector3(i, i, 9),
Position10 = new Vector3(i, i, 10),
Position11 = new Vector3(i, i, 11),
Position12 = new Vector3(i, i, 12)
};

_position01 = _big.Position01;
_position02 = _big.Position02;
_position03 = _big.Position03;
_position04 = _big.Position04;
_position05 = _big[i].Position05;
_position06[i] = _big[i].Position06;
_position07[i] = _big[i].Position07;
_position08[i] = _big[i].Position08;
_position09[i] = _big[i].Position09;
_position10[i] = _big[i].Position10;
_position11[i] = _big[i].Position11;
_position12[i] = _big[i].Position12;
}
for (var i = 0; i < _blob.Length; i++)
{
_blob[i] = i + 1;
}
}

[Benchmark]
public void OneArrayBigStruct()
{
var result = new Vector3(0f, 0f, 0f);
for (var i = 0; i < BufferSize; i++)
{
result += _big[i].Position01;
result += _big[i].Position05;
}
_consumer.Consume(result);
}

[Benchmark]
public void ManyArraysSmallStruct()
{
var result = new Vector3(0f, 0f, 0f);
for (var i = 0; i < BufferSize; i++)
{
result += _position01[i];
result += _position05[i];
}
_consumer.Consume(result);
}
}

public struct Big
{
public Vector3 Position01;
public Vector3 Position02;
public Vector3 Position03;
public Vector3 Position04;
public Vector3 Position05;
public Vector3 Position06;
public Vector3 Position07;
public Vector3 Position08;
public Vector3 Position09;
public Vector3 Position10;
public Vector3 Position11;
public Vector3 Position12;
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... erformance
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • C# SOA против производительности
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Функция против класса против модуля против пакета против сеанса для областей фиксации в Pytest
    Anonymous » » в форуме Python
    0 Ответы
    141 Просмотры
    Последнее сообщение Anonymous
  • Функция против класса против модуля против пакета против сеанса для приспособлений в Pytest
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Почему Google DNS отвечает SOA на запрос CNAME?
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • SOA, TDD, DI & DDD - игра Shell?
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»