Open tugrul512bit opened 3 years ago
Hello tugrul
I'm no dev so dont know if this helps:
[Since] ImDisk Virtual Disk Driver beta 2.0.0.
"...Rewritten I/O request logic to allow fully parallel I/O. This is by default only used when communicating with AWEAlloc driver for physical memory virtual disks, but can be turned on for any virtual disks backed by an image file or another kernel level driver, provided that the underlying driver supports it. Use -o par command line option to turn on this feature.
This change should give better physical RAM disk performance. It should also give better performance for instance when using ImDisk to mount offsets of \?\PhysicalDrive objects as virtual disks. AWEAlloc driver rewritten to support multiple requests simultaneously, which means that ImDisk no longer need to queue requests and switch to a worker thread to complete requests to a physical memory RAM disk..." http://www.ltr-data.se/opencode.html/changelog.html
I'm adding some multi-gpu stuff into it to use all GPUs for single drive. It works but it is slow because of multiple lock-guards and small paging size in the extra codes I add. If given 64 threads even on 8 core cpu, it can have 5-6 GB/s throughput but it is down to only 50MB/s per thread per gpu sequential and 20MB/s per thread per gpu random access (if page size is 4kB).
Is there a possibility to convert the ImdiskHandleComm() method to make it handle 64 requests in parallel as if char-array is thread-safe (array class I'm using is thread-safe so it doesn't need explicit lock)? Or OS/Imdisk is doing parallelism already? Where can I set number of "parallelism" threads?