Поскольку ваша проблема с нулевым указателем уже решена, почему бы не маленький совет по производительности;) Одна вещь, которую вы могли бы попробовать, - это забытый в кэше алгоритм.Для матриц 2k x 2k я получаю 24,7 секунды для варианта с рекурсивным кешем и 50,26 с тривиальным итеративным методом на однопоточном e8400 @ 3 ГГц (и то, и другое можно было бы оптимизировать, очевидно, некоторые лучшие аргументы для компилятора и уверенность в SSE)используется и т. д.).Хотя 500x500 довольно мало, поэтому вам придется попробовать, если это даст вам заметные улучшения.
Рекурсивный обычно проще сделать многопоточным.
О, но самое важное, так как выпишешь в c #: читай this - это для java, но то же самое должно применяться для любого современного JIT ..