diff --git a/examples/tools/intel/sycl_app/CMakeLists.txt b/examples/tools/intel/sycl_app/CMakeLists.txt new file mode 100644 index 00000000..39eeb89b --- /dev/null +++ b/examples/tools/intel/sycl_app/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.15) +project(sycl_app CXX) + +find_package(ZLIB REQUIRED) +find_package(fmt REQUIRED) + +add_executable(sycl_app src/main.cpp) +target_link_libraries(sycl_app PRIVATE ZLIB::ZLIB fmt::fmt) +target_compile_features(sycl_app PRIVATE cxx_std_17) diff --git a/examples/tools/intel/sycl_app/conanfile.py b/examples/tools/intel/sycl_app/conanfile.py new file mode 100644 index 00000000..5070a96c --- /dev/null +++ b/examples/tools/intel/sycl_app/conanfile.py @@ -0,0 +1,29 @@ +from conan import ConanFile +from conan.tools.cmake import CMake, cmake_layout, CMakeDeps, CMakeToolchain + + +class SyclAppRecipe(ConanFile): + name = "sycl_app" + version = "1.0" + package_type = "application" + + settings = "os", "compiler", "build_type", "arch" + exports_sources = "CMakeLists.txt", "src/*" + + def requirements(self): + self.requires("zlib/1.3.1") + self.requires("fmt/11.0.2") + + def layout(self): + cmake_layout(self) + + def generate(self): + deps = CMakeDeps(self) + deps.generate() + tc = CMakeToolchain(self) + tc.generate() + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() diff --git a/examples/tools/intel/sycl_app/profiles/linux b/examples/tools/intel/sycl_app/profiles/linux new file mode 100644 index 00000000..6f383126 --- /dev/null +++ b/examples/tools/intel/sycl_app/profiles/linux @@ -0,0 +1,16 @@ +[settings] +os=Linux +arch=x86_64 +compiler=intel-cc +compiler.mode=icx +compiler.version=2026.0 +compiler.cppstd=17 +compiler.libcxx=libstdc++ +build_type=Release + +[conf] +tools.build:cxxflags=["-fsycl"] +tools.build:exelinkflags=["-fsycl"] +tools.build:sharedlinkflags=["-fsycl"] +tools.intel:installation_path=/opt/intel/oneapi + diff --git a/examples/tools/intel/sycl_app/profiles/windows b/examples/tools/intel/sycl_app/profiles/windows new file mode 100644 index 00000000..352bdd87 --- /dev/null +++ b/examples/tools/intel/sycl_app/profiles/windows @@ -0,0 +1,16 @@ +[settings] +os=Windows +arch=x86_64 +compiler=intel-cc +compiler.mode=icx +compiler.version=2026.0 +compiler.cppstd=17 +compiler.runtime=dynamic +build_type=Release + +[conf] +tools.build:cxxflags=["-fsycl"] +tools.build:exelinkflags=["-fsycl"] +tools.build:sharedlinkflags=["-fsycl"] +tools.intel:installation_path=C:\Program Files (x86)\Intel\oneAPI + diff --git a/examples/tools/intel/sycl_app/src/main.cpp b/examples/tools/intel/sycl_app/src/main.cpp new file mode 100644 index 00000000..57d130f3 --- /dev/null +++ b/examples/tools/intel/sycl_app/src/main.cpp @@ -0,0 +1,36 @@ +#include +#include +#include +#include + +int main() { + sycl::queue q; + fmt::print("SYCL Device: {}\n", + q.get_device().get_info()); + + // Compute squares using SYCL parallel_for + constexpr size_t N = 10000; + std::vector data(N); + { + sycl::buffer buf(data); + q.submit([&](sycl::handler& h) { + auto acc = buf.get_access(h); + h.parallel_for(N, [=](sycl::id<1> i) { + acc[i] = static_cast(i[0] * i[0]); + }); + }); + } + fmt::print("Computed {} squares. First: {}, Last: {}\n", + N, data[0], data.back()); + + // Compress results with zlib + std::vector compressed(compressBound(data.size() * sizeof(float))); + uLongf comp_size = compressed.size(); + compress(compressed.data(), &comp_size, + reinterpret_cast(data.data()), + data.size() * sizeof(float)); + + fmt::print("Compressed {} bytes -> {} bytes ({:.1f}%)\n", + data.size() * sizeof(float), comp_size, + 100.0 * comp_size / (data.size() * sizeof(float))); +}