-
Content Count
247 -
Joined
-
Last visited
-
Days Won
1
Posts posted by RDP1974
-
-
On 4/9/2025 at 11:14 AM, Stefan Glienke said:I don't step into that territory because you cannot simply make general-purpose collections thread-safe. It already starts with simple things like: how do you protect a list where one thread adds/removes items and another iterates over it?
oneapi tbb concurrent hash map when call iterate() does a snapshot copy of the collection and publish it, meantime protecting keys with acc (similar to critical section)
btw. concurrent_queue test with 10 threads is 3x quicker than TOmniQueue, and unfortunately TThreadedQueue goes in deadlock
-
hi, I wish to not be offtopic, and to be useful
anyway there https://github.com/RDP1974/Delphi64RTL I have added concurrent queue, thread safe, from OneApi v2022.1
also a small test there (single thread, create and dispose string, 10M push + 10M pop within 1 sec)(I have not time to do multithread test now)
kind regards
btw. this repo is a base for a mine custom server reactor+proactor done in Delphi
-
updated intel scalable allocator
a little change for delphi 12.x
please let me know if you found errors
kind regards
btw.
in my test, win11 24h, i9900, in single thread scenario it's identical score with the default mm (D12.3), in multithread scenario it's the fastest among tested
-
I asked the old good chatgpt
-
guess a pool with 100 tthreads, each with a queue fifo receiving messages, also each tthread send messages simultaneously to every all others:
then a tthreadqueue without global locking as CRT should be the faster solution?as far I have researched then the spring4d queue lock free seems the fastest solution (but I cannot find it in the source)
finally -> OmniThreadLibrary -> TOmniBaseQueue -> Dynamically allocated, O(1) enqueue and dequeue, threadsafe, microlocking queue
or TOmniMessageQueue (ring buffer)also I have found a ring buffer from https://blog.grijjy.com/2017/01/12/expand-your-collections-collection-part-2-a-generic-ring-buffer/
please can you suggest me the best code, libraries to achieve consumer-producers between threads? thanks
btw.if I have time will do a dll for tbb::concurrent_queue
-
guess a pool with 100 tthreads, each with a queue fifo receiving messages, also each tthread send messages simultaneously to every all others:
then a tthreadqueue without global locking as CRT should be the faster solution? -
please can you test with TThreadedQueue? (with latest 12.3)
-
can I ask?
the tthreadedqueue it's reliable in delphi 12.3 latest release?
or do you suggest omnithread queue?
about dictionary same question, or do you suggest spring4d?
or other libraries are better than default rtl?
-
hi,
I have a windows service where I dispatch a custom thread pool, dynamic, using IoCompletionPort api,
then I have a component where methods should be called within the servicethread,
my question is, do you know if servicethread.queue it is reliable? is this the best method to post things to the main thread in a safer way without incur in race conditions as deadlock?
example, this code is called within a thread:
TServiceThread.Queue(Service.ServiceThread, procedure
begin
dothings
end);kind regards
-
sorry, it works
needs open the firewall on remote side bcz many processes dispatch many ports
also
https://docwiki.embarcadero.com/RADStudio/Athens/en/Installing_a_Debugger_on_a_Remote_Machine
kind regards
-
hi,
I like to do remote debugging,
I have installed PAserver 23 (from Delphi 12.2 paserver folder) into remote vps,
then I have copied the \bin\rmtdbg290.exe to the paserver remote folder updating it,
have done the profile manager for windows and paserver is connecting ok
firewall ports open both paserver and remote debugger
I obtain this error from delphi ide:
can somebody help me how to obtain remote debugging of windows vcl?
thank you
-
there is a generic all in one https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022
installing this solved, probably db clients dll are binded to ucrt so needing this
-
I had a similar problem with firedac mysql
solved installing visual c++ redistributable
-
indeed the quality of the system rtl of D12 is outstanding
-
question
do you remember the good old https://fastcode.sourceforge.net/ ? (2007 project)
I asked chatgpt to convert asm32 to asm64 delphi, look at this example:
procedure MoveJOH_SSE2_10(const Source; var Dest; Count : Integer);
asm
cmp ecx, TINYSIZE
ja @@Large {Count > TINYSIZE or Count < 0}
cmp eax, edx
jbe @@SmallCheck
add eax, ecx
add edx, ecx
jmp SmallForwardMove_10
@@SmallCheck:
jne SmallBackwardMove_10
ret {For Compatibility with Delphi's move for Source = Dest}
@@Large:
jng @@Done {For Compatibility with Delphi's move for Count < 0}
cmp eax, edx
ja Forwards_SSE2_10
je @@Done {For Compatibility with Delphi's move for Source = Dest}
sub edx, ecx
cmp eax, edx
lea edx, [edx+ecx]
jna Forwards_SSE2_10
jmp Backwards_SSE2_10 {Source/Dest Overlap}
@@Done:
end; {MoveJOH_SSE2}chat gpt rewrite this in 64bit:
procedure MoveJOH_SSE2_10(const Source; var Dest; Count: Integer);
asm
cmp r8d, TINYSIZE // Compare Count (R8D) with TINYSIZE
ja @@Large // If Count > TINYSIZE or Count < 0, jump to @@Large
cmp rcx, rdx // Compare Source (RCX) with Dest (RDX)
jbe @@SmallCheck
add rcx, r8 // Adjust Source address: Source + Count
add rdx, r8 // Adjust Dest address: Dest + Count
jmp SmallForwardMove_10 // Jump to small forward move
@@SmallCheck:
jne SmallBackwardMove_10 // If Source ≠ Dest, use backward move
ret // If Source = Dest, exit (compatible with Delphi’s Move)
@@Large:
jng @@Done // If Count < 0, exit (compatible with Delphi’s Move)
cmp rcx, rdx
ja Forwards_SSE2_10 // If Source > Dest, use forward move
je @@Done // If Source = Dest, exit
sub rdx, r8 // Adjust Dest address: Dest - Count
cmp rcx, rdx
lea rdx, [rdx + r8] // Restore original Dest address
jna Forwards_SSE2_10 // If no overlap, use forward move
jmp Backwards_SSE2_10 // If overlap, use backward move
@@Done:
end;
opinions? does this make sense to you? can we take the winners of fastcode 32bit and convert them in 64bit so easily?
chatgpt then owns the copyright? -
I feel dumb, want edit first post, can't find how to
want erase one post, seems impossible!
😕 -
-
3 hours ago, Lars Fosdal said:@RDP1974 Something like "New mem manager test using indy http, json, memtables, etc"
I don't find where to rename the topic 😕
-
46 minutes ago, Lars Fosdal said:@RDP1974 - Please change the title of the post to reflect the content - "new test" does not inform those that read the list of topics
how to?
-
lowering the size of the output to 2.5kB (json blob) instead of 46kB, isapi has this throughput (cpu near old 9th 14nm i9900-kf)
Concurrency Level: 100
Time taken for tests: 0.398 seconds
Complete requests: 10000
Failed requests: 0
Keep-Alive requests: 10000
Total transferred: 27800000 bytes
HTML transferred: 26100000 bytes
Requests per second: 25106.45 [#/sec] (mean)
Time per request: 3.983 [ms] (mean)
Time per request: 0.040 [ms] (mean, across all concurrent requests)
Transfer rate: 68160.09 [Kbytes/sec] received -
with keep-alive isapi app
Concurrency Level: 100
Time taken for tests: 4.763 seconds
Complete requests: 10000
Failed requests: 0
Keep-Alive requests: 10000
Total transferred: 431790000 bytes
HTML transferred: 430080000 bytes
Requests per second: 2099.45 [#/sec] (mean)
Time per request: 47.631 [ms] (mean)
Time per request: 0.476 [ms] (mean, across all concurrent requests)
Transfer rate: 88527.55 [Kbytes/sec] receivedin project source:
Application.MaxConnections:=1000;
Application.CacheConnections:=True; -
please tell me if these test are disturbing or inapropriate
if so will delete them
-
single request
latest oneapi v.2022
(see first page)
Concurrency Level: 1
Time taken for tests: 0.004 seconds
Complete requests: 1
Failed requests: 0
Keep-Alive requests: 0
Total transferred: 43146 bytes
HTML transferred: 43008 bytes
Requests per second: 285.06 [#/sec] (mean)
Time per request: 3.508 [ms] (mean)
Time per request: 3.508 [ms] (mean, across all concurrent requests)
Transfer rate: 12011.05 [Kbytes/sec] received -
latest oneapi v.2022
intel tbbmalloc with zlib deflate ac:
https://github.com/RDP1974/Delphi64RTL
Server Software: Microsoft-IIS/10.0
Server Hostname: 192.168.1.110
Server Port: 80Document Path: /isapi/testisapi.dll
Document Length: 8416 bytesConcurrency Level: 100
Time taken for tests: 5.478 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 86170000 bytes
HTML transferred: 84160000 bytes
Requests per second: 1825.64 [#/sec] (mean)
Time per request: 54.775 [ms] (mean)
Time per request: 0.548 [ms] (mean, across all concurrent requests)
Transfer rate: 15362.84 [Kbytes/sec] receivedwithout zlib deflate
Document Path: /isapi/testisapi.dll
Document Length: 43008 bytesConcurrency Level: 100
Time taken for tests: 5.236 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 431740000 bytes
HTML transferred: 430080000 bytes
Requests per second: 1909.82 [#/sec] (mean)
Time per request: 52.361 [ms] (mean)
Time per request: 0.524 [ms] (mean, across all concurrent requests)
Transfer rate: 80522.17 [Kbytes/sec] received
64bit RTL patches with Intel OneApi and TBB
in RTL and Delphi Object Pascal
Posted
well, somebody ask me to build a static dll without dependencies to visual c runtime and visual c++
this should be done with clang and mingw (but now I don't have time)
about my repository I added a thread safe fifo queue for highest performance producer-consumer between threads
https://github.com/RDP1974/Delphi64RTL check testqueue