Векторы ассигнаций и операций в цикле и распараллеливания с помощью OpenMP


Я использую этот кусок кода для вычисления кратковременного преобразования Фурье:

// Output pre-allocation
std::vector<std::vector<std::complex<T> > > y(nFft, std::vector<std::complex<T> >(nFrames, 0.0));

std::vector<T> xt;
std::vector<std::complex<T> > yt;
xt.reserve(nFft);
yt.reserve(nFft);

#pragma omp parallel for private(xt,yt)
for (unsigned int t = 0; t < nFrames; ++t) {
    const int offset = -((int) wSize/2) + t*nHop;

    // Extract frame of input data
    if (offset < 0) {
        xt.assign(x.begin(), x.begin() + offset + wSize);
        xt.resize(wSize, 0.0);
    }
    else if (offset + wSize > n) {
        xt.assign(x.begin() + offset, x.end());
        xt.resize(wSize, 0.0);
    }
    else
        xt.assign(x.begin() + offset, x.begin() + offset + wSize);

    // Apply window to current frame
    std::transform(xt.begin(), xt.end(), w.begin(), xt.begin(), std::multiplies<T>());

    // Zero padding
    std::rotate(xt.begin(), xt.begin() + wSize/2, xt.end());
    xt.insert(xt.begin() + wSize/2, nFft - wSize, 0.0);

    yt = fft(xt);  // Perform the FFT!

    #pragma omp critical
    {
        for (unsigned int f = 0; f < nFft; ++f)
            y[f][t] = yt[f];
    }
}

Есть что-то, что я могу улучшить, либо в стиле дизайна или выступлений, не жертвуя при этом читабельностью? Конечно, дело в том, чтобы улучшить свои навыки кодирования без применения каких-либо внешних библиотек!

Относительно XT и векторы ыть, я поставил их вне цикла, чтобы улучшить выступления в моно-резьбовой (для OpenMP-это отключено). В многопоточном, там копируются для каждого потока в любом случае (следовательно, использование частного близко).



1117
4
задан 19 декабря 2011 в 10:12 Источник Поделиться
Комментарии
1 ответ

Единственное, что стоит комментируя это имена идентификаторов может быть более значимым.


  • Короткие идентификаторы труднее найти при сохранении кода (больше ложных срабатываний).

  • Короткие идентификаторы, сделать это трудно, чтобы положить значение идентификатора.

2
ответ дан 19 декабря 2011 в 04:12 Источник Поделиться