Já jsem v současné době snaží zlepšit výkon vícevláknových FFTW provádění. V dokumentaci fftw3 jsem četl, že pro nejlepší možný výkon, fftw_malloc
funkce by měla být použita k přidělení v - a výstup dat z DFT.
Od té doby jsem jednání s velkými 3D pole velikost 256*256*256 musím je vytvořit na haldě s
const unsigned int RES = 256;
std::complex<double>(*V)[RES][RES];
V = new std::complex<double>[RES][RES][RES];
A po inicializaci jsem vytvořit vícevláknové (in-place) fftw_plans pro 3D DFT transformace podle
int N_Threads = omp_get_max_threads();
fftw_init_threads();
fftw_plan_with_nthreads(N_Threads);
fftw_complex *input_V = reinterpret_cast<fftw_complex*>(opr.V);
fftw_plan FORWARD_V = fftw_plan_dft_3d(RES, RES, RES, input_V, input_V, FFTW_FORWARD, FFTW_MEASURE);
fftw_plan BACKWARD_V = fftw_plan_dft_3d(RES, RES, RES, input_V, input_V, FFTW_BACKWARD, FFTW_MEASURE);
Má otázka nyní je: Jak mohu vytvořit tyto plány pomocí fftw_malloc
místo toho ?
V fftw3 dokumentace mohu jen najít
fftw_complex *in;
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
což chápu jako 1D příklad. Mám projekt moje 3D pole nebo je použití fftw_malloc
není možné/vhodné v tomto případě?
fftw_malloc
velení bych přidělit paměť, ale to by ještě musel inicializovat. Takže vytvořit plán, tak by měl také změnit svůjV[RES][RES][RES]
pole do jediného-dimenzionální row-major formátu , jako je tofftw_malloc
?