Skip to content

Commit 25a8085

Browse files
committed
Add OpenMP kernels
1 parent e788167 commit 25a8085

File tree

13 files changed

+92
-10
lines changed

13 files changed

+92
-10
lines changed

Diff for: .github/workflows/main.yml

+4
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ jobs:
9595
run: |
9696
mkdir -p build
9797
cd build
98+
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$LD_LIBRARY_PATH"
99+
echo $LD_LIBRARY_PATH
100+
find "$CONDA_PREFIX/lib"
101+
find "$CONDA_PREFIX/include/"
98102
cmake .. \
99103
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
100104
-DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX \

Diff for: CMakeLists.txt

+11-2
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ endif()
123123

124124
find_package(argparse REQUIRED)
125125
find_package(pugixml REQUIRED)
126-
126+
find_package(OpenMP)
127127
# Configuration
128128
# =============
129129

@@ -135,8 +135,15 @@ function(configure_kernel kernel)
135135
set(XEUS_CPP_PATH "$ENV{PATH}")
136136
set(XEUS_CPP_LD_LIBRARY_PATH "$ENV{LD_LIBRARY_PATH}")
137137
set(XEUS_CPP_RESOURCE_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/clang/${CPPINTEROP_LLVM_VERSION_MAJOR})
138-
set(XEUS_CPP_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include)
138+
set(XEUS_CPP_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include/)
139+
140+
if(${kernel} MATCHES "omp/$")
141+
set(XEUS_CPP_OMP "${OpenMP_CXX_FLAGS}")
142+
endif()
139143

144+
message(Configure_Kernel "${kernel}")
145+
message(CPP_OMP_FLAG "${XEUS_CPP_OMP}")
146+
message(CPP_INCLUDE_DIR "${XEUS_CPP_INCLUDE_DIR}")
140147
if (WIN32)
141148
string(REPLACE "\\" "/" kernel "${kernel}")
142149
string(REPLACE "\\" "/" XEUS_CPP_PATH "${XEUS_CPP_PATH}")
@@ -167,7 +174,9 @@ message("Configure kernels: ...")
167174
configure_kernel("/share/jupyter/kernels/xcpp11/")
168175
configure_kernel("/share/jupyter/kernels/xcpp14/")
169176
configure_kernel("/share/jupyter/kernels/xcpp17/")
177+
configure_kernel("/share/jupyter/kernels/xcpp17-omp/")
170178
configure_kernel("/share/jupyter/kernels/xcpp20/")
179+
configure_kernel("/share/jupyter/kernels/xcpp20-omp/")
171180

172181
# Source files
173182
# ============

Diff for: environment-dev.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@ dependencies:
2020
- jupyter_kernel_test>=0.4.3
2121
- nbval
2222
- pytest-rerunfailures
23-
- doctest
23+
- doctest
24+
- llvm
25+
- llvm-openmp

Diff for: share/jupyter/kernels/xcpp11/kernel.json.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"{connection_file}",
1111
"-resource-dir", "@XEUS_CPP_RESOURCE_DIR@",
1212
"-I", "@XEUS_CPP_INCLUDE_DIR@",
13-
"-std=c++11"@XEUS_CPP_OMP@
13+
"-std=c++11","@XEUS_CPP_OMP@"
1414
],
1515
"language": "cpp",
1616
"metadata": {"debugger": false}

Diff for: share/jupyter/kernels/xcpp14/kernel.json.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"-std=c++14",
1414
"-fno-exceptions",
1515
"-O2",
16-
"-v"@XEUS_CPP_OMP@
16+
"-v","@XEUS_CPP_OMP@"
1717
],
1818
"language": "cpp",
1919
"metadata": {"debugger": false}

