freenode/#clasp - IRC Chatlog
Search
17:52:36
drmeister
Ah - thanks. This is code that is really early in the build process. The problem wasn't file-length - it was that I didn't have WHEN.
17:53:32
drmeister
I've got the CLASP_BUILD_MODE "fasoll" working now for quicklisp. Building quicklisp systems creates files with the faspll extension.
18:26:59
drmeister
I figured that I needed to be able to generate llvm-ir for all of the common lisp code before I tackled thread sanitizer because I don't want Cando building itself under the thread sanitizer - that would take an insane amount of time.
20:08:09
drmeister
Dangnabbit! I just realized why I can't link modules from separate threads in compile-file-parallel!
20:08:33
drmeister
There is a different LLVMContext for each thread - the modules basically live in separate parallel universes.
20:10:38
drmeister
I have to stream out the llvm-ir to a memory buffer and then read it back in into one thread.
22:10:21
drmeister
Yeah - in compile-file-parallel each thread now generates an llvm-ir source file in a string and then the main thread parses them back into modules and links them together.
22:11:38
drmeister
So now - with the fasoll CLASP_BUILD_MODE compile-file-parallel generates an llvm-ir file that we can examine to see what it is generating.
22:42:11
drmeister
The llvm 'opt' tool lets us run passes on code. It has a -tsan, -asan, -msan option for running these passes on llvm-ir.
2:55:42
drmeister
::notify Bike So - it turns out that our SharedMutex had a flaw. I don't know how any of the multithreaded code was working.
2:56:36
drmeister
::notify Bike The thread sanitizer showed the problem immediately. I added a new implementation of SharedMutex and I'm testing it now.
3:02:53
no-defun-allowed
Looking at the source code, is SharedMutex a readers-writer lock or something?
3:09:34
drmeister
This https://github.com/clasp-developers/clasp/blob/master/include/clasp/core/mpPackage.fwd.h#L169
3:10:28
no-defun-allowed
I think so too. Shouldn't it be, say, 1 to lock g with at least one reader?
3:11:06
drmeister
But even with 1 - thread sanitizer doesn't like it for a different reason. Something about cyclic locks.
3:11:13
drmeister
So I've switched to this: https://www.codeproject.com/Articles/1183423/We-Make-a-std-shared-mutex-10-Times-Faster
3:11:39
no-defun-allowed
I wanted to implement a r-w lock for my networking code, but there weren't enough read-only parts for it to actually help; I still vaguely remember how it works though.
3:11:44
drmeister
It's a long article but it promises something that I didn't know was possible. A shared mutex that doesn't suffer false sharing up to a point.
3:14:38
Colleen
Bike: karlosz said at 2020.11.21 04:35:34: i changed CST-to-AST so that there should be only the lexical variable associating with the rest argument im pretty sure
3:14:38
Colleen
Bike: drmeister said 20 hours, 54 minutes ago: I hit something in the concrete-syntax-tree code. When compiling babel gbk-map.lisp in the add-atoms function - the local function traverse calls itself in a deeply recursive way. 16000 times at least.
3:14:38
Colleen
Bike: drmeister said 20 hours, 50 minutes ago: It's easy enough to fix with ulimit -s 32768 but should we do anything about it?
3:14:38
Colleen
Bike: drmeister said 18 minutes, 56 seconds ago: So - it turns out that our SharedMutex had a flaw. I don't know how any of the multithreaded code was working.
3:14:38
Colleen
Bike: drmeister said 18 minutes, 2 seconds ago: The thread sanitizer showed the problem immediately. I added a new implementation of SharedMutex and I'm testing it now.
3:18:14
Bike
https://irclog.tymoon.eu/freenode/%23clasp?around=1575988711#1575988711 something like this
3:25:30
no-defun-allowed
https://github.com/google/sanitizers/issues/814 is still open - the cyclic locks /may/ be a false positive.
3:30:27
no-defun-allowed
It looks just like the implementation on Wikipedia, so if that has a cycle... but a faster lock would be nice.
3:36:49
drmeister
no-defun-allowed: Thanks for that - that's a good find. So the cyclic locks are probably a false positive. I like the idea of avoiding false sharing with the shared mutex.
3:38:14
no-defun-allowed
What I can make out is interesting - caches and atomics that aren't CAS are above my pay grade still.
3:42:17
drmeister
After changing the SharedMutex implementation I don't get any more thread sanitizer alerts from the C++ code.