Re: покритикуйте идею
От: LaptevVV Россия  
Дата: 22.07.24 06:06
Оценка: 35 (2)
PD>Рассмотрим следующую ситуацию
PD>Надо пропустить достаточно большое количество задач, каждая из которых выполняет большое количество арифметических операций. Иных действий в задачах нет.Все данные для всех задач уже размещены в ОП. Всего задач N, причем К типов , каждого типа nk задач.
PD>Например, надо 100 раз произвести обращение матрицы, 50 раз вычислить сумму ряда и 200 раз обработать некое графическое изображение. Тогда N=350, K=3, n1 = 100, n2 = 50, n3 = 200.
PD>Задачи независимы и выполнять их можно в любом порядке.
PD>Цель — пропустить все задачи за минимальное астрономическое время.
PD>Выполнение производится на машине с C-ядерным процессором (будем считать C=4)
PD>Никакие другие "тяжелые" вычисления на машине не производятся, так что загрузка процессора другими процессами близка к 0.

Выяснить, какие задачи из смеси к какому кешу обращаются можно только на основе реального отслеживания.
Как это отслеживать и можно ли — хрен знает, не интересовался.

Мой опыт такой.
Писал я задачу моделирования перколяционных процессов.
Матрицы там большие, 10000х10000 — это маленькая.
На моей 32-битной машине удалось достичь 40000х40000
Вторая засада — моделирование методом монте-карло.
Процесс повторяется от 1000 раз (а лучше 10000) и собирается полная статистика.
Естественно, я пытался выжать из 1 прогона максимальную скорость.
И вот заметил, что обработка матрицы по горизонтали в 4 (четыре) раза быстрее, чем по вертикали.
Сообразил, что это зависит от кеша.
Простое решение ускорило работу в 3 раза.
Просто предварительно переписал столбец в вектор.

Поэтому даже отслеживание мало что даст.
Ну, будет задача тормозиться по смене кеша.
И что с этим делать?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.