根据底层的计算机体系结构的不同,数据共享可以有不同的形式。在分布存储的计算机系统上,数据开始时分布在各个处理器上,数据共享是通过在处理器之间发送和接收消息来实现的,也就是说,如果一个处理器需要另外一个处理器上的数据(它拥有的或者是它计算处理的数据),可以通过接收包含这些数据的消息来得到它们。同样的,如果其它的处理器向它申请数据,它也需要把自己的数据通过消息来发送给其它的处理器。在这样的方式下,数据共享的开销是显式的,最小化数据共享的开销等同于减少通信的额外开销。

  而在共享存储器的计算机系统中,数据可以通过对存储器系统的直接读写来进行访问。这种方式下,各处理器对数据的访问具有相同的权力(但代价有可能不同:对大多数的可扩展的共享存储器体系结构来说,虽然数据被包含在一个全局的地址空间里,可以直接访问,但在物理上,这些存储器分布在各个处理器上,这样,各处理器对存储器的访问速度不尽相同。而且,对其他处理器的存储器中数据的频繁访问,也会造成处理器内部互连网络的压力,所产生的网络冲突有可能给系统带来很大的额外开销)。当多个处理器需要对相同的共享数据进行修改的时候,数据共享的额外开销会变得很大。在这种情况下,为了保证计算的正确性,必须保证在任何时间只能有一个处理器可以修改共享的数据,而且,在修改完成之前,也不能读取这个数据(否则,读取的数据有可能错误),这通常通过互斥协议比如锁和信号量的方法来实现。这些协议增加了数据共享的开销,最坏的情况下,可能会使计算串行化,从而导致性能的恶化。

  即使是对UMA结构的共享存储计算机系统,数据共享的代价也可能会很高,因为这时也存在访问冲突和互斥协议的问题。注意,这些额外的数据访问开销只有并行程序才会产生,它们是并行程序由于交互而产生的开销。

  任务访问共享数据的开销可以分解为两个部分,一是访问的启动开销。根据体系结构的不同,这部分开销对应的实际开销也不同。对共享存储的体系结构来说,这部分开销对应于存储器访问延迟,而对分布存储的系统来说,这部分开销对应于消息的启动时间。二是数据的传输时间,这部分时间是数据实际达到本地所需要的时间。它和数据的大小有关,而且,正如前面讨论的,它和互联网络的带宽以及网络的状况有关。

  需要注意的是,即使我们讨论的是共享存储计算机上的交互开销,上面的开销模型也适用于由于动态负载平衡而带来的任务传递,或者由于任务同步所需要的交互。

  要在算法中最小化数据共享的开销,通常要涉及到任务分解,任务分配,初始任务分配,以及数据共享操作的合理调度等方方面面。不同的并行算法需要不同类型的交互,这使得对不同类型的算法需要对交互作不同的处理,同时交互操作本身的特性也不相同。