Крюк конкретная версия функции во время CINIT - PullRequest
0 голосов
/ 25 августа 2018

Я пишу математическую библиотеку SOA SIMD для компьютеров x64 для игрового движка. Я хочу заменить такие функции, как dot, на те, которые специализируются по ширине кодирования / simd во время инициализации. Это позволит избежать внутренних штрафов FPU на процессорах Intel при переключении между SSE и AVX и обратно. Указатели функций и настраиваемые разделы, выровненные по страницам, - это название игры, но могу ли я получить время выполнения, чтобы настроить его во время инициализации, а не лениво при первом вызове?

Я думаю, что здесь псевдо C

__cinit // puts function in init section, to be called at cinit

func __cinit select_dot();
f32 *(*dot)(f32 *, f32 *, int); // constant after cinit

f32 *dot32(f32 *, f32 *, int);
f32 *dot128(m128 *, m128 *, int); // 3 encodings: SSE, AVX, AVX512
f32 *dot256(m256 *, m256 *, int); // 2 encodings: AVX, AVX512
f32 *dot512(m512 *, m512 *, int); // 1 encoding: AVX512

// in cinit, repeat for all functions
dot = select_dot() // all calls to dot reroute through us now
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...