我有一个使用 xgboost 的项目。我们现在将项目转移到容器。但是使用pip安装后,它抛出以下错误:
Traceback (most recent call last):
File "restart_db.py", line 5, in <module>
from autoai.core.providers import GlobalEnrichmentProvider
File "/volumes/code/autoai/core/providers/__init__.py", line 1, in <module>
from .files_providers import CsvProvider, TsvProvider, ExcelProvider, FileProvider
File "/volumes/code/autoai/core/providers/files_providers.py", line 10, in <module>
from .base import BaseProvider, BaseInMemoryProvider
File "/volumes/code/autoai/core/providers/base.py", line 1, in <module>
from autoai.models.dataset_connection import JoinTypes
File "/volumes/code/autoai/models/__init__.py", line 5, in <module>
from .classifier import Classifier
File "/volumes/code/autoai/models/classifier.py", line 8, in <module>
from eli5 import explain_prediction
File "/volumes/dependencies/lib/python3.6/site-packages/eli5/__init__.py", line 53, in <module>
from .xgboost …Run Code Online (Sandbox Code Playgroud) 我需要弄清楚我可以提供给gcc的编译器/链接器指令,以便在指定-fopenmp时它不会自动链接libgomp.
原因是我正试图建立英特尔的MKL BLAS.MKL需要添加单独的英特尔库来处理多线程(例如,libmkl_intel_thread或libmkl_gnu_thread).但是,用于链接MKL和libgomp的库并不适用于包括我在内的每个操作系统.这迫使我链接libmkl_intel_thread,而libmkl_intel_thread又必须链接libiomp5.
虽然我能够构建我的包,但是一些二进制文件链接到libgomp和libiomp5.我不积极,这是造成问题,但也出现了一些事故,联动组合是可疑的,即使它不会导致崩溃的肯定是一个可怕的低效率.
我正在尝试使用gcc 4.9.1.
不幸的是,避免-fopenmp不是一种选择.原因是这是用于编译由几个子包组成的相当大的包,其Makefile不是最好的形状,并且可以在以后编译来自其他源(插件)的其他包.强制通用编译器/链接器指令并不困难.但是,启用--enable-openmp会激活-fopenmp和定义用于触发与多线程相关的代码的定义.试图将三者(--enable-openmp,-fopenmp和链接到--enable-openmp的代码)分开是不可行的.
我查看了手册页,我没有看到任何允许选择openmp库的gcc指令.英特尔的论坛有一个非常古老的讨论,他们建议在-fopenmp之后立即指定一个静态库,然后是--as-needed.这似乎非常摇摇晃晃,并且还有很多潜在的干扰插件包.llvm-openmp似乎在某一点上考虑了-fopenmp = libiomp5指令,但它似乎已经在3.5版本中被删除了,我试图使用gcc.
谢谢.
我在使用 #pragma omp parallel 时遇到问题
基本上我有数百个 DNA 序列,我想用一种称为 NNLS 的算法来运行它们。
我认为并行执行会给我带来相当好的速度,因此我应用了 #pragma 运算符。
当我顺序运行它时,没有问题,结果很好,但是当我使用 #pragma omp parallel 运行它时,我在算法中遇到了段错误(有时在不同的点)。
#pragma omp parallel for
for(int i = 0; i < dir_count; i++ ) {
int z = 0;
int w = 0;
struct dirent *directory_entry;
char filename[256];
directory_entry = readdir(input_directory_dh);
if(strcmp(directory_entry->d_name, "..") == 0 || strcmp(directory_entry->d_name, ".") == 0) {
continue;
}
sprintf(filename, "%s/%s", input_fasta_directory, directory_entry->d_name);
double *count_matrix = load_count_matrix(filename, width, kmer);
//normalize_matrix(count_matrix, 1, width)
for(z = 0; z < width; z++) …Run Code Online (Sandbox Code Playgroud) OpenMP 规范从 5.0 版开始定义了OMPT接口,以允许外部工具查询 openmp 运行时。
我想尝试一下,但我真的很困惑主流编译器实际上如何支持这一点。
GCC-11 声称扩展了对 openmp 5.0 的支持,但关于 OMPT,我找不到相应的ompt.h头文件(在我的例子中,Ubuntu 包libgcc-11-dev提供了omp.h)。
clang-12 确实提供了ompt.h(package ),但是示例程序libomp-12-dev的编译失败,第一个错误是,并且实际上在.unknown type name 'ompt_invoker_t'ompt.h
我不清楚目前的支持状况。我找不到 GCC 的准确状态,而 clang 提供了此信息https://clang.llvm.org/docs/OpenMPSupport.html,从中我无法弄清楚大部分完成的背后是什么。
谁能帮我找到最新信息或任何有关此的提示?
我一直在尝试使用gcc --version 4.9.4编译一个使用OpenMP的程序
Run Code Online (Sandbox Code Playgroud)> g++ -std=c++11 -o a.exe -fopenmp ./file.cpp > ./a.exe./a.exe:/usr/lib64/libgomp.so.1:找不到版本"GOMP_4.0"(./a.exe要求)
我有一个名为"/usr/lib64/libgomp.so.1"的文件,我该如何解决?
当我运行以下示例代码时:
#include "stdio.h"
#include <omp.h>
int main(int argc, char *argv[])
{
#pragma omp parallel
{
int NCPU,tid,NPR,NTHR;
/* get the total number of CPUs/cores available for OpenMP */
NCPU = omp_get_num_procs();
/* get the current thread ID in the parallel region */
tid = omp_get_thread_num();
/* get the total number of threads available in this parallel region */
NPR = omp_get_num_threads();
/* get the total number of threads requested */
NTHR = omp_get_max_threads();
/* only execute this on the master …Run Code Online (Sandbox Code Playgroud)