Виправити помилку у використанні SIMD (SSE i AVX) C++
500 UAHКод весь написаний, треба тільки у двох методах виправлення зробити: який рахує за допомогою SSE, який рахує за допомогою AVX.
Є імплементація алгоритму на чистому CPU, яка працює правильно (це метод computeConvolutionOutputCPU).
Сам алгоритм наступний:
Помилка вже також відома, про неї написали на stackoverflow наступні два коментарі з розбором проблеми і навіть вирішенням!!!
1) "*(pInputSignal + i - j) is incorrect in case of SSE, because it's not an i-j offset away from current value, it's (i-j) * 4 . THe thing is, as I remember it, the idea of using pointer that way is incorrect unless intrinsics had changed since then - in my time one had to "load" values into an instance of __m128 in this case, as H(J) and X(I-J) are in unaligned location (and sequence breaks). "
2) "Since you care about individual floats and their order, probably best to use const float*, with _mm_loadu_ps instead of just dereferencing (which is like _mm_load_ps). That way you can easily do unaligned loads that get the floats you want into the vector element positions you want, and the pointer math works the same as for scalar. You just have to take into account that load(ptr) actually gets you a vector of elements from ptr+0..3."
Необхідно виправити помилки, а саме правильно реалізувати адресацію елементів (вони ідентичні - тобто якщо напишете правильно в одному, то інший аналогічно робиться) в методах computeConvolutionOutputSSE і computeConvolutionOutputAVX
Після запуску коду в результаті останньої перевірки на рівність трьох файлів (від CPU, від SSE, від AVX) має виявитись, що вони всі рівні (даний метод вже написаний), ну і відповідно має вийти так, що SSE є рахує в рази швидше, ніж CPU, a AVX - в рази швидше від SSE. (воно так зараз і є, але результати неправильні).
Додатки 1
Актуальні фриланс-проєкти в категорії C та C++
Розробка Minecraft Java Seed Map / Seed Viewer для сайтуРозробка Minecraft Java Seed Map / Seed Viewer для сайтуОпис проєкту Потрібно розробити browser-based інструментMinecraft Java Seed Map / Seed Viewer, який буде працювати на нашому сайті та дозволятиме користувачу ввести seed Minecraft Java Edition і переглянути інтерактивну… C та C++, HTML та CSS верстання ∙ 13 днів 4 години тому ∙ 17 ставок |

