(только) Для тех, кто заинтересован в немного более эффективном решении для систем x86 с поддержкой BMI2 (Intel Haswell или новее, AMD Excavator или новее):
mask = _bzhi_u32(-1,m)<
Инструкция bzhi
нули старших бит, начиная с заданной позиции бита. Собственные компиляции _bzhi_u32
этой инструкции. Тестовый код:
#include
#include
/* gcc -O3 -Wall -m64 -march=haswell bitmsk_mn.c */
unsigned int bitmsk(unsigned int m, unsigned int n)
{
return _bzhi_u32(-1,m)<
Выход:
$./a.out
k= 000FE000
Кодовый фрагмент _bzhi_u32(-1,m)<
movl $-1, %edx
bzhi %edi, %edx, %edi
shlx %esi, %edi, %eax
Который является одной инструкцией меньше чем коды @Jonathan Leffler и @Darius Bacon . На процессорах Intel Haswell или новее оба bzhi
и shlx
имеют латентность 1 цикл и пропускную способность 2 за цикл. На AMD Ryzen эти две инструкции имеют пропускную способность 4 за цикл.
Возможно, это проблема: в вашей записной книжке хранятся подписи ( https://jupyter-notebook.readthedocs.io/en/stable/security.html ), которые сообщают браузеру, доверять ли какому-либо javascript и HTML при открытии ноутбука. Он хранит их в базе данных SQLite. Кажется, что если этот файл базы данных находится в NFS, могут возникнуть проблемы с блокировкой:
Так что это может сработать, чтобы переместить файл в локальную папку на сервере, и указать NotebookNotary.db_file
туда.