From 602fc97cca1f6e82f15b104bfd70a677e1e8a107 Mon Sep 17 00:00:00 2001 From: Robin van Grinsven Date: Wed, 20 Aug 2025 01:04:24 +0200 Subject: [PATCH] try cmake and make. failed now try with julia. --- .gitignore | 5 +++++ CMakeLists.txt | 8 ++++++++ Makefile | 26 ++++++++++++++++++++----- julia/vector_add.jl | 38 +++++++++++++++++++++++++++++++++++++ kernels/test.cl | 1 + packges.org => packages.org | 0 soilsimulator.cppcheck | 15 +++++++++++++++ src/main.cpp | 31 +++++++++++++++++++++++------- 8 files changed, 112 insertions(+), 12 deletions(-) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 julia/vector_add.jl create mode 100644 kernels/test.cl rename packges.org => packages.org (100%) create mode 100644 soilsimulator.cppcheck diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b8b31a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/CMakeFiles/ +/soilsimulator-cppcheck-build-dir/ +/docs/2025 +/CMakeCache.txt +*.zip diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..fdb3c88 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.0) +cmake_policy(VERSION 3.0...3.18.4) +project(proj) +add_executable(app src/main.cpp) +find_package(OpenCLHeaders REQUIRED) +find_package(OpenCLICDLoader REQUIRED) +find_package(OpenCLHeadersCpp REQUIRED) +target_link_libraries(app PRIVATE OpenCL::Headers OpenCL::OpenCL OpenCL::HeadersCpp) diff --git a/Makefile b/Makefile index 203315b..2e54c15 100644 --- a/Makefile +++ b/Makefile @@ -4,14 +4,15 @@ BUILD_DIR := ./build SRC_DIR := ./src INC_DIR := ./include SHADER_DIR := ./kernels +SHADER_EXT := 'cl' # Find all the C and C++ files we want to compile SRCS := $(shell find $(SRC_DIR) -name '*.cpp') -GLSLS := $(shell find $(SHADER_DIR) -name '*.glsl') +GLSLS := $(shell find $(SHADER_DIR) -name '*.cl') # Prepends BUILD_DIR and appends .o to every src file OBJS := $(SRCS:%=$(BUILD_DIR)/%.o) -SPIRVS := $(GLSLS:%.glsl=$(BUILD_DIR)/%.sphv) +SPIRVS := $(GLSLS:%.$(SHADER_EXT)=$(BUILD_DIR)/%.sphv) # String substitution (suffix version without %). DEPS := $(OBJS:.o=.d) @@ -26,7 +27,22 @@ LIBS := OpenCL LDFLAGS := $(addprefix -l,$(LIBS)) # The -MMD and -MP flags together generate Makefiles for us! we use c++ 26 -CPPFLAGS := -Wall -Wextra $(INC_FLAGS) -MMD -MP -std=c++23 +CPPFLAGS := -Wall -Wextra $(INC_FLAGS) -MMD -MP -std=c++20 + +#set flags for kernel compiling +GPU_VENDOR := glxinfo | grep -E "OpenGL vendor | OpenGL renderer" | cut -d" " -f4 +ARCH := uname -m +ifeq ($(GPU_VENDOR),"AMD") + CLFLAGS := --target=amdgcn-amd-amdhsa -mcpu=gfx900 +else ifeq ($(GPU_VENDOR),"NVIDIA") + CLFLAGS := --target=nvtpx64-unkown-unkown +else ifeq ($(ARCH), "x86_64") + CLFLAGS := --target=spirv64 +else + CLFLAGS := --target=spirv32 +endif + +CXX := clang # The final build step. $(BUILD_DIR)/$(TARGET_EXEC): $(OBJS) @@ -38,9 +54,9 @@ $(BUILD_DIR)/%.cpp.o: %.cpp $(SPIRVS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@ $(LDFLAGS) #build the shaders -$(SPIRVS): $(GLSL) +$(BUILD_DIR)/%.spv: %.cl mkdir -p $(dir $@) - glslc $(shaders).glsl $(shaders).spv + $(CXX) $(CLFLAGS) -c $< -o $@ run: $(BUILD_DIR)/$(TARGET_EXEC) ./$(BUILD_DIR)/$(TARGET_EXEC) diff --git a/julia/vector_add.jl b/julia/vector_add.jl new file mode 100644 index 0000000..a91e3d8 --- /dev/null +++ b/julia/vector_add.jl @@ -0,0 +1,38 @@ +using OpenCL, pocl_jll + +function vadd(a, b, c) + gid = get_global_id(1) + @inbounds c[gid] = a[gid] + b[gid] + return +end + +a = rand(Float32, 50_000) +b = rand(Float32, 50_000) + +d_a = CLArray(a) +d_b = CLArray(b) +d_c = similar(d_a) + +@opencl global_size=size(a) vadd(d_a, d_b, d_c) + +c = Array(d_c) + +@assert a + b ≈ c +using OpenCL, pocl_jll + +function vadd(a, b, c) + gid = get_global_id(1) + @inbounds c[gid] = a[gid] + b[gid] + return +end + +a = rand(Float32, 50_000) +b = rand(Float32, 50_000) + +d_a = CLArray(a) +d_b = CLArray(b) +d_c = similar(d_a) + +@opencl global_size=size(a) vadd(d_a, d_b, d_c) + +c = Array(d_c) diff --git a/kernels/test.cl b/kernels/test.cl new file mode 100644 index 0000000..e5cdbee --- /dev/null +++ b/kernels/test.cl @@ -0,0 +1 @@ +kernel void k(){} diff --git a/packges.org b/packages.org similarity index 100% rename from packges.org rename to packages.org diff --git a/soilsimulator.cppcheck b/soilsimulator.cppcheck new file mode 100644 index 0000000..57b69de --- /dev/null +++ b/soilsimulator.cppcheck @@ -0,0 +1,15 @@ + + + soilsimulator-cppcheck-build-dir + unix64 + false + clang + true + true + 2 + 100 + + threadsafety + misra + + diff --git a/src/main.cpp b/src/main.cpp index d00b30a..b436aa1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,20 +1,24 @@ + +#include +#include + // opencl #include // raylib -#include +// #include // sqllite -#include +//#include + +//#include "include/layers.hpp" -#include "include/layers.hpp" int main(){ // import data - sqlite3 *db; + cl::Platform default_platform=select_platform(); + std::cout << "Using platform: "<()<<"\n"; - - // setup opencl pipeline - + return 0; // setup raylib env @@ -24,3 +28,16 @@ int main(){ // raylib thread (60fps) // opencl sim (every 15 seconds) swap data every 15 seconds } + +cl::Platform select_platform (){ + + std::vector all_platforms; + cl::Platform::get(&all_platforms); + if(all_platforms.size() == 0) + { + std::cout << "No Platforms found. Check OpenCl installation!\n"; + exit(1); + } + + return all_platforms[0] +}