В настоящее время я работаю с матрицей 5 x 5 с использованием функций SSE.Intel SSE Intrinsics _mm_load_si128 segmentation fault,
Я пытаюсь загрузить целые значения x4 128bit в регистры XMM следующим образом,
#include <emmintrin.h>
#include <smmintrin.h>
//===================================== Initialising matrix
int* aligned_matrix;
posix_memalign((void **)&aligned_matrix, 16, sizeof(int) * 25);
for (ssize_t i = 0; i < 25; i++)
aligned_matrix[i] = 2; // uniform value of 2 assigned
}
return aligned_matrix;
}
//===================================== then,
__m128i xmm8, xmm9;
xmm8 = _mm_load_si128((__m128i *)(aligned_matrix)); // read 4 from first row
// this line below is where the segmentation fault occurs...
xmm9 = _mm_load_si128((__m128i *)(aligned_matrix + 5)); // 4 from next row
У меня такое ощущение, что это может быть связано с выравниванием памяти или что-то, но ... я могу «т точка шпилька, куда я иду неправильно с этим ...
Я использую следующие,
лязг -msse -msse2 -msse4.1
* Примечание - причина, почему я «м добавление aligned_matrix + 5 - читать следующие 4 элемента из второй строки матрицы 5x5.
Почему это имеет значение? Все, что я пытаюсь сделать, это прочитать первые 4 элемента первой строки, затем перейти к следующей строке и прочитать следующие 4 элемента. Чтобы перейти к следующей строке, мне нужно «aligned_matrix + 5», так как это 5 x 5 матриц. – lukieleetronic
ОК - это неясно из вашего вопроса - ответ обновлен. –
Ничего себе это работает! большое спасибо. Кстати, если я использую невыровненную нагрузку, будет ли отрицательное влияние на производительность по сравнению с выровненной нагрузкой? – lukieleetronic