Привет! Я обрабатываю матрицу MxN данных (выделена одним блоком данных через просто malloc), скажем объёмом 5 Гб. Каждая строка может обрабатываться независимо от других, и это похоже отличный кандидат на использование OpenMP:
const int M = ...;
const int N = ...;
int *data = malloc(M * N * 4);
#pragma omp parallel for
for (m = 0; m < M; m++) {
const int *line = data + N * m * 4;
consume_line(line, N);
}
С использованием OpenMP вижу ускорение в три раза на 8-ми ядерном CPU. Как-то маловато. От системы не зависит, даже на MSVC результат схож с GCC на Ubuntu.
Вопрос - а что ж 3x так мало? Можно ли ускорить ещё?