У меня есть очень простой 3D-код преобразования FFT на месте с Multi-Tread Support FFTW и OpenMP. Я пытался получить наилучшую производительность в машине Linux (Ubuntu с процессорами AMD Genoa -2). Я построил его с AMD Compiler, AOCC 5.0 и AMD -FFTW (оптимизированный с OpenMP, AVX -512), как < /p>
clang ++ bend_fftw.cpp -o bend_fftw -fopenmp -march = znver4 -o3 -flto -mavx512 -ffast -math -l/opt/amd/amd -fftw/lib -lfftw3f_omp -lfftw3f -lm -i/opt/amd/amd -fftw/include
Regarding how to run it, I typically set
export omp_num_threads = 8 #FOR 1 CCD/NUMA
Экспорт omp_places = cores #only, используя физическое ядро
Экспорт omp_proc_bind = close < /p>
У меня также есть версия с интерфейсом MKL FFT, он построен с ICPX Intel и MKL-FFT. < /p>
ICPX STACK_MKL.CPP -O STACK_MKL -QOPENMP -O3 -0FAST -FFAST -MATH -AXCORE -AVX2, CORE -AVX512 -QMKL < /p>
Бинарный файл, построенный с ICPX+Mkl -fft. Лучше, чем это с AOCC+AMD-FFTW, почти в два раза быстрее.#include
#include
#include
int main() {
// Define the dimensions of the 3D array
const int NX = 1024;
const int NY = 1024;
const int NZ = 1024;
// Allocate memory for the input/output array
fftw_complex *data = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * NX * NY * NZ);
// Initialize the input data (example: fill with some values)
for (int i = 0; i < NX * NY * NZ; ++i) {
data[0] = i; // Real part
data[1] = 0; // Imaginary part
}
// Create FFTW plans for forward and backward transforms
fftw_plan forward_plan = fftw_plan_dft_3d(NX, NY, NZ, data, data, FFTW_FORWARD, FFTW_MEASURE);
fftw_plan backward_plan = fftw_plan_dft_3d(NX, NY, NZ, data, data, FFTW_BACKWARD, FFTW_MEASURE);
// Perform the forward FFT
fftw_execute(forward_plan);
// Perform the backward FFT
fftw_execute(backward_plan);
// Normalize the result of the backward FFT
for (int i = 0; i < NX * NY * NZ; ++i) {
data[0] /= (NX * NY * NZ);
data[1] /= (NX * NY * NZ);
}
// Print the results (optional)
for (int i = 0; i < NX * NY * NZ; ++i) {
printf("data[%d] = (%f, %f)\n", i, data[0], data[1]);
}
// Clean up
fftw_destroy_plan(forward_plan);
fftw_destroy_plan(backward_plan);
fftw_free(data);
return 0;
}
< /code>
Любые советы о том, как настроить этот код в amd genoa? < /p>
gq
Подробнее здесь: https://stackoverflow.com/questions/794 ... built-with
Плохая перфу из AOCC+AMD-FFTW в Linux с процессором AMD Genoa (по сравнению с Intel ICPX+MKL) ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как использовать Intel MKL в Armadillo для инвертирования неособой матрицы?
Anonymous » » в форуме C++ - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-