для моего текущего проекта Мне нужно создать вектор из 256-битных векторов AVX. Я использовалSegfault при создании вектора векторов avx
myVector = vector<__m256d>(nrVars(), _mm256_set1_pd(1.0));
который работал нормально один раз, но после выполнения линии дважды он дает мне ошибку сегментации. Мне удалось найти следующий код:
vector<__m256d> temp;
__m256d entry = _mm256_set1_pd(1.0);
temp = vector<__m256d>(10, entry);
temp = vector<__m256d>(10, entry);
, который всегда производит ошибку сегментации. Не могли бы вы объяснить мне, почему это так и как я могу избежать проблемы в будущем?
спасибо!
P.S. Даже это не сработало бы:
myVector.clear();
myVector.reserve(nrVars());
for (size_t i=0; i<nrVars(); ++i) {
myVector[i] = _mm256_set1_pd(1.0);
}
И ответить на комментарии. Это полный пример, который производит Segfault:
#include <vector>
#include "immintrin.h"
using namespace std;
int main(int argc, char **argv) {
vector<__m256d> temp;
__m256d entry = _mm256_set1_pd(1.0);
temp = vector<__m256d>(10, entry);
temp = vector<__m256d>(10, entry);
return 0;
}
И читать на m256d и функций, которые я использую, пожалуйста, посмотрите на интел собственного веб-сайта (https://software.intel.com/sites/landingpage/IntrinsicsGuide/)
Недостаточная информация. Предоставьте полный, минимальный, воспроизводимый, компилируемый пример, демонстрирующий проблему, а не случайно выбранные фрагменты кода. С C++ ошибка может привести к повреждению памяти в одной части вашего кода, которая не отображается до тех пор, пока затронутая память не будет доступна в другом месте, вызвав segfault. Просто потому, что вы сталкиваетесь в определенном месте, абсолютно ничего не говорит об этой конкретной части кода. Несмотря на то, что вы разместили минимальную полезную информацию, довольно вероятно, что ваша ошибка находится где-то в другом месте. Добро пожаловать на C++. –
Вам нужно будет опубликовать дополнительную информацию относительно этого: '__m256d entry = _mm256_set1_pd (1.0);' .. более конкретно, что такое '__m256d' и что делает функция' _mm256_set1_pd' выглядеть/делать ?? – txtechhelp
__mm256d является стандартным типом в AVX, а _mm256_set1_pd является стандартным внутренним. Он отметил вопрос AVX и не должен объяснять основы. Если вы неопытны чем-то, не обвиняйте плакат. – MuertoExcobito