В зависимости от того, что вы написали и какие структуры данных он использует, трудно сказать, но:
I read that interrupts can't sleep, does that mean I am guaranteed that my handlers (hooks and read handlers) will be executed one after the other, or do I need to use locks to prevent simultaneous access to the same resources from different functions?
Хотя это правда, что прерывания не могут находиться в спящем режиме, вы также должны учитывать, что прерывание, взаимодействующее с этой структурой данных, также может одновременно выполняться на другом ЦП, или другое прерывание может накладываться поверх вашего текущего прерывания., временно отключив его от процессора. В любом случае вам нужно обработать случай взаимоблокировки и случай, когда два потока конкурируют за запись/чтение.
Так что да, нет оснований полагать, что только на основании того, что вы написали, вам не нужен какой-то механизм синхронизации. В зависимости от вашего конкретного случая синхронизация может оказаться проще, если вы отключите дальнейшие прерывания на этом ЦП (, например. в случае переменных percpu ).
Подходящий механизм будет зависеть от того, к чему вы защищаете доступ, и насколько длительным и дорогостоящим это может быть, хотя, поскольку вы выполняете прерывание,вы несколько ограничены в том, что можете выбирать только неблокирующие -примитивы.
Да, с PRIME должно быть возможно перенести рендеринг на выделенный графический процессор. Для графических карт NVIDIA также есть Bumblebee и NVIDIA Optimus .
Но это также зависит от вашего оборудования. Я думаю, что старое оборудование может не поддерживать технологию гибридной графики.