SPF4 compiler issue

7 messages Options
Embed this post
Permalink
Ruvim Pinka

SPF4 compiler issue

Reply Threaded More More options
Print post
Permalink
Привет всем!

Под wine отчетливо вылезают Access Violation при многопоточной компиляции. DIS-OPT и 0 TO MM_SIZE не помогают, помогла только явная сериализация (через критичекую секцию) фрагментов, которые делают компиляцию.

То бишь, компилятор+оптимизатор SPF4 не обладают свойством потокобезопасности (thread safety).

--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Andrey Cherezov

Re: SPF4 compiler issue

Reply Threaded More More options
Print post
Permalink
Под Unix нет нормальной многопоточности, она эмулируется из
многозадачности - может с этим связано. Может там USER-переменные вообще
не работают?

Ruvim Pinka пишет:

> Привет всем!
>
> Под wine отчетливо вылезают Access Violation при многопоточной
> компиляции. DIS-OPT и 0 TO MM_SIZE не помогают, помогла только явная
> сериализация (через критичекую секцию) фрагментов, которые делают
> компиляцию.
>
> То бишь, компилятор+оптимизатор SPF4 не обладают свойством
> потокобезопасности (thread safety).
>
> --
> Ruvim


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Ruvim Pinka

Re: SPF4 compiler issue

Reply Threaded More More options
Print post
Permalink
Крэш-тест выявил эффект нарушения потокобезопасноти и под Windows тоже.

Исходник прилагаю. Запуск 50 потоков: spf testcase-compiler-mt.f 50 ntest

Падает практически сразу.
После включения критической секции (раскомментировать ENTER-CS и LEAVE-CS) — живет, но глючит: временами (до 10 с), появляются сообщения типа WRONG: 1 tid: 2720 (значит, сгенеренный код отработал неверно). Если сделать еще DIS-OPT — тогда уж работает как часы.

On 9/21/07, Andrey Cherezov <[hidden email]> wrote:
Под Unix нет нормальной многопоточности, она эмулируется из
многозадачности - может с этим связано. Может там USER-переменные вообще
не работают?

Действительно, под wine создатеся какой-то спец-процесс на каждый поток. Но USER-переменным то чего не работать, они же через регистр реализованны, а локальность набора регистров выполняется четко.


--
Ruvim
\ 21.Sep.2007 ruv
\ êðýø-òåñò
\ äëÿ âûÿâëåíèÿ íàðóøåíèé ñâîéñòâà ïîòîêîáåçîïàñíîñòè êîìïèëÿòîðîì

: (PERFORM-EXECUTE) ( xt -- )
  CATCH DUP IF ." (PERFORM-EXECUTE) " ERROR THEN
;
' (PERFORM-EXECUTE) TASK CONSTANT TASK-PERFORM-EXECUTE

: LAUNCH ( xt -- ) \ execute asynchronous
  TASK-PERFORM-EXECUTE START CloseHandle ERR THROW
;

REQUIRE CREATE-CS ~pinka/lib/multi/critical.f
WINAPI: GetCurrentThreadId Kernel32.dll

CREATE-CS _compiler


: make-test-proc ( u -- xt )
\  _compiler ENTER-CS
\  ClearJpBuff

  HERE >R 0 , >R
  :NONAME
    R> LIT,
    POSTPONE BEGIN
    POSTPONE DUP
    POSTPONE WHILE
    POSTPONE 1-
    R> LIT,
    POSTPONE 1+!
    POSTPONE REPEAT
    POSTPONE DROP
   POSTPONE ;
\  _compiler LEAVE-CS
;
: go-times ( n -- )
\ Ñîçäàåò è âûïîëíÿåò íåêèé test-proc n ðàç.
\ Ïîñëå êàæäîãî âûïîëíåíèÿ ñâåðÿåò çíà÷åíèå ñ÷åò÷èêà (äîëæíî áûòü 50).
  0 DO
    HERE >R
    50 make-test-proc EXECUTE
    R@ @ 50 <> IF ." WRONG: " R@ @ . ." tid: " GetCurrentThreadId . CR THEN
    R> HERE - ALLOT
  LOOP
