prsyahmi / gpuramdrive Goto Github PK
View Code? Open in Web Editor NEWRamDrive that is backed by GPU Memory
License: MIT License
RamDrive that is backed by GPU Memory
License: MIT License
Once GpuDrive is unmounted, mount again, previous created share location is gone and require re-creating.
Config user and permission is pretty unfriendly with Windows user interface,
meanwhile, powershell New-SmbShare also not accept GpuDrive path like R:\
.
In this case, create a symbolic link at always online local drive like C:\ShareRedirect
use mklink
:
>cd /d C:\
// Create this folder
>md ShareRedirect
>cd /d C:\ShareRedirect
// Create symbolic link
>mklink /d "GpuDisk" "R:\"
Then right click on created symbolic link "GpuDisk", choose properties,
then go to Sharing, set a share location as usual.
Later, after unmount or reboot, share location will keep existing.
If access this location during unmount, file explorer just show a harmless dialog.
Once mount again, the share location is available immediately.
If I press 'Shutdown' before un-mounting the drive, Windows keeps shutting down forever, I have to hold power button to shut it down! Which is unhealthy!
Could you add an "automatic un-mount" when the program receives a shutdown/close notice ?
Also, Can you automatically format the drive upon mounting ?
Hey,
can you please build the latest Version for Windows and upload it to Releases?
Many Thanks.
As in thread. recently Intel decided to go all-in as a third player on the GPU market, So how about GPU Ramdrive Supporting Intel Arc cards?
at least in x64bit. no need for x86 as no intel card supports x86 system
Please...
It's the title man
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?
Hello,
I am a newbie.
Great soft. Too bad that works only for some.
Mounting works ok. Formatting impossible. In properties, there is 0b capacity (mounted RAM drive).
Windows 8.1 x64 (with VS 2015 installed).
I have installed the latest drivers for Video Card. I have installed Imdisk and vcredist 2015 as requested, including CUDA toolkit. I also compiled the project in VS 2015. Still, the same effect: 0b capacity (mounted RAM drive).
I tried also with the command line all possible variants for video card name. Same effect.
Video Chipset: NVIDIA GeForce GTX 960
Video Chipset Codename: GM206-300
Obs.
In GpuRamDrive.h,
I also switched the value for GPU_API to GPU_API_OPENCL (to be forced to take the value 2) . Same effect.
Most important, and I think there could be the cause:
I also switched the value for GPU_API to GPU_API_HOSTMEM (to be forced to take the value 0) . Same effect. And that is the RAM from my motherboard. It should be worked at least with the RAM from my motherboard (not that I needed this, since I can do this in Imdisk.exe by example). The idea is that not works to make a valid RAM drive, not even from my motherboard RAM (by forcing assigning the value 0 for GPU_API in GpuRamDrive.h). And that is strange.
The capacity of the mounted RAM drive is null (0 bytes) in any circumstances.
Latest news about and observations:
Lately, I observed these:
The Video card have 4 gb ram. It also displays in system 4096 mb.
Also, the video card is new.
Regards
I won't play games, I just want to know what will happen if I use the whole VRAM as a disk. Will it crash? Will I have problems?
Cuda version:
https://i.snipboard.io/kUT6v8.jpg
I tried all 3 options from dropdown menu and all used the GT1030. Is there a way to specify devices explicitly before running or just by using multiple instances of app?
OpenCL version works fine.
Thanks for checking if the partition already exists or owned by the program, got one of my real drives formatted...
Hi,
Thank you for giving us a possibility to utilize a spare graphics card.
I have a RTX 2070 Super and a Quadro K4200. Both are installed in x16 slots directly attached to CPU (not via PCH or external bridge).
Crystal Disk Mark results:
R2070S (PCIe 3.0 x16, 6553MB):
Read Seq Q32T1 754.1
Read 4K Q8T8 46.13
Read 4K Q32T1 45.51
Read 4K Q1T1 42.11
Write Seq Q32T1 861.4
Write 4K Q8T8 67.63
Write 4K Q32T1 53.00
Write 4K Q1T1 45.72
K4200 (PCIe 2.0 x16, 3276MB):
Read Seq Q32T1 708.9
Read 4K Q8T8 46.81
Read 4K Q32T1 50.98
Read 4K Q1T1 39.62
Write Seq Q32T1 782.8
Write 4K Q8T8 49.90
Write 4K Q32T1 56.90
Write 4K Q1T1 41.27
Comparison: An nvme SSD installed in x8 slot makes >3000 MB/s.
Is there any way to see if and where I have bottlenecks?
I did notice the ImDisk driver says "proxy mode", but I couldn't find your explanation about it for the second time. I remember I saw it somewhere here, maybe in Issues.
i'm just a person who loves to explore, not a very technical guy
For example, I have an OpenCL-based VRAM virtual-array class that improves performance even for random-accesses even when the accesses are not in too big chunks:
https://github.com/tugrul512bit/VirtualMultiArray/wiki/Cache-Hit-Ratio-Benchmark
64-threads access:
Single-thread access:
Partially-overlapped 16-thread access (overlapping region = better cache efficiency):
At brzz who made the works on AMD GPUs, GPURamDrive:
( you really need your own Issue dept or forum. Hope this is ok prsyahmi?)
Which compiler did you use?
I ask as Intel's Compiler cripples AMD performance by NOT using any hardware extensions (SSE, AVX, etc)
https://www.agner.org/optimize/blog/read.php?i=49
AMD's OpenMP Compiler is a LLVM/Clang based compiler that supports OpenMP and offloading to multiple GPU acceleration targets...
https://www.openmp.org/resources/openmp-compilers-tools/
Other choices:
AOCC 3.1, Clang 12, GCC 11
https://www.phoronix.com/scan.php?page=article&item=aocc31-gcc11-clang12&num=1
if you use the GpuRamDrive-cuda_x**.exe to create a new virtual disk, the virtual disk can not be unmount completely, so the imdisk can not uninstall.
You can create a a new virtual disk by GpuRamDrive_x**.exe, and then ummount it. It is right,
Hi prsyahmi
Would it be possible to add a the ability to change ImDisk command line attributes plz.
Im specifically interested in being able to use the -o par for Parallel I/O, but other settings like -S for sector size and -o buf may also increase performance..?
Perhaps a means to tweak other timings etc too?
Hello,
When I open the program my GPU is correctly detected, so I click on "Mount" button:
So the partition appears on "My computer", but it isn't getting the memory from the GPU, it is using the system RAM:
So, is in this case the program working incorrectly or, this program is only making a RamDisk?
Thanks.
Nowy Archiwum WinRARa (ZIP).zip
i needed to send video with proof in zip because github doesnt support mkv
confirm close if the disk is mounted because you may lose data
For this awesome GpuRamDrive program worked fantastic in windows 10.
With command line support it will be very usefull.
Windows 10 22H2
If you mount virtual disk before your system drive (mount at A: or B: in case system drive is C:),
run Windows Update can result in 0x80070001, failed to download, and get these in WindowsUpdate.log
DownloadManager *FAILED* [80070001] Method failed
CAgentDownloadManager::EnsureSufficientFreeSpace
There is a workaround posted on a Chinese forum, says mount after system drive could solve this.
For example, change mount point from A: to D: or X:, Y:, Z: any letter after system drive (usually is C:)
I found that unmount temporary also help.
I wanted to see if we could have a discussion about you doing some coding for me. Similar to the GPU RAM drive but more hardware specific. [email protected]
i tried to follow what you said. it doesnt seem to work. i mean i can't find the output dll you're talking about. i put everything into the same Dir as you asked. what did i do wron? :(
I need this to run during boot and restore saved contents for it to be usable as virtual memory.
I don't know if this makes any sense, but I'd like to ask for Resizable BAR support. It just seems to me that in this case the access will be more direct. The only thing, though, would be the need for barriers. Also, may needs Vulkan API.
Create a new task in Task Scheduler with following details:
program to run:
cmd.exe
arguments (set aside in second input) - I used R: disk + timeout 5 seconds + create a Temp folder after timeout
/Q /C start D:\Apps\RamDriveGPU\GpuRamDrive_x64.exe --device GeForce --size 5120 --mount R: --format "/fs:ntfs /q" --removable --hide & timeout 5 > NUL & mkdir R:\Temp
Set the task to run for all users and tick the box to not save passwords, that helps to not see any cmd window popping. Also exe will not appear in taskbar, but you can eject the disk via menu anyway. Can be run on demand or upon Win boot.
Hi prsyahmi
Thx again for a really great n useful app! :)
I note that one can no longer specify format parameters as one could.
This is important for 2 reasons:
ie: being able to add /a:4096 etc to /fs:exfat /q again would be nice.
Also; I understand the code has large and adjustable ...wait states? Latencies? in it to make it 'just work'.
Being able to adjust said wait states and tweak GPU-RD to ones hardware in the GUI would be great!
Also NB: [Since] ImDisk Virtual Disk Driver beta 2.0.0.
"...Rewritten I/O request logic to allow fully parallel I/O..."
http://www.ltr-data.se/opencode.html/changelog.html
That may speed things up nicely!??
Everyone:
Setting the CPU priority of GPU-RD to 'Above Normal' increases the large sequential speeds by around 20MB/s on a cheap Geforce 210 card. Probably more on better cards.
Using MSI Utility v3 to tweak (Message Signaled) Interrupts and priority for the GPU will increase the all important, to Windows, Random 4K numbers.
It will also increase FPS in games.
https://forums.guru3d.com/threads/windows-line-based-vs-message-signaled-based-interrupts-msi-tool.378044/
eBoostr, a disk caching app that works with Win 10 and is free (trial) for 2 hours after each boot works well with GPU-RD.
NB that it auto builds the cache every hour unless you do so manually, so don't think it's crap after 5 minutes..!
NB that you can also specify which apps/games to accelerate and files/directories to exclude.
https://www.eboostr.com/
Thx again. :)
On my rx 580 4gb it uses main memory
"...With the VRAM being managed by Windows, D3D now exposes the heap memory access directly to the CPU! This allows both the CPU and GPU to directly access the memory simultaneously..."
https://devblogs.microsoft.com/directx/preview-agility-sdk-1-710-0/
"...Copy engines can execute copy commands in a COPY queue concurrently with other GPU work, and multiple COPY queues can be used concurrently. One problem with using async COPY queues though is that you must take care of synchronizing the queues with DX12 Fences, which may be complicated to implement and may have significant overhead.
The latest release of the Microsoft provides an alternative solution for DX12 applications to effectively use a CPU thread as a copy engine. This can be achieved by creating a DX12 GPU upload heap (D3D12_HEAP_TYPE_GPU_UPLOAD) if available. CPU writes to this GPU upload heap are then forwarded directly to VRAM, over the PCIe bus..."
https://developer.nvidia.com/blog/optimizing-dx12-resource-uploads-to-the-gpu-using-gpu-upload-heaps/
No support for multiple Gpu setup. :(
I want to be able to add all of my Mining's rig's GPUs memory to a single drive letter.
If I try mount 2 GPUs (using 2 instances of GpuRamDrive), I get a Imdisk service already in use error message.
I get 5 GPUs with 2GB each and 1 GPU with 6GB... thats about ~16GB of usable Gddr ram
Is this a limitation of Imdisk?
First, great PoC! I can't believe nobody had though of this! ๐
A quick question: I noticed your'e handling the communication via OpenCL. I was curions to know if using CUDA would've made any improvements overall. I know CUDA supports overlapping operations and tons of optimizations under the hood, and I wanted to know if you ever considered or tried that.
Also, for anybody else who may be curious about the performance on a higher end GPU, here's a screenshot of the benchmark that was done using my GTX 1080 card.
Again, great work!
can i mount 2 disks simultaneously on 2 different video cards?
HI
On my laptop with W4190M GPU (2gb GDDR5), it only uses RAM...
I'm no dev. Just looking for ways to speed up GPURamDrive..
Just found this:
[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
???! :)
Hi. I installed the program and tried to use it. I do mount the new drive, however the new unit cannot be formatted at all. Tried to change the format parameters and also the combination between hard drive/floppy disk and removable/non removable.
Windows recognices there is a new drive but this drive cannot be formatted. Tried with Fat32, exfat, ntfs, and even after a full format there is allways the same error: "Windows cannot complete the format".
I'm using Windows 7 64 bits, 8 gb of ram and a radeon RX 580 8 GB
GpuRamDrive doesn't have much customization available, for example, you can't create the drive as removable!
So can we pass imDisk parameters to GpuRamDrive to set more options ?
I have a Windows 7 SP1 x64, GpuRamDrive always crashes when I close it.
Trying to create a drive on a Vega FE, but 4095 Megabytes is the largest size I can allocate before it stops working. 4096 and above results in the issue where you are unable to format the drive despite it showing up properly in the ImDisk control panel.
System setup: Asus P8Z68-V with an i7 3770k, 16GB DDR3, Vega FE with 16GB HBM memory, 17.12.2 drivers in Gaming mode, Windows 10 Pro x64 version 1709. ImDisk Version 2.0.9. Tried with Vega's HBCC feature both on and off.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.