Задать вопрос
@ehevnlem
Программирую с 1975, в интернете с 1993.

Как реализовать на с или assembler асинхронную выборку из RAM?

1 CPU обращается к ram
2 пока происходит выборка CPU выполняет какие-то другие операции , например, обращается к другим ячейкам ram
  • Вопрос задан
  • 246 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как реализовать на с или assembler асинхронную выборку из RAM?

Например так. Это часть реализации memcpy для MIPS. Этот код не выглядит асинхронным, но написан именно так (сначала групповая загрузка в разные регистры, потом изменение базового адреса загрузки, потом групповое сохранение, потом изменение базового адреса сохранения) с рассчётом на то, что процессор сможет, в том числе, перекрыть во времени операции загрузки, арифметики и сохранения данных.
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
Вы уже разобрались с тем, как работает L1 и L2 кеширование и как работают многопоточные программы?
Или не очень понятно, что вы подразумеваете под "CPU обращается в рам, а в это время выполняет другие операции"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@forspamonly2
переупорядочивание выполнения (out of order execution) процессор выполняет и так, то есть он сам будет по возможности чем-то другим заниматься, пока грузит данные из памяти. писать код так, чтобы он для этого был оптимален - отдельный навык, которым сейчас мало кто владеет, потому что им в совершенстве овладели компиляторы.

но если трактовать ваш вопрос буквально, то у x86 (точнее в наборах команд sse и avx) есть целое семейство команд для префетча данных в разные уровни кэша:

PREFETCHT0 - prefetch data into all levels of the cache hierarchy
PREFETCHT1 - prefetch data into level 2 cache and higher
PREFETCHT2 - prefetch data into level 2 cache and higher
и аналогичные avx-овские VPREFETCH(0-2) для чтения и VPREFETCHE(0-2) для записи.

в сишном коде это делается через intrinsic функцию _mm_prefetch

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

Войдите, чтобы написать ответ

Похожие вопросы