;
: thread-core ( -- )
  TEMP-WORDLIST ALSO CONTEXT ! DEFINITIONS
  -1 go-times
;
: spawn ( -- ) \ ïîðîæäàåò ïîòîê, ãîíÿþùèé òåñò î÷åíü ìíîãî ðàç.
  ['] thread-core LAUNCH
;
: ntest ( n-threads -- )
  0 ?DO  spawn  LOOP
;

\ DIS-OPT
\ 0 TO MM_SIZE

\ S" test-mt.exe" SAVE BYE

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Andrey Cherezov

Re: SPF4 compiler issue

Reply Threaded More More options
Print post
Permalink
Some javascript/style in this post has been disabled (why?)
Добрый день, Ruvim Pinka!
: make-test-proc ( u -- xt )
\  _compiler ENTER-CS
\  ClearJpBuff

  HERE >R 0 , >R
  :NONAME
...

Что-то я не пойму. Ты же подключил твои недавно написанные либы, делающие возможной многопоточную компиляцию!
Без них (т.е. до недавнего времени _всегда_) SPF не поддерживает многопоточную компиляцию, а только интерпретацию.
Тут и доказывать крештестами ничего не надо :)

Ваше сообщение от 21.09.2007 18:06:
Крэш-тест выявил эффект нарушения потокобезопасноти и под Windows тоже.

Исходник прилагаю. Запуск 50 потоков: spf testcase-compiler-mt.f 50 ntest

Падает практически сразу.
После включения критической секции (раскомментировать ENTER-CS и LEAVE-CS) — живет, но глючит: временами (до 10 с), появляются сообщения типа WRONG: 1 tid: 2720 (значит, сгенеренный код отработал неверно). Если сделать еще DIS-OPT — тогда уж работает как часы.

On 9/21/07, Andrey Cherezov <[hidden email]> wrote:
Под Unix нет нормальной многопоточности, она эмулируется из
многозадачности - может с этим связано. Может там USER-переменные вообще
не работают?

Действительно, под wine создатеся какой-то спец-процесс на каждый поток. Но USER-переменным то чего не работать, они же через регистр реализованны, а локальность набора регистров выполняется четко.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Ruvim Pinka

Re: SPF4 compiler issue

Reply Threaded More More options
Print post
Permalink
On 9/21/07, Andrey Cherezov <[hidden email]> wrote:
Что-то я не пойму. Ты же подключил твои недавно написанные либы, делающие возможной многопоточную компиляцию! Без них (т.е. до недавнего времени _всегда_) SPF не поддерживает многопоточную компиляцию, а только интерпретацию. Тут и доказывать крештестами ничего не надо :)

А что, собственно, мешало SPF поддерживать параллельную компиляцию (в разные словари и пространства данных, естественно)?  Мы сейчас провели тоже самое испытание на SPF3.75 — работает без сбоев!

Расширение ~pinka/spf/storage.f снимает проблему с вложенными словарями и отделяет хранилища (пространство данных) от словарей. К собственно самому откладыванию кода оно отношения не имеет.

А в SPF4 проблема кроется в оптимизаторе. Надо сделать локальными для потока его блоки изменяющихся данных. И, кстати, даже вот c DIS-OPT сваливается иногда поток в этом испытании (так что, далеко не как часы ;)

--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Ruvim Pinka

Re: SPF4 compiler issue

Reply Threaded More More options
Print post
Permalink
Допустимые ограничения параллельной компиляции.
Среди выполняющихся нитей (потоков) только в одной из них могут резервироватся ячейки в USER-области, т.к. VARIABLE USER-OFFS — общий ресурс без синхронизации доступа.

--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Ruvim Pinka

Re: SPF4 compiler issue

Reply Threaded More More options
Print post
Permalink
In reply to this post by Ruvim Pinka
On 9/21/07, Ruvim Pinka <[hidden email]> wrote:
А в SPF4 проблема кроется в оптимизаторе. Надо сделать локальными для потока его блоки изменяющихся данных.

Оптимизатор подправлен (новая версия в репозитории), теперь приводимый ранее крэш-тест выполняется без нареканий.

--
Ruvim
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev