производительность — C ++: асинхронная запись памяти

У меня мало вопросов о программировании на C ++. Я хотел бы знать, возможно ли запись в память асинхронным способом (последовательный код)? Но позвольте мне прояснить мой вопрос.
Я ищу улучшения для алгоритма, и кажется, что узким местом моего кода является запись в память. Я хотел бы написать в памяти и все еще продолжать вычислять. Возможно ли это сделать с одним процессором? Как использовать ALU и одновременно использовать блок записи? Зная, я не использую результат в следующем вычислении. Это написано в векторном результате.

Спасибо, что нашли время ответить, либо читать.

1

Решение

И да и нет. Компилятор оптимизирует запись в память, так что ваш процессор может делать что-то во время записи блоков памяти. Это форма скрытие латентности. Это ответ «да».

Часть «нет» заключается в том, что, к сожалению, с точки зрения кода, мы не можем сделать это с помощью одного потока.

Ввод / вывод является узким местом во многих, многих программах, поэтому вам просто нужно оптимизировать и справиться с ними.

0

Другие решения

Это не вопрос C ++ или чего-то еще, это просто вопрос поддержки процессора: C ++ не может предложить вам такую ​​возможность, если базовое оборудование не в состоянии ее поддерживать.

В инструкции x86 такого средства нет, но AFAIK в более новых версиях PPC. Если вы хотите пойти по аппаратному маршруту, вы должны сначала проверить, какое оборудование вы используете в настоящее время: Задержка памяти сильно различается для разных процессоров x86.

0

Вы можете оптимизировать запись в память.

  1. Сжатие данных, которые вы пишете, чтобы сохранить пропускную способность памяти.
  2. Запись локально — в один непрерывный блок памяти для более эффективного использования буфера записи процессора.
  3. Запишите это из одного потока, чтобы предотвратить ложный обмен.
  4. Может быть __builtin_prefetch может помочь здесь, но я не знаю точно.
0