AWS 批处理上的非法指令



我正在尝试提交一个演示作业进行批处理计算,以测试我是否可以正确使用python模块"cppyy"。

但是,我收到"非法指令"核心转储错误。 有趣的是,如果我在本地 ec2 实例上运行的容器(同一图像)上运行作业,我没有收到任何错误消息。

以下脚本(test.py用于入口点)python3 test.py

import cppyy

cppyy.cppdef(r'''
#include <cmath>
#include <vector>
#include <memory>
#include <iostream>

using namespace std;

namespace Test {
void test() {
cout << "test-yoyo-5" << endl;
unsigned long long timestamp = 1629072000081;
vector<shared_ptr<unsigned long long>> events;
events.push_back(make_shared<unsigned long long>(1629072000081));
for (auto &event: events) {
cout << "static_cast<double>(event->timestamp - timestamp): " << static_cast<double>(*event - timestamp) << endl;
}
}
}
''')
from cppyy.gbl import Test
Test.test()

核心转储错误如下

*** Break *** illegal instruction
test-yoyo-5
Generating stack trace...
0x00007f4812ecaf43 in <unknown> from /usr/local/lib/python3.9/site-packages/cppyy_backend/lib/libcppyy_backend.so
0x00007f48109bae39 in <unknown> from /usr/local/lib/python3.9/site-packages/libcppyy.cpython-39-x86_64-linux-gnu.so
0x00007f481098b879 in <unknown> from /usr/local/lib/python3.9/site-packages/libcppyy.cpython-39-x86_64-linux-gnu.so
0x00007f481098d249 in CPyCppyy::CPPMethod::Execute(void*, long, CPyCppyy::CallContext*) at /tmp/pip-install-vu_2b778/cpycppyy_c9bff3ea1a5d49d695ef46619c091741/src/CPPMethod.cxx:892 from /usr/local/lib/python3.9/site-packages/libcppyy.cpython-39-x86_64-linux-gnu.so
0x00007f481098782f in CPyCppyy::CPPFunction::Call(CPyCppyy::CPPInstance*&, _object* const*, unsigned long, _object*, CPyCppyy::CallContext*) at /tmp/pip-install-vu_2b778/cpycppyy_c9bff3ea1a5d49d695ef46619c091741/src/CPPFunction.cxx:90 from /usr/local/lib/python3.9/site-packages/libcppyy.cpython-39-x86_64-linux-gnu.so
0x00007f4810992fd1 in <unknown> from /usr/local/lib/python3.9/site-packages/libcppyy.cpython-39-x86_64-linux-gnu.so
0x000055e4b7135a2a in _PyEval_EvalFrameDefault + 0x6b8a from python3
0x000055e4b71f6184 in <unknown> from python3
0x000055e4b71f64aa in PyEval_EvalCode + 0x3a from python3
0x000055e4b72365ac in <unknown> from python3
0x000055e4b72385f0 in PyRun_SimpleFileExFlags + 0x1a0 from python3
0x000055e4b7138bef in <unknown> from python3
0x000055e4b7139290 in Py_BytesMain + 0x70 from python3
0x00007f4817d45d90 in <unknown> from /lib/x86_64-linux-gnu/libc.so.6
0x00007f4817d45e40 in __libc_start_main + 0x80 from /lib/x86_64-linux-gnu/libc.so.6
0x000055e4b7137e75 in _start + 0x25 from python3
*** Break *** illegal instruction
Generating stack trace...
0x00007f4812ecaf43 in <unknown> from /usr/local/lib/python3.9/site-packages/cppyy_backend/lib/libcppyy_backend.so
0x00007f48109bae39 in <unknown> from /usr/local/lib/python3.9/site-packages/libcppyy.cpython-39-x86_64-linux-gnu.so
0x00007f481098b879 in <unknown> from /usr/local/lib/python3.9/site-packages/libcppyy.cpython-39-x86_64-linux-gnu.so
0x00007f481098d249 in CPyCppyy::CPPMethod::Execute(void*, long, CPyCppyy::CallContext*) at /tmp/pip-install-vu_2b778/cpycppyy_c9bff3ea1a5d49d695ef46619c091741/src/CPPMethod.cxx:892 from /usr/local/lib/python3.9/site-packages/libcppyy.cpython-39-x86_64-linux-gnu.so
0x00007f481098782f in CPyCppyy::CPPFunction::Call(CPyCppyy::CPPInstance*&, _object* const*, unsigned long, _object*, CPyCppyy::CallContext*) at /tmp/pip-install-vu_2b778/cpycppyy_c9bff3ea1a5d49d695ef46619c091741/src/CPPFunction.cxx:90 from /usr/local/lib/python3.9/site-packages/libcppyy.cpython-39-x86_64-linux-gnu.so
0x00007f4810992fd1 in <unknown> from /usr/local/lib/python3.9/site-packages/libcppyy.cpython-39-x86_64-linux-gnu.so
0x000055e4b7135a2a in _PyEval_EvalFrameDefault + 0x6b8a from python3
0x000055e4b71f6184 in <unknown> from python3
0x000055e4b71f64aa in PyEval_EvalCode + 0x3a from python3
0x000055e4b72365ac in <unknown> from python3
0x000055e4b72385f0 in PyRun_SimpleFileExFlags + 0x1a0 from python3
0x000055e4b7138bef in <unknown> from python3
0x000055e4b7139290 in Py_BytesMain + 0x70 from python3
0x00007f4817d45d90 in <unknown> from /lib/x86_64-linux-gnu/libc.so.6
0x00007f4817d45e40 in __libc_start_main + 0x80 from /lib/x86_64-linux-gnu/libc.so.6
0x000055e4b7137e75 in _start + 0x25 from python3
static_cast<double>(event->timestamp - timestamp): 

您没有指定 cppyy 的版本,但很可能原因是预编译标头 (PCH)。 默认情况下,cpyy 使用-march=native标志,该标志启用(如果主机支持)AVX 等功能。如果随后将带有 PCH 的实例交付到不支持它的计算机上,则任何 JITted 代码仍可能使用 AVX b/c 编译时变量__AVX__该变量将被烘焙到其中。

(如果主机上可用,则旧版本的 cppyy 显式使用-mavx

在异构环境中运行时,您可以设置CLING_REBUILD_PCH=1来解决此问题,甚至可以CLING_STANDARD_PCH=none完全没有 PCH,因为 PCH 仅在从不同进程多次导入 cppyy 时才有意义(它只节省了启动时间)。

最新更新