ubc-aamodt-group / vulkan-sim Goto Github PK
View Code? Open in Web Editor NEWVulkan-Sim is a GPU architecture simulator for Vulkan ray tracing based on GPGPU-Sim and Mesa.
License: Other
Vulkan-Sim is a GPU architecture simulator for Vulkan ray tracing based on GPGPU-Sim and Mesa.
License: Other
Hi!
Regarding the property of the BVH, I noticed that the internal node in BVH has an upper limit of 6 children node at
Is there any reason for this? or I just simply mis-understand it.
Thanks!
-y
Hello, author. When I installed vulkan-sim, the following problems occurred. At this step,/raytracer-scene 6-height 320-width 448 has a problem, and there is no "Trace dumped" in the terminal, which looks just like the situation without the simulator installed. I didn't report any mistakes before doing it. Please take a look at it for me.
I installed vulkan-sim in a docker container along with dependencies. When I run the ray tracing app, the integrated Intel GPU is picked as the physical device, however, I get the following error.
Driver does not support the 0x46a6 PCI ID.
MESA-INTEL: error: ../src/intel/vulkan/anv_device.c:324: VK_ERROR_INCOMPATIBLE_DRIVER
FATAL: failed to enumerate (ERROR_INITIALIZATION_FAILED)
0# 0x00005598A9C3FD76 in ./RayTracer
1# 0x00005598A9C4184F in ./RayTracer
2# 0x00005598A9C8592B in ./RayTracer
3# 0x00005598A9C8647C in ./RayTracer
4# 0x00005598A9C7C7C4 in ./RayTracer
5# 0x00005598A9C8B3C0 in ./RayTracer
6# 0x00005598A9C9C8F0 in ./RayTracer
7# 0x00005598A9C495E6 in ./RayTracer
8# __libc_start_main in /usr/lib/x86_64-linux-gnu/libc.so.6
9# 0x00005598A9C4ABDE in ./RayTracer
Following is the ICD file
{
"ICD": {
"api_version": "1.2.145",
"library_path": "/home/vulkan-sim-root/mesa-vulkan-sim/lib/lib/x86_64-linux-gnu/libvulkan_intel.so"
},
"file_format_version": "1.0.0"
}
I suspect something went wrong during mesa build. Any hints?
I'm running vulkan-sim in a Ubuntu 20.04 container with Cuda 11.7 with an Intel 12700H CPU.
Hi,
I was trying to run RayTracingInVulkan and vulkan-sim on a cluster with a CPU but without graphics cards. I don't need to generate new traces, just run the existing traces but change the GPGPUsim configurations in vulkan-sim.
My command is: "./RayTracer --scene 18 --width 128 --height 128 --samples 2" as suggested in the README.
I am getting the following error:
Vulkan Devices:
- [0] UnknownVendor 'llvmpipe (LLVM 12.0.0, 256 bits)' (CPU: vulkan 1.1.182, driver llvmpipe Mesa 21.2.6 (LLVM 12.0.0) - 0.0.1)
Setting Device [0]:
FATAL: missing required extensions: VK_KHR_acceleration_structure, VK_KHR_deferred_host_operations, VK_KHR_ray_tracing_pipeline, VK_KHR_shader_clock0# 0x00005593AA3EDFDD in ./RayTracer
1# 0x00005593AA3EF1DD in ./RayTracer
2# 0x00005593AA432B3F in ./RayTracer
3# 0x00005593AA42D020 in ./RayTracer
4# 0x00005593AA43C8CD in ./RayTracer
5# 0x00005593AA44C9E6 in ./RayTracer
6# 0x00005593AA42DF56 in ./RayTracer
7# 0x00005593AA3F81B9 in ./RayTracer
8# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
9# 0x00005593AA3F93FE in ./RayTracer
I think the missing extensions are because I don't have any graphics card available. However I read in one of the previous issues that the simulator should simulate the GPU ray tracing hardware and should run on any CPU. Do you have any clues on what I can do to fix this? Thank you!!
Hi! I was trying to use other GPU configuration files to run vulkan-sim and I noticed an issue with the pipeline width. The original gpgpusim only has 13 pipeline stages, but since vulkan-sim added two extra stages "ID_OC_RT", "OC_EX_RT" in vulkan-sim/src/gpgpu-sim/shader.h:
const char *const pipeline_stage_name_decode[] = { "ID_OC_SP", "ID_OC_DP", "ID_OC_INT", "ID_OC_SFU", "ID_OC_MEM", "OC_EX_SP", "OC_EX_DP", "OC_EX_INT", "OC_EX_SFU", "OC_EX_MEM", "EX_WB", "ID_OC_TENSOR_CORE", "OC_EX_TENSOR_CORE", "ID_OC_RT", "OC_EX_RT", "N_PIPELINE_STAGES"};
the code will error out when running GPU configs with only 13 stages (e.g. SM7_QV100). What's the best way to resolve this?
Another related question: I also tried on my own config of RTX3070, based on gpgpusim git directory's RTX3070 config + RT core gen 1 spec from vulkan-sim's RTX2060 config (I can't find spec for 3070's RT core gen 2 online). The config file is here. I added the two extra RT pipeline stages and removed some options that vulkan-sim doesn't support. Although the runs can be launched, simulations all fail with deadlocks.
Ideally I'd want to model some Ampere GPU with a RT core, so if you happen to have some working configs lying somewhere I'd really appreciate it! If that's not possible I can go with something like QV100 as long as I can get a valid configuration for simulation.
Thanks!
The build of mesa and vulkan-sim is successful. While running the Raytracer, I am getting symbol lookup error: '~/vulkan-sim-root/mesa-vulkan-sim/lib/lib/x86_64-linux-gnu/libvulkan_intel.so: undefined symbol: gpgpusim_setGeometries'. Please have a look at it.
My environment is CUDA11.1, gcc9.4, boost1.71 and embree-3.13.4.
Hi,
I've freshly setup Vulkansim and Lumibench. While running Lumibench I'm encountering the following error:
./RayTracer: symbol lookup error: /home/anaitha2/vulkan-sim-root/mesa-vulkan-sim/lib/lib/x86_64-linux-gnu/libvulkan_lvp.so: undefined symbol: gpgpusim_allocBuffer
I was not facing this issue in my previous setups. What might be the possible reasons for this error and how do I resolve it? Any help is appreciated.
Hi,
I wanted to run the benchmarks for scene 1, 18, and 21 with width and height high enough (512 maybe) to see the effects of Reflections, Shadows, and AO. However, I was not able to run the scene because the execution gets 'Killed' prematurely in the middle of 'Bind miss... ' execution. The benchmark seems to running perfectly fine for all scenes with 128, 128 dimensions though.
Hi dear author,
It's an honor to write a letter here, I'm building vulkan-sim on NVIDIA 2080 tI gpu now, I meet the following errors when executing $ meson --prefix="${PWD}/lib" build/ , my python version is over 3.7 which is suggested by meson, but when installing python3.7, the error appears as following:
thank you
best regards
William
Hello, I have been trying the new vulkan-sim version with Lumibench and everything works perfectly, except for scene 12. After executing Ray Tracer with scene 12, default shader type, a size of 200x200 and 5 samples per pixel, the generated image is the following:
I tried generating the same image using the shadow shader with 5 samples per pixel and 5 shadow rays cast per ray, with the following result:
Also, for scene 13 (FOX) the head model was split in many small files, so I had to merge them. I thought the problem would be the same in this case, but it doesn't seem like that.
Also, when I opened the models for this scene in Blender, they had a weird position under the floor. Maybe this is causing the image to be empty? For example, this is _Grill_001.obj:
I am getting these errors. Kindly let me know how I can solve these errors.
Hello,
While running Lumibench, some of the scene numbers (24, 25, 26) are not in match with the README and result in errors.
It seems like simply commenting out the CS:GO scenes from RayTracingInVulkan/src/SceneLists.cpp resolves the issue.
It's minor, but I would greatly appreciate it if you could kindly look at it.
Thank you in advance!
I found a bug in the VulkanRayTracing::traceRay() function.
The closest hit selection somehow missed the condition to check the comparison of 'world_thit' with 'min_thit'
As a result the last checked primitive was being incorrectly selected as the closest hit instead of the on with the smallest 'world_thit'
vulkan-sim/src/cuda-sim/vulkan_ray_tracing.cc
Line 920 in dc742fa
Hi vulkan-sim team,
After running ./RayTracer --scene 12 --width 128 --height 128 --samples 8 > PARTY_PT.log
to generate a ppm file, when I use ppm viewer
to preview the ppm file, it indicates found: 49261, expecting: 49152.
I didn't encounter this error when previewing ppm files generated by other commands. I ran this command twice, and the ppm file showed the same result both times, so I guess it might be reproducible. (not sure if i did something wrong that caused this)
The relevant attachments have been uploaded. Because Git cannot upload files in ppm format, I changed the ppm file extension to txt before uploading it.
I would appreciate any information regarding this issue. Thank you.
Hi! This might be a dumb question - I was wondering if you have ever run multiple traces in parallel? If so, what is the set up?
For example, I want to launch vulkan-sim runs for the benchmarks here together:
https://github.com/ubc-aamodt-group/RayTracingInVulkan/blob/master/lumibench.sh
Each time I got different errors and the errors are not very self-explanatory. Most of them seem to point to concurrent writes to the same files. These errors never show up when I run them sequentially.
I digged into the code a bit and found that both the gpgpusim code and the mesa-vulkan-sim have some hardcoded paths. For gpgpusim, I believe I can prevent concurrent writes by creating multiple directories that contain the RayTracer binary and save the stats to different places. However, for mesa-vulkan-sim conflicts, the code seems to be pointing to mesa-vulkan-sim/gpgpusimShaders, and errors come from unexpected results when other processors rewrite the files. Creating multiple gpgpusimShaders directories didn't help and brought me other errors.
I was wondering if you know the best solution for this. Each run takes 20-30 mins on a single core so I'd love to speed them up by running multiple at once. Any help is appreciated!
I was tinkering with the RTV shaders in Lumibench, and I ran into a strange issue. You can reproduce it by making the following minimal changes to the TraceAO.rgen
shader,
vec3 pixelColor = vec3(0);
+ uint dummy = gl_LaunchIDEXT.x == 42 ? 10 : 20; // Line 29
// Accumulate all the rays for this pixels. (SPP)
for (uint s = 0; s < Camera.NumberOfSamples; ++s)
{
......
// debugPrintfEXT("[%d, %d] rgba(%f, %f, %f)\n", gl_LaunchIDEXT.x, gl_LaunchIDEXT.y, pixelColor.x, pixelColor.y, pixelColor.z);
+ imageStore(OutputImage, ivec2(dummy, gl_LaunchIDEXT.y), vec4(pixelColor, 0)); // Line 104
}
When you compile this shader and run it on vulkan-sim, it throws the following error while generating PTXINFO,
gpgpusim: invoking gpgpusim
GPGPU-Sim PTX: instruction assembly for function 'MESA_SHADER_RAYGEN_func0_main'... done.
GPGPU-Sim PTX: finished parsing EMBEDDED .ptx file /home/root/vulkan-sim-root/vulkan-sim/../mesa-vulkan-sim/gpgpusimShaders/MESA_SHADER_RAYGEN_0.ptx
GPGPUSIM: Generating PTXINFO for/home/root/vulkan-sim-root/vulkan-sim/../mesa-vulkan-sim/gpgpusimShaders/MESA_SHADER_RAYGEN_0.ptxinfo
ptxas temp_ptxas_shader.ptx, line 3320; error : Arguments mismatch for instruction 'mov'
ptxas fatal : Ptx assembly aborted due to errors
I dug into the PTX code(temp_ptxas_shader.ptx
) and found that the error is caused by a mov.f32
instruction whose argument is a u32
instead of f32
.reg .u32 %ssa_27_1;
mov.f32 %ssa_802_1, %ssa_27_1;
So the source operand appears to be u32
(which I believe is the dummy
variable we declared above), but I'm not sure why ptxas
considers this illegal.
System Info
When running a large project with more than one descriptor set is used, the index is always 0 in the PTX code. So my textures are just wrong. Cannot reference the correct descriptor set because of this.
The associated code is below:
https://github.com/ubc-aamodt-group/mesa-vulkan-sim/blob/b8f3e3980e87736fea176da6ebc81f82c6ea80e9/src/compiler/nir/nir_print.c#L5121-L5122
fprintf(fp, "decl_var %s, %d, %d, %d, %d, %u, %u;\t", var->name, size, glsl_get_vector_elements(var->type),
glsl_get_base_type(var->type), var->data.mode, var->data.driver_location, var->data.binding);
The descriptor set index from var->data.driver_location
. However, at least for me, var->data.descriptor_set
has the correct descriptor set index and should be used.
Is this a bug? Why is driver_location
used? I know there are other variable types. Do other variables use driver_location instead of var->data.descriptor_set
? Is it safe to change var->data.driver_location
to var->data.descriptor_set
directly?
Thanks,
JR
Hello,
when I tried to run the "./vulkan_rt_runner RTV6-trace/ RTV6, I got a segmentation fault. When I followed the tutorial instructions and rerun using gdb, I found that it crashes at VulkanRayTracing::traceRay
.
I'm not sure if this issue is due to not waiting for 'Trace dumped' to appear in the terminal when running RTV6. Because I did not find 'Trace dumped' in the terminal, but the terminal displayed the interface shown in the following figure, I felt that the program had already run. Could you please help me solve the segmentation fault? Thanks a lot.
Hi vulkansim team!
I noticed that in Lumibench paper, there is a comparison section that run Rodinia application. However, it seems that the functionality of simulating general purpose application is bit broken with my fresh build of vulkan-sim.
I guess it is because vulkan-sim bind and read/write memory in a different way than original gpgpu-sim at
vulkan-sim/src/cuda-sim/memory.cc
Line 165 in dc742fa
Can you please verify it?
Thanks!
Hello, I read the "Vulkan-Sim: A GPU Architecture Simulator for Ray Tracing" paper and there is a comparison between a scene rendered using a GPU from NVIDIA and Vulkan Sim. I tried running a trace with Vulkan Sim in order to get a render of the scene, but it only outputs stats. Would it be possible to generate an image or a set of frames by running a trace?
Hello,
when I try to run Lumibench on vulkan-sim 2.0.0, the program exits with a segmentation fault.
I've tried to run it on various settings (e.g., different servers, packages, scenes and resolutions), but similar errors consistently occurred.
The tested environments are as follows.
CPU: EPYC 7551, Xeon E5-2680v4, Core i7-13700K
OS: Ubuntu 20.04
CUDA: 11.7
Embree: v3.13.4, v3.12.2
Vulkan SDK: 1.3.216, 1.3.261
Here's the backtraces that I obtained from gdb.
I guess it might be something related to intersim2, but I couldn't really figure out the source of the error.
I would greatly appreciate it if you could kindly look at it.
Hello,
I was following the instructions for building the vulkan-sim and mesa, everything is looking good but when I tried to run the RTV6 to dump the trace, I ran ./RayTracer and got this X error of failed request.
I was using Ubuntu 20.04 with CUDA 11.7 ,gcc /g++ 9.4.0 and GPU is GTX 1080, I can run the RTV6 without involving vulkan-sim, any idea what might cause this error?
Hi,
Thanks for you efforts!
I'm wondering do rt cores use general purpose ldst unit?
In the code, it seems that the rt unit is able to issue memory access on its own (unlike tensor core). Am I right on this?
If the rt core indeed does not use general purpose ldst unit, could you please provide some reference (if there is any)?
Thanks
Hi,
I'm trying a workload with a texture format not supported yet (VK_FORMAT_R8_UNORM). I'm pretty sure it's very similar to VK_FORMAT_R8G8B8A8_SRGB or VK_FORMAT_R8G8B8A8_UNORM, which are formats supported by the Vulkan-Sim. The difference is VK_FORMAT_R8_UNORM only has one channel (R) instead of RGBA. Can I still use the intel_tiled_to_linear() to get the texture data? If not, do you have any suggestions on implementing the feature?
Please let me know what you think. Thank you in advance!
JR
Hi Vulkan-sim Team,
I am attempting to change parameters to generate more primary rays or secondary rays, but I am encoutering abort
and killed
errors.
Here aer the two scenarios I encountered:
When I run ./RayTracer --scene 18 --width 128 --height 128 --samples 2 > PARTY_PT.log
, the PPM file is generated successfully, completing in about 54 minutes on my local environment. However, when I change the parameters to ./RayTracer --scene 18 --width 256 --height 256--samples 2 > BUNNY_PT_w256.log
, the program gets killed after a few hours, and the log file is incomplete. I have attatched the log PARTY_PT_w256.log. It seems to be stuck somewhere.
When I run ./RayTracer --scene 30 --width 128 --height 128 --samples 8 > REF_PT.log
, the program aborts due to an assert failure. I have attached a sreenshot of it. It seems to have a complete log file, but I am concerned that the assert failure may have prevented all the rays from being fully generated.
I would greatly appreciate any insights or clarifications.
Thank you very much for your time and assistance.
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.