微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

箭头镶木地板的非法指令信号如何在没有 AVX2 的情况下使用 Conan 进行构建

如何解决箭头镶木地板的非法指令信号如何在没有 AVX2 的情况下使用 Conan 进行构建

我正在使用 conan 构建一个使用箭头镶木地板的库。我自己制作了箭头,因为我在柯南中心找不到包含镶木地板的版本:

在我的 conanfile.txt 中

[options]
arrow:shared=True  # I tried both shared and static
arrow:parquet=True
arrow:with_snappy=True
conan install .. --build=arrow

它在我的机器上正确构建和执行,但在 Jenkins 服务器中的测试失败

 SIGILL - Illegal instruction signal

thisthis 帖子来看,似乎存在架构冲突。确实存在差异:

詹金斯服务器

AVX supported
AVX2 not supported

我的电脑

AVX supported
AVX2 supported

此外,箭头代码优化到了 avx 级别。例如,在 byte_stream_split.h 中:

#if defined(ARROW_HAVE_AVX2)
template <typename T>
void ByteStreamSplitDecodeAvx2(const uint8_t* data,int64_t num_values,int64_t stride,T* out)
// Code

既然我没有添加对 AVX2 的支持,我如何告诉柯南在没有 AVX2 支持的情况下构建箭头,或者任何最低通用配置可能是什么?

或者有什么我应该看的完全不同的东西吗?

解决方法

在箭头中,使用的 SIMD 指令的级别由这些 cmake options

控制
  define_option_string(ARROW_SIMD_LEVEL
                       "Compile-time SIMD optimization level"
                       "SSE4_2" # default to SSE4.2
                       "NONE"
                       "SSE4_2"
                       "AVX2"
                       "AVX512")

  define_option_string(ARROW_RUNTIME_SIMD_LEVEL
                       "Max runtime SIMD optimization level"
                       "MAX" # default to max supported by compiler
                       "NONE"
                       "SSE4_2"
                       "AVX2"
                       "AVX512"
                       "MAX")

此选项用于here,检查是否传入预处理器定义

  if(CXX_SUPPORTS_AVX2 AND ARROW_RUNTIME_SIMD_LEVEL MATCHES "^(AVX2|AVX512|MAX)$")
    set(ARROW_HAVE_RUNTIME_AVX2 ON)
    add_definitions(-DARROW_HAVE_RUNTIME_AVX2 -DARROW_HAVE_RUNTIME_BMI2)
  endif()

您可以在运行 cmake 时通过 cmake 生成器指定此 cmake 选项 ARROW_SIMD_LEVELARROW_RUNTIME_SIMD_LEVEL。如果这不起作用,则意味着箭头尚不支持通过 conan 将其作为 cmake 配置,因此您可能需要更改构建流程才能手动运行 cmake

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?