Ada_Ru форум

Обсуждение языка Ада

Re: Атомарные примитивы

Оставить новое сообщение

Сообщения

Иван Левашев
Re: Атомарные примитивы
2009-10-08 09:38:39

Vadim Godunko <vgodunko <at> rostel.ru> writes:

 

 

64битные значения на x86 можно атомарно гонять с помощью

lock cmpxchg8b. CAS здесь ни к чему, зато он

атомарен и для восьми байт.

 

Низя, нет такой команды в i386 И не надо указывать на документацию Pentium IV или Core 2, ведь никому не секрет что это не переносимое подмножество x86!

 

ftp://download.intel.com/design/pentium/manuals/24319101.PDF

 

Intel Architecture Compatibility

 

This instruction is not supported on Intel processors earlier than the Pentium processors.

 

Ну да. Не помешал бы режим с поддержкой более современных процессоров, нежели 486. (Например, обратить внимание на -march)

 

Инлайнить cmpxchg8b было бы не совсем честно, зато

можно динамически определять архитектуру процессора, и уже

тогда с чистой совестью предоставлять оптимизированное

решение.

 

Вадим что–то писал насчёт разницы в три раза для Qt

строк в

C++ и в Аде. Не привлекательно.

Писал, было такое. А ещё писал, что есть реализация,

лишенная этого

недостатка. И в ней можно "подглядеть" как счётчик

ссылок делатеся

"красиво".

 

http://adaforge.qtada.com/cgi-

bin/tracker.fcgi/matreshka/browser/trunk/matreshka/source/league

 

см. league-strings.ads как стартовую точку.

 

 

Зачем так далеко? Разве нельзя было сразу в

matreshka-internals-atomics-counters__gcc.adb

 

function Sync_Sub_And_Fetch_32

(Ptr : not null access Interfaces.Integer_32;

Value : Interfaces.Integer_32) return Interfaces.Integer_32;

procedure Sync_Sub_And_Fetch_32

(Ptr : not null access Interfaces.Integer_32;

Value : Interfaces.Integer_32);

pragma Import (Intrinsic, Sync_Sub_And_Fetch_32, "__sync_sub_and_fetch_4");

Неудивительно, что здесь всё шито–крыто. Это даже лучше, чем

обычные ассемблерные вставки, потому что реализация зависит от

-march, а также потому, что на Itanium, учитывая VLIW, ассемблерную вставку сделать нетривиально. Интересно, давно это в GNAT

компилируется?

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти