Почему встроенные функции ARM NEON не работают быстрее, чем простой C++, для поиска легальных ходов Отелло?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему встроенные функции ARM NEON не работают быстрее, чем простой C++, для поиска легальных ходов Отелло?

Сообщение Anonymous »

Я написал метод с помощью NEON для ускорения моего кода для игрового движка Othello.
Я ожидал ускорения от векторов SIMD, но не получил прироста скорости. нада :-(

Я запускаю это на M3 с Xcode 16, Clang/LLVM 16, с

Код: Выделить всё

-Ofast -fomit-frame-pointer -ffast-math
Я тестирую свою программу на реальном примере игры ±1/2 часа или более миллиарда вызовов
Это всего лишь простые инструкции, и, или, сдвиг... на 64 битах
Я не понимаю... как мне запрограммировать этот метод для повышения скорости?
исходный код:

Код: Выделить всё

unsigned long long RXBitBoard::get_legal_moves(const unsigned long long p_discs, const unsigned long long o_discs) {

const unsigned long long inner_o_discs = o_discs & 0x7E7E7E7E7E7E7E7EULL;

/* direction W */
unsigned long long
flipped  = (p_discs >> 1) & inner_o_discs;
flipped |= (flipped >> 1) & inner_o_discs;

unsigned long long adjacent_o_discs = inner_o_discs & (inner_o_discs >> 1);

flipped |= (flipped >> 2) & adjacent_o_discs;
flipped |= (flipped >> 2) & adjacent_o_discs;

unsigned long long legals = flipped >> 1;

//    /* direction _E*/
//    flipped  = (p_discs > 16) & adjacent_o_discs;
flipped |= (flipped >> 16) & adjacent_o_discs;

legals |= flipped >> 8;

/* direction N */
flipped  = (p_discs  7);

flipped |= (flipped >> 14) & adjacent_o_discs;
flipped |= (flipped >> 14) & adjacent_o_discs;

legals |= flipped >> 7;

/* direction SW */
flipped  = (p_discs  9);

flipped |= (flipped >> 18) & adjacent_o_discs;
flipped |= (flipped >> 18) & adjacent_o_discs;

legals |= flipped >> 9;

/* direction SE */
flipped  = (p_discs 

Подробнее здесь: [url]https://stackoverflow.com/questions/79079623/why-arm-neon-intrinsics-are-not-faster-than-plain-c-for-finding-legal-othello[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ARM NEON: как реализовать логику типа mm_mask_compress?
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • ARM NEON: как реализовать логику типа mm_mask_compress?
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как эффективно загружать и хранить данные для новых инструкций AVX-VNNI и Arm Neon MMLA?
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Ускорение умножения матрицы-вектора с помощью ARM Neon Intrinsics на Raspberry Pi 4
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Являются ли встроенные функции mongo быстрее, чем функции в Java?
    Гость » » в форуме JAVA
    0 Ответы
    40 Просмотры
    Последнее сообщение Гость

Вернуться в «C++»