Por lo tanto, estoy usando matrices booleanas cuya dimensión suele ser un par de docenas a un par de cientos, por lo general son bastante dispersas (solo unos 2-4 no ceros en la mayoría de las filas y columnas) y mi tiempo de ejecución está fuertemente dominado por sus multiplicación.¿Cuál es la forma más rápida de representar y multiplicar matrices booleanas dispersas?
¿Qué estructura de datos se adapta mejor para acelerar la multiplicación en estas circunstancias?
Actualmente estoy almacenando cada matriz en un conjunto de bits contiguos (matriz de longitudes de 64 bits) por filas, y multiplicándolas con básicamente el algoritmo estándar, solo aceleré para la dispersión con la operación rápida de localizar el siguiente conjunto bit en una palabra, y con vectorización por operaciones de máscara de bits.
¿Debo quizás usar alguna representación dispersa?
¿Qué quiere decir con "dimensión es generalmente un par de docenas a un par de cientos"? Eso suena más como una cantidad de elementos (o longitud de una dimensión) que la dimensión (es decir, el número de coordenadas que necesita especificar para seleccionar un elemento). –