Я пытаюсь создать матрицу случайных чисел 5000 на 5000. Вот то, что я делаю с MATLAB:C++ медленнее, чем MATLAB
for i = 1:100
rand(5000)
end
И вот что я делаю в C++:
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <ctime>
using namespace std;
int main(){
int N = 5000;
double ** A = new double*[N];
for (int i=0;i<N;i++)
A[i] = new double[N];
srand(time(NULL));
clock_t start = clock();
for (int k=0;k<100;k++){
for (int i=0;i<N;i++){
for (int j=0;j<N;j++){
A[i][j] = rand();
}
}
}
cout << "T="<< (clock()-start)/(double)(CLOCKS_PER_SEC/1000)<< "ms " << endl;
}
MATLAB занимает около 38 секунд, в то время как C++ занимает около 90 секунд. В другом вопросе люди выполнили тот же код и получили одинаковые скорости как для C++, так и для MATLAB.
Я использую Visual C++ со следующими оптимизациями
Я хотел бы узнать, что я здесь отсутствует? Спасибо вам за помощь.
EDIT: Вот ключевая вещь, хотя ... Why MATLAB is faster than C++ in creating random numbers?
В этом вопросе, люди дали мне ответы, где их C++ скорости такие же, как MATLAB. Когда я использую тот же код, я получаю более худшие скорости, и я пытаюсь понять, почему.
Это не эквивалент. В случае C++ у вас есть несмежный массив, и каждый вызов 'rand' требует последующего преобразования в' double'. По крайней мере, попробуйте запустить со смежным массивом (т. Е. 'Double * A = new double [5000 * 5000]'). –
Также он должен читать 'CLOCKS_PER_SEC/1000.0'. 'CLOCKS_PER_SEC' определяется как' (long) 1000' на VS2015, но лучше оставаться на безопасной стороне, если любой другой компилятор/среда использует разные значения. – Banex
Вы скомпилировали C++ с включенной оптимизацией? – juanchopanza