Mehrere threads und CPU-cache

Ich die Umsetzung einer image-filtering operation in C mit mehreren threads und so optimiert wie möglich. Eine Frage habe ich aber: Wenn ein Speicher zugegriffen wird, die von thread 0, und parallel, wenn Sie den gleichen Speicher zugegriffen wird, der durch die thread-1, wird es aus dem cache ? Diese Frage ergibt sich aus der Möglichkeit, dass diese zwei threads ausgeführt werden konnte in zwei unterschiedlichen Kernen der CPU. Also eine andere Weise, dies auszudrücken, ist: alle Kerne teilen sich die gleiche gemeinsame cache-Speicher ?

Angenommen ich habe ein Speicher-layout wie in der folgenden

int Ausgabe[100];

Angenommen es sind 2 CPU-Kerne und damit ich spawnen zwei threads arbeiten gleichzeitig. Ein Schema könnte sein, teilen den Speicher in zwei Stücke, und 50-99 0-49, und lassen Sie jeden Faden der Arbeit auf jedem Stück. Eine andere Möglichkeit könnte sein zu lassen, thread-0 Arbeit auf auch Indizes, wie 0 2 4 und so weiter.. während der andere thread die Arbeit auf ungeraden Indizes wie 1 3 5 .... Diese Technik später einfacher zu implementieren ist (speziell für 3D-Daten), aber ich bin nicht sicher, ob ich verwenden könnte, den cache effizient diese Weise.

  • Am Ende, dieses wissen wird nicht viel helfen. Obwohl ich bin damit einverstanden, dass in der Lage zu interpretieren, Beobachtungen entsprechend, um das wissen von der CPU Innereien ist gut, am Ende sind Sie unten, um zu Messen, was schneller ist, und das anzuwenden, was Sie beobachtet, egal ob es passt in jede Theorie.
  • Ich sehe keinen Grund, dieses hat eine c++ tag (Sie haben dies Schreibe, in C, Sie sagte), so dass ich Sie entfernt. Fühlen Sie sich frei, mich anzubrüllen, wenn das war dumm.
Schreibe einen Kommentar