2017-11-03 11 views
-2

이것이 알려진 문제인지 궁금합니다. 그렇지 않다면이 경험을 가진 사람이 누구이며 수정 프로그램을 찾을 수있는 사람이 있습니까?고정 크기 행렬의`std :: vector '를 사용할 때 Ivy Bridge에서 AVX가있는 고유 segfaults

코어 3.3-700에서 Fedora 25의 GCC 6.4를 사용하여 Eigen 3.3.4를 사용하여 수치 계산 코드를 작성합니다. 내 proc/cpuinfo는 AVX가 있어야한다고 말합니다. 두 가지 빌드를 시도했습니다. 1 빌드 :

g++ -std=c++14 -O3 -m64 -mavx 

2를 구축 :

g++ -std=c++14 -O3 -m64 -msse4.2 

빌드 2 개 실행 잘. 그러나 빌드 1을 시도 할 때 inverse() 메서드뿐만 아니라 정사각형 고정 크기 행렬에 대해 Zero 함수에서 segfault를 얻습니다. 무슨 일이 벌어 질지에 관해서는 어떤 조언도 부탁드립니다.

EDIT : 저는 매우 중요한 세부 사항 하나를 잊어 버렸습니다. 실제로 고정 된 크기의 고유 행렬 std::vector을 사용하고있었습니다.

+2

소리가 정의되지 않은 동작입니다. [mcve]를 게시 할 수 있습니까? – wally

답변

1

고정 크기 행렬의 std::vector을 사용한다는 사실이 핵심이었습니다. 최소한의 예제 인 @rex에 대한 요청에 대해 대단히 감사드립니다. 예제를 준비하면서 다음을 발견했습니다.

큰 입력 크기 (행렬이 포함 된 std::vector)의 경우 Eigen이 런타임 오류를 발생시켜 this 사이트로 연결됩니다. 지침에 따라 문제가 해결되었습니다.

기본적으로 표준 할당자가있는 std::vector은 고정 크기 배열 연산의 벡터화에 대한 Eigen의 정렬 요구 사항을 엉망으로 만드는 것처럼 보입니다. Eigen이 제공 한 aligned_allocator을 사용하면 문제가 해결됩니다.