Как сказал @Rotsor, 16G операций / 55 часов - это около 80 000 операций в секунду, или одна операция каждые 12,5 микросекунд.Это очень много времени на операцию.
Это означает, что ваши циклы не являются причиной плохой производительности, это то, что в самый внутренний цикл, который занимает время.И Octave - это интерпретируемый язык.Это само по себе означает замедление на порядок.
Если вам нужна скорость, вам сначала нужно быть на скомпилированном языке.Затем вам нужно выполнить настройку производительности (или профилирование) или просто выполнить один шаг в отладчике на уровне команд.Это скажет вам, что он на самом деле делает в своем сердце сердец.Как только вы дойдете до того, чтобы не тратить впустую циклы, более изящное оборудование, ядра, CUDA и т. Д. Ускорят параллелизм.Но делать это глупо, если ваш код занимает слишком много циклов. (Вот пример настройки производительности - 43-кратное ускорение только путем обрезки жира).
Я не могу поверить, что респонденты говорят о matlab, APL и других векторизованных языках.Это переводчики.Они дают вам краткий исходный код , который совсем не - это то же самое, что быстрое выполнение .Когда дело доходит до чистого металла, они застряли на том же оборудовании, что и любой другой язык.
Добавлено: чтобы показать, что я имею в виду, я просто запустил этот код C ++, который выполняет операции 16Gна этом заплесневелом старом ноутбуке, и это заняло 94 секунды, или около 6 нс за итерацию.(Я не могу поверить, что ты сидел с этой штукой целых два дня.)
void doit(){
double sum = 0;
for (int i = 0; i < 1000; i++){
for (int j = 0; j < 16000000; j++){
sum += j * 3.1415926;
}
}
}