Плохая перфу из AOCC+AMD-FFTW в Linux с процессором AMD Genoa (по сравнению с Intel ICPX+MKL)C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Плохая перфу из AOCC+AMD-FFTW в Linux с процессором AMD Genoa (по сравнению с Intel ICPX+MKL)

Сообщение Anonymous »

У меня есть очень простой 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»