Обычно я делаю такие вещи в FORTRAN, лично мне нравится писать алгоритм, включающий в себя массив больших измерений в FORTRAN в качестве библиотеки, и выполнять управление потоками в C. Хотя 3D все еще легко управляем в C, вам нужно очень осторожно с указателями, вот рабочий пример, это valgrind clean.
#include <stdio.h>
#include <stdlib.h>
float ***myarray(int l, int m, int n)
{
float **ptr = malloc(sizeof(float*)*(l+l*m));
float *data = malloc(sizeof(float)*l*m*n);
float **p1 = ptr, **p2 = ptr+l;
for(int i=0; i<l; i++) {
p1[i] = (float*)(p2+i*m);
for(int j=0; j<m; j++)
p2[i*m+j] = data+(i*m+j)*n;
}
return (float***)ptr;
}
void myfree(float ***a)
{
free(a[0][0]);
free(a);
}
int main()
{
float ***array = myarray(4,3,2);
for(int i=0; i<4; i++)
for(int j=0; j<3; j++)
for(int k=0; k<2; k++)
array[i][j][k] = i+j+k;
myfree(array);
return 0;
}