From 1b7d44b30d49c1134d514a3129cf04d7d1b89a54 Mon Sep 17 00:00:00 2001
From: Rafael Ravedutti <rafaelravedutti@gmail.com>
Date: Wed, 18 May 2022 23:50:08 +0200
Subject: [PATCH] Add CUDA compilation rules

Signed-off-by: Rafael Ravedutti <rafaelravedutti@gmail.com>
---
 Makefile                   | 8 +++++++-
 src/pairs/__init__.py      | 2 +-
 src/pairs/code_gen/cgen.py | 7 +++++--
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/Makefile b/Makefile
index 1bcaa4a..60e3a0a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 .PHONY: all build clean lj_ns
 
-all: build lj_ns clean
+all: build lj_ns
 	@echo "Everything was done!"
 
 build:
@@ -10,8 +10,14 @@ build:
 lj_ns:
 	@echo "Generating and compiling CPP for Lennard-Jones example..."
 	python3 examples/lj_func.py
+
+# Targets
+cpu: build lj_ns
 	g++ -o lj_ns lj_ns.cpp
 
+gpu: build lj_ns
+	nvcc -o lj_ns lj_ns.cu
+
 clean:
 	@echo "Cleaning..."
 	rm -rf build lj_ns lj_ns.cpp dist pairs.egg-info functions functions.pdf
diff --git a/src/pairs/__init__.py b/src/pairs/__init__.py
index 75615c3..d0e878d 100644
--- a/src/pairs/__init__.py
+++ b/src/pairs/__init__.py
@@ -4,7 +4,7 @@ from pairs.sim.simulation import Simulation
 
 
 def simulation(ref, dims=3, timesteps=100, debug=False):
-    return Simulation(CGen(f"{ref}.cpp", debug), dims, timesteps)
+    return Simulation(CGen(ref, debug), dims, timesteps)
 
 def target_cpu():
     return Target(Target.Backend_CPP, Target.Feature_CPU)
diff --git a/src/pairs/code_gen/cgen.py b/src/pairs/code_gen/cgen.py
index f11a8ce..e8772a9 100644
--- a/src/pairs/code_gen/cgen.py
+++ b/src/pairs/code_gen/cgen.py
@@ -26,11 +26,12 @@ from pairs.code_gen.printer import Printer
 class CGen:
     temp_id = 0
 
-    def __init__(self, output, target, debug=False):
+    def __init__(self, ref, target, debug=False):
         self.sim = None
         self.target = None
+        self.print = None
+        self.ref = ref
         self.debug = debug
-        self.print = Printer(output)
 
     def assign_simulation(self, sim):
         self.sim = sim
@@ -39,6 +40,8 @@ class CGen:
         self.target = target
 
     def generate_program(self, ast_node):
+        ext = ".cu" if self.target.is_gpu() else ".cpp"
+        self.print = Printer(self.ref + ext)
         self.print.start()
         self.print("#include <math.h>")
         self.print("#include <stdbool.h>")
-- 
GitLab