LINUX.ORG.RU

Распараллелить алгоритм


0

0

Есть вектор, элементы которого могут иметь значение 0 или 1. Алгоритм бежит по вектору от начала до конца, для каждого не нулевого элемента i вычисляет f(i) = {j_k}, среди которых не будет i, и записывает в каждый j_k элемент значение 1, не разбираясь, что было в этом элементе до того. Функция f такова, что f(f(i)_k) = {n_k}, среди которых попадётся i.

Если параллелить этот алгоритм тупо, так что каждый поток бежит по своей части вектора и записывает во все остальные части, то надо много блокировок на чтение-запись для элементов вектора. Однако, если вообще не делать блокировок, то результат гарантировано будет правильный ввиду свойств функции f, и логики алгоритма. Тем не менее, без блокировок формально будут race-ы.

Почему-то мне думается, что можно сделать алгоритм без блокировок, без гонок и без перерасхода памяти...

P.S. Алгоритм имеет отношение к симметризации шаблона разреженной матрицы.


Ответ на: комментарий от yz

тогда четко напиши области определения своих функций. Определись какой у тебя массив, одномерный или двумерный. Потому что так как сейчас есть это сплошной type mismatch.

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.