🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2051

Re: ‘lock–free’ aka odżywianie grupy asemblerowców :-)

#2051
From: Michoo
Date: Mon, 11 Jan 2010 12:10
59 lines
4002 bytes
minięty czas pisze:
> onegdaj ‟Michoo” rzecze:
>> koszt całości jest niewielki, mimo, że lock zaburza trochę przetwarzanie
>> strumieniowe (blokada magistrali)
>     raczej  nie  ma  gwarancji, że jednemu wątkowi się powiedzie w pier-
> wszym podejściu, chyba że w doborze instrukcji i ich ułożeniu uwzględnić
> docelową architekturę, by wydawało się, że dzięki jednoczesnemu przetwa-
> rzaniu kilku instrukcji przetworzy je w jednym cyklu.
Przeczytaj dokumentację intela, ok?

cmpxchg składa się z szeregu operacji mikrokodu oraz 2 dostępów do 
magistrali (wykonywanie tej instrukcji na rejestrach ma mało sensu).
Faza 1: pobrania wartości z pod adresu i wykonanie porównania.
Faza 2: zapisanie wyniku pod adres w pamięci LUB do rejestru.

Ponieważ w 2 fazie nie zawsze jest zapis do pamięci pomiędzy nimi 
magistrala jest zwalniana - przy dużym, równoległym ruchu na procesorze 
2 rdzeniowym wszystko się sypie w ułamku sekundy. Dodanie prefiksu lock 
powoduje zablokowanie dostępu do magistrali i danych w pamięci cache 
(cache coherency) na czas całej instrukcji. Czyli po prostu zapewnia 
ATOMOWE WYKONANIE instrukcji.

Skoro atomowe, to ten kto pierwszy ją zaczął ten zatrzymał pipeline 
wszystkich innych na czas 2 dostępów do pamięci i wymusił u nich 
odświeżenie cache - jego nikt nie zatrzyma.

>     to  co  powyżej  to  jest  właśnie  blokada  dostępu (czyli  tzw.
> ‘lock’), ale  przeniesiona  na  poziom instrukcji procesora architektury
> ‘cisc’, co nie oznacza, że automatycznie zawsze i w każdym przypadku ta-
> ka  instrukcja  jest  wykonywana  bez dodatkowych kosztów, niewidocznych
> dla  programu.  
Napisałem, że koszta są - niewielkie.

> więc wydaje się, że odpowiedniejszą nazwą dla tego typu
> algorytmów byłaby ‘mutex—free’, czyli pozbycie się blokowania uniwersal-
> nego  na  rzecz  blokowania  wewnątrzprocesorowego.   jakby  zmierzanie
> do  rozwiązań  typu ‘clean  box’, ale  w rzeczywistości  to  jest zwykłe
> ‘black box’… ;-)
Jakbyś się dokształcił w kwestii tego jak działa arbitraż na magistrali, 
jak działa cache coherency protocol, jak wygląda zazwyczaj cykl 
rozkazowy, jak działa pipeline to byś doszedł do wniosku, że:
a) wszystkie instrukcje są blokujące, bo w ich obrębie jest blokowana 
np. magistrala
lub
b) dodanie prefiksu lock sprawia, że jeden opcode jest tłumaczony na 
jedną instrukcję, a nie kilka.

Potem moglibyśmy kontynuować dyskusję na temat zastosowań?

> i jak by wyglądał taki algorytm na procesor ‘risc’…?
Poczytaj specyfikację choćby arm7 (LDM). Tam jest zazwyczaj łatwiej, bo 
nie ma systemów wielordzeniowych i wystarcza zablokowanie przerwań do 
czasu ukończenia instrukcji. Jeżeli jest wiele procesorów/rdzeni/(dma) 
to już wchodzi jakiś arbitraż na magistrali i trzeba blokować równoległy 
do niej dostęp.

-- 
Pozdrawiam
Michoo
Technical Details
Message-ID: <hif4fa$r17$1@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
References: <hi7d3a$u60$1@news.mixmin.net> <hi7otf$793$1@inews.gazeta.pl> <hi7rnu$g3v$1@news.mixmin.net> <hidkec$as1$1@news.onet.pl> <hietpm$h9g$1@news.mixmin.net>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
From: Michoo <michoo_news@vp.pl>
Newsgroups: pl.comp.lang.asm
Subject: Re: ‘lock–free’ aka
 odżywianie grupy
 asemblerowców :-)
Date: Mon, 11 Jan 2010 13:10:26 +0100
Organization: http://onet.pl
Lines: 59
Message-ID: <hif4fa$r17$1@news.onet.pl>
References: <hi7d3a$u60$1@news.mixmin.net> <hi7otf$793$1@inews.gazeta.pl> <hi7rnu$g3v$1@news.mixmin.net> <hidkec$as1$1@news.onet.pl> <hietpm$h9g$1@news.mixmin.net>
NNTP-Posting-Host: c2-211.icpnet.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1263211818 27687 62.21.2.211 (11 Jan 2010 12:10:18 GMT)
X-Complaints-To: niusy@onet.pl
NNTP-Posting-Date: Mon, 11 Jan 2010 12:10:18 +0000 (UTC)
User-Agent: Mozilla-Thunderbird 2.0.0.22 (X11/20090706)
In-Reply-To: <hietpm$h9g$1@news.mixmin.net>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit