как использовать невременные (потоковые) инструкции хранения для хранения самоопределяемой структуры?
Я просто начинаю использовать инструкции невременного хранения для хранения некоторых типов данных в памяти (это может быть DRAM или NVM). Я просматриваю Руководство Intel Intrinsics для таких функций хранения и нахожу такие функции, как _mm_stream_si32, _mm_stream_si18, _mm_stream_si256 и т. Д. Кажется, что такие функции могут применяться только к некоторым видам целых чисел. Мой вопрос в том, что если я сам определяю определенный тип структуры, и ее размер может быть 1 КБ, 2 КБ ... Как я могу выполнять невременные (потоковые) хранилища для хранения таких структур в моей памяти (или наоборот, загрузка из памяти). На данный момент я могу придумать только один способ - преобразовать мою структуру в кусок целых чисел и применить невременное / потоковое сохранение / загрузку для каждого из приведенных целых чисел один за другим. Я думаю, что этот метод несколько неэффективен, есть ли более эффективный способ кодирования для достижения моей цели?
Кроме того, если я хочу сохранить большое количество таких самоопределяемых структур, нужно ли выдавать a после каждого невременного хранилища? Я не уверен в этом и задаюсь вопросом, могу ли я удалить инструкцию или просто выпустить ее
Большое спасибо за помощь.
1 ответ
Невременная потоковая передача не имеет ничего общего со структурами, это больше связано с загрязнением кеша._mm_stream_si32 сохраняет 32-битное целое число в памяти и записывает его непосредственно в память, если адрес еще не находится в кеше.
Обычная запись 32-битного целого числа будет извлекать 64-байтовую строку кэша и записывать в кеш, потому что ожидается, что другие данные рядом с записанным адресом также будут использоваться, и, следовательно, кеширование будет иметь преимущества. Но получение 64 байтов, которые не нужны в течение некоторого времени на шине, и поэтому вы можете намекнуть процессору, что в этом нет необходимости, используя специальные инструкции.
Это называется «невременным», потому что записанное значение не будет использоваться в ближайшем будущем и поэтому нет смысла кэшировать его. Это называется «потоковой передачей» только потому, что она является частью «расширения потокового SIMD», но не имеет ничего общего с потоками.
Подробности см. В «Руководстве по системному программированию Intel» и «Руководстве по оптимизации Intel».