OpenMP + pybind11 (скомпилируется с помощью setup.py) на Mac и Linux ⇐ C++
OpenMP + pybind11 (скомпилируется с помощью setup.py) на Mac и Linux
У меня есть модуль Python, который я хочу сделать доступным как в macOS, так и в Linux, который использует код C++ с OpenMP. У меня проблемы с macOS (полагаю, Apple Clang не поддерживает OpenMP). У меня есть следующий код *.cpp, использующий этот пример:
#include #include // специфично для macOS с установленной libomp – как обобщить? #include "/usr/local/opt/libomp/include/omp.h" пространство имен py = pybind11; // тест OpenMP int sum_thread_ids(){ целая сумма = 0; #pragma omp параллельная общая(сумма) { спать(3); #pragma omp критично сумма += omp_get_thread_num(); } сумма возврата; } PYBIND11_MODULE(openmp_test, м){ m.def("get_max_threads", &omp_get_max_threads, "Возвращает максимальное количество потоков"); m.def("set_num_threads", &omp_set_num_threads, "Установить количество потоков"); m.def("sum_thread_ids", &sum_thread_ids, "Добавляет идентификаторы потоков"); } И затем setup.py имеет:
импортировать ОС из glob import glob из pybind11.setup_helpers импортировать Pybind11Extension из настройки импорта setuptools, find_packages импортировать имя_модуля cxx_std = int(os.environ.get("CMAKE_CXX_STANDARD", "20")) ext_modules = [ Pybind11Extension("openmp_test", sorted(glob("src/*.cpp")), cxx_std=cxx_std) ] настраивать( ... пакеты = find_packages (), install_requires=['pybind11'], python_requires='>=3.10', ext_modules=ext_modules ) Я устанавливаю в каталог модуля, содержащий setup.py, с помощью:
pip install . Компилируется без ошибок. Однако когда я пытаюсь использовать его в Python, я получаю:
>>>импорт openmp_test Traceback (последний вызов последний): Файл «», строка 1, в ImportError: dlopen(/Users/.../.pyenv/versions/3.11.2/lib/python3.11/site-packages/openmp_test.cpython-311-darwin.so, 0x0002): символ не найден в плоском пространстве имен ' _omp_get_max_threads' Что мне не хватает? И как я могу сделать это доступным как для macOS, так и для Linux?
У меня есть модуль Python, который я хочу сделать доступным как в macOS, так и в Linux, который использует код C++ с OpenMP. У меня проблемы с macOS (полагаю, Apple Clang не поддерживает OpenMP). У меня есть следующий код *.cpp, использующий этот пример:
#include #include // специфично для macOS с установленной libomp – как обобщить? #include "/usr/local/opt/libomp/include/omp.h" пространство имен py = pybind11; // тест OpenMP int sum_thread_ids(){ целая сумма = 0; #pragma omp параллельная общая(сумма) { спать(3); #pragma omp критично сумма += omp_get_thread_num(); } сумма возврата; } PYBIND11_MODULE(openmp_test, м){ m.def("get_max_threads", &omp_get_max_threads, "Возвращает максимальное количество потоков"); m.def("set_num_threads", &omp_set_num_threads, "Установить количество потоков"); m.def("sum_thread_ids", &sum_thread_ids, "Добавляет идентификаторы потоков"); } И затем setup.py имеет:
импортировать ОС из glob import glob из pybind11.setup_helpers импортировать Pybind11Extension из настройки импорта setuptools, find_packages импортировать имя_модуля cxx_std = int(os.environ.get("CMAKE_CXX_STANDARD", "20")) ext_modules = [ Pybind11Extension("openmp_test", sorted(glob("src/*.cpp")), cxx_std=cxx_std) ] настраивать( ... пакеты = find_packages (), install_requires=['pybind11'], python_requires='>=3.10', ext_modules=ext_modules ) Я устанавливаю в каталог модуля, содержащий setup.py, с помощью:
pip install . Компилируется без ошибок. Однако когда я пытаюсь использовать его в Python, я получаю:
>>>импорт openmp_test Traceback (последний вызов последний): Файл «», строка 1, в ImportError: dlopen(/Users/.../.pyenv/versions/3.11.2/lib/python3.11/site-packages/openmp_test.cpython-311-darwin.so, 0x0002): символ не найден в плоском пространстве имен ' _omp_get_max_threads' Что мне не хватает? И как я могу сделать это доступным как для macOS, так и для Linux?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение