Я реализую операцию фильтрации изображений в C, используя несколько потоков и делая ее максимально оптимизированной. У меня есть один вопрос: если к памяти обращается поток-0, и одновременно, если к одной и той же памяти обращается поток-1, получит ли она ее из кеша? Этот вопрос связан с возможностью того, что эти два потока могут работать в двух разных ядрах ЦП. Итак, еще один способ сделать это: все ли ядра имеют общую память?
Предположим, что у меня есть макет памяти, такой как
int output [100];
Предположим, что есть 2 ядра процессора, и поэтому я запускаю два потока для совместной работы. Одна из схем может заключаться в том, чтобы разделить память на две части: 0-49 и 50-99, и каждый поток работает на каждом фрагменте. Другим способом может быть то, что thread-0 работает с четными индексами, например 0 2 4 и т.д., Тогда как другой поток работает с нечетными индексами, такими как 1 3 5.... Этот более поздний метод проще реализовать (специально для 3D данные), но я не уверен, могу ли я эффективно использовать кеш таким образом.