@DVirt

Как быстро получить сумму чисел большого массива?

Здравствуйте.

Есть массив длиной 12 454 100 992, в каждой ячейке массива содержится положительное или отрицательное число.
Как максимально быстро можно получить сумму всех чисел, при этом НЕ распараллеливая на потоки и вычисления производятся на процессоре 3700 МГц (видеокарта не предусмотрена)?

Дополню свой вопрос.
Возможно проще написать на ассемблере с побитовыми сдвигами, чем это делать на языке высокого уровня аля 2+2.
Вот тут загвостка, где будет быстрее происходит вычисления ?

P.S. Интересует затраченное время на действие передача в регистр значение + команды. Т.е. будет ли отличатся время исполнения данной команды написанной на С или ассемблер
  • Вопрос задан
  • 401 просмотр
Решения вопроса 1
@Xilian
Программист 1С, сетевые технологии, SQL
Задача вообще не понятна. Частота процессора указана, а размерность регистров и массива -нет, где храниться массив то-же. В общем случае будет все равно упираться в IO, если без параллелизма - через реальный режим работы процессора и пачками через AVX и хорошо постараться с кэшем.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@deliro
Твой вопрос сводится к вырожденному вопросу: "Можно ли угадать данные на диске, не зная природы этих данных, а зная только длину".
Ответ: нельзя.

Дополнил ответ
Я правда крайне сомневаюсь, что ассемблер сможет раскрутить твой хард быстрее чем Си. Или ты считаешь, что аппаратная арифметика будет медленней харда?
Ответ написан
sgjurano
@sgjurano
Разработчик
Пройтись от начала до конца, суммируя элементы.

Вам так или иначе придется их считать с диска хотя бы по одному разу, а раз так, то вы можете их просто просуммировать, читать лучше блоками, чтобы минимизировать io.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы