Контекст:
Некоторое время назад я наткнулся на эту статью 2001 DDJ от Alexandrescu: http://www.ddj.com/cpp/184403799
Это о сравнении различных способов инициализации буфера для некоторого значения. Как то, что "memset" делает для однобайтовых значений. Он сравнивал различные реализации (memcpy, explicit "for" loop, duff device) и не нашел лучшего кандидата во всех размерах данных и всех компиляторах.
Цитата:
Существует очень глубокая и печальная реализация, лежащая в основе всего этого. Мы в 2001 году, год Пространственной Одиссеи. (...) Просто выходите из окна и смотрите на нас - через 50 лет мы все еще не очень хорошо умеем заполнять и копировать память.
Вопрос:
- У кого-нибудь есть более свежие сведения об этой проблеме? Реализуются ли последние реализации GCC и Visual С++ значительно лучше, чем 7 лет назад?
- Я пишу код, который имеет продолжительность жизни 5+ (вероятно, 10+) лет и будет обрабатывать размеры массивов от нескольких байтов до сотни мегабайт. Я не могу предположить, что мой выбор теперь будет оптимальным через 5 лет. Что мне делать:
- a) используйте системный memset (или эквивалент) и забудьте об оптимальной производительности или предположите, что среда выполнения и компилятор будут обрабатывать это для меня.
- b) анализировать раз и навсегда различные размеры и компиляторы массивов и переключаться во время выполнения между несколькими процедурами.
- c) запустить тест при инициализации программы и переключиться во время выполнения на основе точных (?) данных.
Изменить: Я работаю над программным обеспечением для обработки изображений. Мои элементы массива - это POD, и каждый миллисекунды рассчитывает!
Изменить 2: Спасибо за первые ответы, вот несколько дополнительных сведений:
- Инициализация буфера может составлять 20% -40% от общей продолжительности выполнения некоторых алгоритмов.
- Платформа может варьироваться в течение следующих 5+ лет, хотя она останется в "самой быстрой цене ЦП, которую можно купить у DELL". Компиляторы будут в какой-то форме GCC и Visual С++. Никаких встроенных материалов или экзотических архитектур на радаре
- Я бы хотел услышать от людей, которые должны были обновить свое программное обеспечение, когда появились MMX и SSE, так как мне придется делать то же самое, когда "SSE2015" станет доступным...:)