From d3d6d2e80e81bf2d58ea2c7173b8917765ea10fb Mon Sep 17 00:00:00 2001 From: David Chamont <chamont@in2p3.fr> Date: Thu, 6 Jul 2023 07:05:45 -0700 Subject: [PATCH] Second done is best --- GrayScottChatGpt/chatgpt-grayscott-sycl.cpp | 98 --------------------- 1 file changed, 98 deletions(-) delete mode 100644 GrayScottChatGpt/chatgpt-grayscott-sycl.cpp diff --git a/GrayScottChatGpt/chatgpt-grayscott-sycl.cpp b/GrayScottChatGpt/chatgpt-grayscott-sycl.cpp deleted file mode 100644 index 521d963..0000000 --- a/GrayScottChatGpt/chatgpt-grayscott-sycl.cpp +++ /dev/null @@ -1,98 +0,0 @@ -#include <CL/sycl.hpp> -#include <iostream> -#include <vector> - -namespace sycl = cl::sycl; - -// Définition des constantes de l'équation de Gray-Scott -constexpr double Du = 0.02; -constexpr double Dv = 0.01; -constexpr double F = 0.04; -constexpr double k = 0.06; -constexpr double dt = 0.1; - -// Fonction pour initialiser les données -void initializeData(std::vector<double>& u, std::vector<double>& v, int size) { - // Initialise u et v avec des valeurs aléatoires - std::random_device rd; - std::mt19937 gen(rd()); - std::uniform_real_distribution<> dis(0.0, 1.0); - - for (int i = 0; i < size; ++i) { - u[i] = 1.0 - dis(gen); - v[i] = dis(gen); - } -} - -// Kernel pour mettre à jour les valeurs de u et v -class GrayScottKernel { -public: - GrayScottKernel(const double* u, const double* v, double* result_u, double* result_v) - : u_(u), v_(v), result_u_(result_u), result_v_(result_v) {} - - void operator()(sycl::nd_item<1> item) { - size_t index = item.get_global_id(0); - - double u = u_[index]; - double v = v_[index]; - - double laplacian_u = 0.0; - double laplacian_v = 0.0; - - // Calcul du laplacien - // ... - - // Mise à jour des valeurs de u et v - // ... - - result_u_[index] = u; - result_v_[index] = v; - } - -private: - const double* u_; - const double* v_; - double* result_u_; - double* result_v_; -}; - -int main() { - const int size = 1000; - - std::vector<double> u(size); - std::vector<double> v(size); - - initializeData(u, v, size); - - // Création de l'environnement SYCL - sycl::default_selector selector; - sycl::queue queue(selector); - - // Allocation des buffers SYCL pour les données - sycl::buffer<double> uBuf(u.data(), sycl::range<1>(size)); - sycl::buffer<double> vBuf(v.data(), sycl::range<1>(size)); - sycl::buffer<double> resultUBuf(u.data(), sycl::range<1>(size)); - sycl::buffer<double> resultVBuf(v.data(), sycl::range<1>(size)); - - // Lancement du kernel - queue.submit([&](sycl::handler& cgh) { - auto uAcc = uBuf.get_access<sycl::access::mode::read>(cgh); - auto vAcc = vBuf.get_access<sycl::access::mode::read>(cgh); - auto resultUAcc = resultUBuf.get_access<sycl::access::mode::write>(cgh); - auto resultVAcc = resultVBuf.get_access<sycl::access::mode::write>(cgh); - - cgh.parallel_for<sycl::range<1>>(sycl::range<1>(size), GrayScottKernel(uAcc.get_pointer(), vAcc.get_pointer(), resultUAcc.get_pointer(), resultVAcc.get_pointer())); - }); - - // Copie des résultats de retour du buffer SYCL vers le vecteur - queue.wait(); - resultUBuf.get_access<sycl::access::mode::read>().memcpy(u.data(), size * sizeof(double)); - resultVBuf.get_access<sycl::access::mode::read>().memcpy(v.data(), size * sizeof(double)); - - // Affichage des résultats - for (int i = 0; i < size; ++i) { - std::cout << "u[" << i << "] = " << u[i] << ", v[" << i << "] = " << v[i] << std::endl; - } - - return 0; -} -- GitLab