Не могу через g++ собрать .cpp файл в .o
Всем здравствуйте. Проблема такая: мне нужно использовать нативный код в java, сам код на c++ я писал в visual studio и там он нормально работал, но вот когда пришло время его собирать, мне g++ выкатил много ошибок такого рода:
C:/msys64/ucrt64/lib/gcc/x86_64-w64-mingw32/12.2.0/include/avxintrin.h:909:1: error: inlining failed in call to 'always_inline' 'void _mm256_storeu_ps(float*, __m256)': target specific option mismatch
909 | _mm256_storeu_ps (float *__P, __m256 __A)
| ^~~~~~~~~~~~~~~~
MatrMultiply.cpp:27:29: note: called from here
27 | _mm256_storeu_ps(c + j + 0, _mm256_setzero_ps());
| ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Для сборки использовал эту команду:
g++ -c -I"C:\Program Files\Java\jdk-18.0.2.1\include" -I"C:\Program Files\Java\jdk-18.0.2.1\include\win32" MatrMultiply.cpp -o MatrMultiply.o
Сам фрагмент кода, который, по видимому, и вызывает эти ошибки:
void gemm_v2(int M, int N, int K, const float* A, const float* B, float* C)
{
for (int i = 0; i < M; ++i)
{
float* c = C + i * N;
for (int j = 0; j < N; j += 8)
_mm256_storeu_ps(c + j + 0, _mm256_setzero_ps());
for (int k = 0; k < K; ++k)
{
const float* b = B + k * N;
__m256 a = _mm256_set1_ps(A[i * K + k]);
for (int j = 0; j < N; j += 16)
{
_mm256_storeu_ps(c + j + 0, _mm256_fmadd_ps(a,
_mm256_loadu_ps(b + j + 0), _mm256_loadu_ps(c + j + 0)));
_mm256_storeu_ps(c + j + 8, _mm256_fmadd_ps(a,
_mm256_loadu_ps(b + j + 8), _mm256_loadu_ps(c + j + 8)));
}
}
}
}
Что нужно исправить и/или добавить в код и/или команду, чтобы всё это дело успешно собралось и я мог это использовать?)
P.S Пожалуйста без негатива, с нативным кодом, ровно как и с интринсиками имею дело впервые
P.P.S Полные файлы кода и лог:
.h file - https://pastebin.com/v7C8Jk7W
cpp file - https://pastebin.com/fzjTNQNq
Error - https://pastebin.com/jwjwU9JV
Ответы (1 шт):
Вы используете функцию которой нет в процессорах целевой архитектуры по умолчанию. Нужно указать опцию архитектуры через опцию компилятора "-m". В данном случае "-mavx".