Уверены ли вы, что это будет иметь большое значение? Вероятность того, что загрузка «id из внешнего источника» займет значительно больше времени, чем добавление значений.
Не оптимизируйте, пока не узнаете, где находится узкое горло.
Редактировать в ответ на комментарий: Вы меня неправильно поняли. Если для загрузки идентификаторов с жесткого диска требуется 10 секунд, то доли секунды, потраченные на обработку списка, несущественны в грандиозной схеме вещей. Допустим, что требуется 10 секунд для загрузки и 1 секунда для обработки:
Вы оптимизируете цикл обработки, так что он занимает 0 секунд (почти невозможно, но для иллюстрации точки), тогда он STILL занимает 10 секунд. 11 Секунды на самом деле не то, что ba поражает производительность, и вам было бы лучше сосредоточить свое время оптимизации на фактической нагрузке данных, поскольку это гораздо более вероятно, будет медленной частью.
На самом деле может быть вполне оптимальным выполнение нагрузок с двойной буферизацией. т.е. вы загружаете буфер 0, тогда вы начинаете загрузку буфера 1. В то время как буфер 1 загружает буфер процесса 0. Когда закончите загрузку следующего буфера при обработке буфера 1 и так далее. таким образом, вы можете полностью амортизировать затраты на обработку.
Дальнейшее редактирование: На самом деле ваша лучшая оптимизация, вероятно, произошла от загрузки вещей в набор ведер, которые устраняют «id [i]» часть расчета te. Затем вы можете просто разгрузить до 3 потоков, где каждый использует SSE. Таким образом, вы можете объединить их все одновременно и, если у вас есть, по крайней мере, трехъядерная машина, обрабатывать все данные в 10-й раз. Организация данных для оптимальной обработки всегда обеспечит лучшую оптимизацию, IMO.
Просто чтобы убедиться, в вашем ре al code являются автоматическими переменными `size` и` sum`, как здесь?Если они не являются (например, если они переданы в вашу реальную рутину по указателю или по ссылке), тогда может возникнуть искусственная неэффективность, введенная возможностью сглаживания между `sum` и` value` и/или ` size` и `id`. – 2010-12-04 20:28:01
Будет ли распараллеливание рассчитываться как оптимизация здесь? т. е. разделить массив на несколько подматриц и передать каждый отдельный массив отдельному потоку для перебора, а затем объединить результаты в конце. Для достаточно больших массивов это может дать хорошее ускорение, по крайней мере, на многоядерной машине. – 2010-12-04 20:32:02
Да, размер и сумма здесь являются переменными здесь. Разметка звучит как хорошая идея, я попробую memcpy разбить их на четверти и запустить их параллельно. – Dmi 2010-12-04 20:35:10