Diff for: share/jupyter/kernels/xcpp17-omp/kernel.json.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"{connection_file}",
1111
"-resource-dir", "@XEUS_CPP_RESOURCE_DIR@",
1212
"-I", "@XEUS_CPP_INCLUDE_DIR@",
13-
"-std=c++17"@XEUS_CPP_OMP@
13+
"-std=c++17","@XEUS_CPP_OMP@"
1414
],
1515
"language": "cpp",
1616
"metadata": {"debugger": false

Diff for: share/jupyter/kernels/xcpp17/kernel.json.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"{connection_file}",
1111
"-resource-dir", "@XEUS_CPP_RESOURCE_DIR@",
1212
"-I", "@XEUS_CPP_INCLUDE_DIR@",
13-
"-std=c++17"@XEUS_CPP_OMP@
13+
"-std=c++17","@XEUS_CPP_OMP@"
1414
],
1515
"language": "cpp",
1616
"metadata": {"debugger": false

Diff for: share/jupyter/kernels/xcpp20-omp/kernel.json.in

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"display_name": "C++20 (xcpp+OpenMP)",
3+
"env": {
4+
"PATH":"@XEUS_CPP_PATH@",
5+
"LD_LIBRARY_PATH":"@XEUS_CPP_LD_LIBRARY_PATH@",
6+
"CPLUS_INCLUDE_PATH":"@CMAKE_CPLUS_INCLUDE_PATH@"
7+
},
8+
"argv": [
9+
"@XEUS_CPP_KERNELSPEC_PATH@xcpp",
10+
"-f",
11+
"{connection_file}",
12+
"-resource-dir", "@XEUS_CPP_RESOURCE_DIR@",
13+
"-I", "@XEUS_CPP_INCLUDE_DIR@",
14+
"-std=c++20","@XEUS_CPP_OMP@"
15+
],
16+
"language": "cpp",
17+
"metadata": {"debugger": false
18+
}
19+
}

Diff for: share/jupyter/kernels/xcpp20-omp/logo-32x32.png

1.48 KB
Loading

Diff for: share/jupyter/kernels/xcpp20-omp/logo-64x64.png

3.04 KB
Loading

Diff for: share/jupyter/kernels/xcpp20-omp/logo-svg.svg

+25
Loading

Diff for: share/jupyter/kernels/xcpp20/kernel.json.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"{connection_file}",
1111
"-resource-dir", "@XEUS_CPP_RESOURCE_DIR@",
1212
"-I", "@XEUS_CPP_INCLUDE_DIR@",
13-
"-std=c++20"@XEUS_CPP_OMP@
13+
"-std=c++20","@XEUS_CPP_OMP@"
1414
],
1515
"language": "cpp",
1616
"metadata": {"debugger": false

Diff for: test/test_xcpp_kernel.py

+25-2
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def test_continuation(self) -> None:
7070
if platform.system() != 'Windows':
7171
class XCppTests(jupyter_kernel_test.KernelTests):
7272

73-
kernel_name = 'xcpp20'
73+
kernel_name = 'xcpp20-omp'
7474

7575
# language_info.name in a kernel_info_reply should match this
7676
language_name = 'C++'
@@ -131,6 +131,29 @@ class XCppTests(jupyter_kernel_test.KernelTests):
131131
'mime': 'image/png'
132132
}
133133
]
134+
code_omp="""
135+
#include <omp.h>
136+
#include <iostream>
137+
#include <clang/Interpreter/CppInterOp.h>
138+
#include "llvm/Support/FileSystem.h"
139+
#include "llvm/Support/Path.h"
140+
std::string BinaryPath = GetExecutablePath(/*Argv0=*/nullptr);
141+
llvm::StringRef Dir = llvm::sys::path::parent_path(BinaryPath);
142+
Cpp::AddSearchPath(Dir.str().c_str());
143+
#ifdef __APPLE__
144+
std::string PathToTestSharedLib = Cpp::SearchLibrariesForSymbol("_omp_get_max_threads_", /*system_search=*/false);
145+
#else
146+
std::string PathToTestSharedLib = Cpp::SearchLibrariesForSymbol("omp_get_max_threads_", /*system_search=*/false);
147+
#endif // __APPLE__
148+
bool loaded=Cpp::LoadLibrary("PathToTestSharedLib.c_str())");
149+
std::cerr<<loaded<<std::endl;
150+
"""
151+
def test_xcpp_omp(self):
152+
self.flush_channels()
153+
reply, output_msgs = self.execute_helper(code=self.code_omp,timeout=20)
154+
self.assertEqual(output_msgs[0]['msg_type'], 'stream')
155+
self.assertEqual(output_msgs[0]['content']['name'], 'stderr')
156+
self.assertEqual(output_msgs[0]['content']['text'], '2')
134157

135158

136159
class XCppTests2(jupyter_kernel_test.KernelTests):
@@ -145,4 +168,4 @@ class XCppTests2(jupyter_kernel_test.KernelTests):
145168

146169

147170
if __name__ == '__main__':
148-
unittest.main()
171+
unittest.main()

0 commit comments

Comments
 (0)