summaryrefslogtreecommitdiffstats
path: root/content/zettel/1c2b1.md
blob: cb429857904416dd93810c49e4b21942a332c1ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+++
title = "Memory Aliasing"
author = "Yann Herklotz"
tags = []
categories = []
backlinks = ["1c2b"]
forwardlinks = ["1c7", "1c2c"]
zettelid = "1c2b1"
+++

One problem with scheduling, and list scheduling in particular as it is
a relatively simple scheduling model, is that loads and stores cannot be
scheduled correctly. This is because dependencies cannot be calculated
properly between loads and stores, so one cannot know if these were done
in parallel or not.

One solution is to use polyhedral analysis ([\#1c7]) with loads and
stores that have some kind of induction variable, as is present in loop
pipelining ([\#1c2c]).

The problem in C is that there is no aliasing information about
pointers, and they can therefore point to same memory location. However,
strict aliasing in GCC, for example, can allow for aliasing information
about pointers of different types, as GCC assumes that these cannot
point to the same data structure.

  [\#1c7]: /zettel/1c7
  [\#1c2c]: /zettel/1c2c