J'essaie de convertir un simple code d'analyse numérique (intégration numérique de la règle trapèze) en quelque chose qui fonctionnera sur mon GPU compatible CUDA. Il y a beaucoup de littérature là-bas mais tout semble beaucoup plus complexe que ce qui est requis ici! Mon code actuel est:Conversion d'un simple code C en code CUDA
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N 1000
double function(double);
int main(void)
{
int i;
double lower_bound, upper_bound, h, ans;
printf("Please enter the lower and upper bounds: ");
scanf(" %lf %lf", &lower_bound, &upper_bound);
h = (upper - lower)/N;
ans = (function(lower) + function(upper))/2.0;
for (i = 1; i < N; ++i) {
ans += function(i * h);
}
printf("The integral is: %.20lf\n", h * ans));
return 0;
}
double function(double x)
{
return sin(x);
}
Cela va bien jusqu'à ce que N devient très grand. J'ai fait une mise en œuvre avec openMP qui est plus rapide mais je pense que ce sera utile d'en savoir un peu plus sur CUDA. Est-ce que quelqu'un a eu des suggestions sur où commencer ou s'il y a une manière indolore de convertir ce code? Merci beaucoup, Jack.
Pour tous ceux qui ne connaissent pas l'intégration numérique des règles trapèze, c'est la règle des trapèzes. –
six et deux trois? – JMzance
Peut-on voir le code OpenMP? il pourrait être plus facile de convertir –