Оптимизация кода C ++ для производительности: мультипотчики, прогноз филиала, использование Mutex и эффективность кэшаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Оптимизация кода C ++ для производительности: мультипотчики, прогноз филиала, использование Mutex и эффективность кэша

Сообщение Anonymous »

Недавно я прочитал эту статью, в которой объясняется, как выборка процессора декодирует и выполняет инструкции с использованием циклов. Это заставило меня задуматься о том, как эти идеи применимы к производительности кода C++, особенно в сценариях, включающих использование ветвящегося кэша и многопоточность
я работал над этим фрагментом кода и заметил некоторые проблемы с производительностью на больших наборах данных, вот код
#include
#include
#include
#include

std::mutex mtx;
void complex_calculation(std::vector& data, int start, int end) {
for (int i = start; i < end; i++) {
if (data % 2 == 0) {
data = std::sqrt(data) + (data / 2) * 3;
} else {
data = std::pow(data, 3) - (data * 2) + 1;
}

if (data % 5 == 0) {
std::lock_guard lock(mtx);
data += 15;
}
}
}

int main() {
const int size = 1000000;
std::vector data(size, 1);
int num_threads = std::thread::hardware_concurrency();
std::vector threads;

int chunk_size = size / num_threads;
for (int t = 0; t < num_threads; t++) {
int start = t * chunk_size;
int end = (t == num_threads - 1) ? size : start + chunk_size;
threads.emplace_back(complex_calculation, std::ref(data), start, end);
}

for (auto& thread : threads) {
thread.join();
}
}
< /code>
Я задаюсь вопросом о нескольких вещах, и я бы очень ценил ваши отзывы или мысли < /p>
1 - Прогнозирование ветвления обрабатывает условия во внутреннем цикле эффективно или могут быть лучшие способы их написать? >
3 - использование Mutex, вероятно, создаст значительные узкие места для производительности при запуске по нескольким потокам? Повышение производительности этих расчетов? > Любой вход будет полезен


Подробнее здесь: https://stackoverflow.com/questions/793 ... on-mutex-u
Ответить

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

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

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

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

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