diff --git a/CMakeMacros/OpenMP/Link.cmake b/CMakeMacros/OpenMP/Link.cmake
index f74f01f7278c166e03c170c37c381e48d7866d46..2a5ae6710f75a77602ab15f3818f3e211a3fb38b 100644
--- a/CMakeMacros/OpenMP/Link.cmake
+++ b/CMakeMacros/OpenMP/Link.cmake
@@ -4,6 +4,7 @@ find_package(OpenMP)
 if (OPENMP_FOUND)
 	set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
 	set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+    set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler ${OpenMP_CXX_FLAGS}")
 endif()
 
 endmacro(linkOpenMP)
diff --git a/src/GksGpu/CudaUtility/CudaRunKernel.hpp b/src/GksGpu/CudaUtility/CudaRunKernel.hpp
index 4945cca05e588a05a4638dc9e48f0deb796a4a15..545cd4114b74250adba3ce9a99bce96ff4d35c6f 100644
--- a/src/GksGpu/CudaUtility/CudaRunKernel.hpp
+++ b/src/GksGpu/CudaUtility/CudaRunKernel.hpp
@@ -35,6 +35,7 @@
 
 #include <string>
 #include <device_launch_parameters.h>
+#include <omp.h>
 
 #include "CudaUtility/CudaUtility.h"
 
@@ -49,7 +50,8 @@ void runKernel(KernelFunctor kernel, FunctionFunctor function, std::string devic
     }
     else
     {
-        for( uint index = 0; index < grid.numberOfEntities; index++ )
+#pragma omp parallel for
+        for( int index = 0; index < grid.numberOfEntities; index++ )
         {
             function( args..., index );
         }
diff --git a/targets/libs/GksGpu/3rdPartyLinking.cmake b/targets/libs/GksGpu/3rdPartyLinking.cmake
index 7898b5083e7de0f9e4bd3798732e402d75f5adef..efc76a96b9c09250b52fac5f25ccffc705377e2e 100644
--- a/targets/libs/GksGpu/3rdPartyLinking.cmake
+++ b/targets/libs/GksGpu/3rdPartyLinking.cmake
@@ -1,2 +1,4 @@
 include (${CMAKE_SOURCE_DIR}/${cmakeMacroPath}/Cuda/Link.cmake)
 linkCuda(${targetName})
+include (${CMAKE_SOURCE_DIR}/${cmakeMacroPath}/OpenMP/Link.cmake)
+linkOpenMP(${targetName})