Я довольно плохо знаком с C и с тем, как работают массивы и распределение памяти.Сейчас я решаю очень простую функцию, vector_average()
, которая вычисляет среднее значение между двумя последовательными записями массива, т. Е. Среднее значение между ( i ) и ( i +1).Эта средняя функция выглядит следующим образом:
void
vector_average(double *cc, double *nc, int n)
{
//#pragma omp parallel for
double tbeg ;
double tend ;
tbeg = Wtime() ;
for (int i = 0; i < n; i++) {
cc[i] = .5 * (nc[i] + nc[i+1]);
}
tend = Wtime() ;
printf("vector_average() took %g seconds\n", tend - tbeg);
}
Моя цель - установить int n
чрезвычайно высоко, до точки, где фактически требуется некоторое время для завершения этого цикла (следовательно, почему я отслеживаю время на стене вэтот код).Я передаю эту функцию случайной тестовой функции x , f ( x ) = sin ( x ) + 1/3* sin (3 x ), обозначенный в этом коде как x_nc
, в main()
в следующей форме:
int
main(int argc, char **argv)
{
int N = 1.E6;
double x_nc[N+1];
double dx = 2. * M_PI / N;
for (int i = 0; i <= N; i++) {
double x = i * dx;
x_nc[i] = sin(x) + 1./3. * sin(3.*x);
}
double x_cc[N];
vector_average(x_cc, x_nc, N);
}
Но моя проблема здесь в том, что если я установлю int N
выше 1.E5, это segfaults.Пожалуйста, предоставьте любые предложения о том, как я могу установить N
намного выше.Возможно, мне нужно что-то сделать с malloc
, но, опять же, я новичок во всем этом, и я не совсем уверен, как бы я это реализовал.
-CJW