使用K3硬件平台成功利用配套的GPU实现通用并行计算(GPGPU),性能比K1硬件平台大幅提升!

注:呈上测试报告,如果进一步优化算法,性能还可以提升。

./gemm_benchmark --size 1024 --tile 1024

Matrix: 1024x1024x1024, Tile: 1024
[HandleManager] Default constructor, this = 0x2b0418d8b0
[HandleManager] Default constructor, this = 0x2b041eb670
[HandleManager] Default constructor, this = 0x2b04290ca0
[HandleManager] Default constructor, this = 0x2b0428acb0
[HandleManager] Default constructor, this = 0x2b0421c690
[HandleManager] Default constructor, this = 0x2b0421c570
[HandleManager] Default constructor, this = 0x2b04260e10
[HandleManager] Default constructor, this = 0x2b04204f20
[HandleManager] Default constructor, this = 0x2b0428b3d0
[HandleManager] Default constructor, this = 0x2b0428b460
[HandleManager] Default constructor, this = 0x2b04284830
[HandleManager] Default constructor, this = 0x2b04159a50
[HandleManager] Default constructor, this = 0x2b041ac4f0
[HandleManager] Default constructor, this = 0x2b041bc0d0
[HandleManager] Default constructor, this = 0x2b04259850
[HandleManager] Default constructor, this = 0x2b04198dc0
[HandleManager] Default constructor, this = 0x2b0428aff0
[HandleManager] Default constructor, this = 0x2b0421d670
[INFO] Device constructor called, this = 0x2b04328f00

════════════════════════════════════════════════════════════
[Device] initialize ENTRY
[Device] this = 0x2b04328f00
════════════════════════════════════════════════════════════

[INFO] Initializing device with component-based architecture

[Device] Step 1: Creating graphics API…
[Factory] create() called, type=0, GRAPHICS_API_VULKAN=defined
[Factory] Creating VulkanGraphicsAPI
[VulkanGraphicsAPI] Constructed
[Device] Step 1 ✓ API created: Vulkan

[Device] Step 2: Initializing graphics API…
[VULKAN INFO] No valid vk_loader_settings.json file found, no loader settings will be active
[VULKAN INFO] Searching for implicit layer manifest files
[VULKAN INFO] In following locations:
[VULKAN INFO] /home/eddle/.config/vulkan/implicit_layer.d
[VULKAN INFO] /etc/vulkan/implicit_layer.d
[VULKAN INFO] /etc/xdg/vulkan/implicit_layer.d
[VULKAN INFO] /usr/share/vulkan/implicit_layer.d
[VULKAN INFO] /home/eddle/.local/share/vulkan/implicit_layer.d
[VULKAN INFO] /usr/local/share/vulkan/implicit_layer.d
[VULKAN INFO] Found the following files:
[VULKAN INFO] /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[VULKAN INFO] Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version 1.0.0)
[VULKAN INFO] Searching for explicit layer manifest files
[VULKAN INFO] In following locations:
[VULKAN INFO] /home/eddle/.config/vulkan/explicit_layer.d
[VULKAN INFO] /etc/vulkan/explicit_layer.d
[VULKAN INFO] /etc/xdg/vulkan/explicit_layer.d
[VULKAN INFO] /usr/share/vulkan/explicit_layer.d
[VULKAN INFO] /home/eddle/.local/share/vulkan/explicit_layer.d
[VULKAN INFO] /usr/local/share/vulkan/explicit_layer.d
[VULKAN INFO] Found the following files:
[VULKAN INFO] /usr/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json
[VULKAN INFO] /usr/share/vulkan/explicit_layer.d/VkLayer_khronos_validation.json
[VULKAN INFO] Found manifest file /usr/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json (file version 1.0.0)
[VULKAN INFO] Found manifest file /usr/share/vulkan/explicit_layer.d/VkLayer_khronos_validation.json (file version 1.2.0)
[VULKAN INFO] Searching for driver manifest files
[VULKAN INFO] In following locations:
[VULKAN INFO] /home/eddle/.config/vulkan/icd.d
[VULKAN INFO] /etc/vulkan/icd.d
[VULKAN INFO] /etc/xdg/vulkan/icd.d
[VULKAN INFO] /usr/share/vulkan/icd.d
[VULKAN INFO] /home/eddle/.local/share/vulkan/icd.d
[VULKAN INFO] /usr/local/share/vulkan/icd.d
[VULKAN INFO] Found the following files:
[VULKAN INFO] /etc/vulkan/icd.d/powervr_icd.json
[VULKAN INFO] Found ICD manifest file /etc/vulkan/icd.d/powervr_icd.json, version 1.0.0
[VULKAN VERBOSE] Searching for ICD drivers named libVK_IMG.so
[VULKAN VERBOSE] Loading layer library libVkLayer_khronos_validation.so
[VULKAN INFO] Insert instance layer “VK_LAYER_KHRONOS_validation” (/usr/lib/riscv64-linux-gnu/libVkLayer_khronos_validation.so)
[VULKAN VERBOSE] Loading layer library libVkLayer_MESA_device_select.so
[VULKAN INFO] Insert instance layer “VK_LAYER_MESA_device_select” (/usr/lib/riscv64-linux-gnu/libVkLayer_MESA_device_select.so)
[VULKAN INFO] vkCreateInstance layer callstack setup to:
[VULKAN INFO]
[VULKAN INFO] ||
[VULKAN INFO]
[VULKAN INFO] ||
[VULKAN INFO] VK_LAYER_MESA_device_select
[VULKAN INFO] Type: Implicit
[VULKAN INFO] Enabled By: Implicit Layer
[VULKAN INFO] Disable Env Var: NODEVICE_SELECT
[VULKAN INFO] Manifest: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
[VULKAN INFO] Library: /usr/lib/riscv64-linux-gnu/libVkLayer_MESA_device_select.so
[VULKAN INFO] ||
[VULKAN INFO] VK_LAYER_KHRONOS_validation
[VULKAN INFO] Type: Explicit
[VULKAN INFO] Enabled By: By the Application
[VULKAN INFO] Manifest: /usr/share/vulkan/explicit_layer.d/VkLayer_khronos_validation.json
[VULKAN INFO] Library: /usr/lib/riscv64-linux-gnu/libVkLayer_khronos_validation.so
[VULKAN INFO] ||
[VULKAN INFO]
[VULKAN INFO] vkCreateInstance(): Khronos Validation Layer Active:
Current Enables: None.
Current Disables: None.

[VULKAN INFO] linux_read_sorted_physical_devices:
[VULKAN INFO] Original order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN INFO] Sorted order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN INFO] linux_read_sorted_physical_devices:
[VULKAN INFO] Original order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN INFO] Sorted order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN VERBOSE] Copying old device 0 into new device 0
[VULKAN INFO] linux_read_sorted_physical_devices:
[VULKAN INFO] Original order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN INFO] Sorted order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN VERBOSE] Copying old device 0 into new device 0
[VULKAN INFO] linux_read_sorted_physical_devices:
[VULKAN INFO] Original order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN INFO] Sorted order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN VERBOSE] Copying old device 0 into new device 0
[Vulkan] Creating Wayland surface
[VULKAN INFO] linux_read_sorted_physical_devices:
[VULKAN INFO] Original order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN INFO] Sorted order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN VERBOSE] Copying old device 0 into new device 0
[VULKAN INFO] linux_read_sorted_physical_devices:
[VULKAN INFO] Original order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN INFO] Sorted order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN VERBOSE] Copying old device 0 into new device 0
[VULKAN INFO] linux_read_sorted_physical_devices:
[VULKAN INFO] Original order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN INFO] Sorted order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN VERBOSE] Copying old device 0 into new device 0
[VULKAN INFO] linux_read_sorted_physical_devices:
[VULKAN INFO] Original order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN INFO] Sorted order:
[VULKAN INFO] [0] PowerVR B-Series BXM-4-64 MC1
[VULKAN VERBOSE] Copying old device 0 into new device 0
[DEBUG] Total Queue Families: 1
[DEBUG] Family 0: queueCount=2, flags=0xf GRAPHICS COMPUTE TRANSFER
[DEBUG] -----------------------------
[DEBUG] Total Queue Families: 1
[DEBUG] Family 0: queueCount=2, flags=0xf GRAPHICS COMPUTE TRANSFER
[DEBUG] -----------------------------
[Vulkan] Selected: PowerVR B-Series BXM-4-64 MC1 (score: 1065)
[DEBUG] Total Queue Families: 1
[DEBUG] Family 0: queueCount=2, flags=0xf GRAPHICS COMPUTE TRANSFER
[DEBUG] -----------------------------
[VULKAN INFO] Inserted device layer “VK_LAYER_KHRONOS_validation” (/usr/lib/riscv64-linux-gnu/libVkLayer_khronos_validation.so)
[VULKAN INFO] Failed to find vkGetDeviceProcAddr in layer “/usr/lib/riscv64-linux-gnu/libVkLayer_MESA_device_select.so”
[VULKAN INFO] vkCreateDevice layer callstack setup to:
[VULKAN INFO]
[VULKAN INFO] ||
[VULKAN INFO]
[VULKAN INFO] ||
[VULKAN INFO] VK_LAYER_KHRONOS_validation
[VULKAN INFO] Type: Explicit
[VULKAN INFO] Enabled By: By the Application
[VULKAN INFO] Manifest: /usr/share/vulkan/explicit_layer.d/VkLayer_khronos_validation.json
[VULKAN INFO] Library: /usr/lib/riscv64-linux-gnu/libVkLayer_khronos_validation.so
[VULKAN INFO] ||
[VULKAN INFO]
[VULKAN INFO] Using “PowerVR B-Series BXM-4-64 MC1” with driver: “/usr/lib/libVK_IMG.so”
[DEBUG] Queue Capabilities:
[DEBUG] Total Families: 1
[DEBUG] Family 0: queueCount=2, flags=0xf GRAPHICS COMPUTE TRANSFER SPARSE_BINDING
[DEBUG] Max Graphics Queues: 2
[DEBUG] Max Compute Queues: 2
[DEBUG] Max Transfer Queues: 2
[DEBUG] Async Compute: NO
[DEBUG] Async Transfer: NO
[Vulkan] Context initialized successfully
[VulkanGraphicsAPI] Descriptor indexing - updateAfterBind: NO
[VulkanGraphicsAPI] Initialized successfully
[Device] Step 2 ✓ API initialized

[Device] Step 3: Creating swapchain manager…
[SwapchainManager] ========== CONSTRUCTOR START ==========
[SwapchainManager] ========== CONSTRUCTOR END ==========
[Device] Step 3 ✓ Swapchain manager created

[Device] Step 4: Creating swapchain…

════════════════════════════════════════════════════════════
[SwapchainManager] internalCreate() ENTRY
[SwapchainManager] this = 0x2b043668d0
[SwapchainManager] m_context = 0x2b040e1900
[SwapchainManager] surface = 0x20000000002
[SwapchainManager] Creating VulkanSwapchain…
[VulkanSwapchain] Creating swapchain
[VulkanSwapchain] chooseSwapSurfaceFormat:
Requested format: 44
Requested colorSpace: 0
Available formats:
[0] format=44, colorSpace=0
[1] format=50, colorSpace=0
[2] format=43, colorSpace=0
[3] format=37, colorSpace=0
[4] format=4, colorSpace=0
✓ Found exact match: format=44
[VulkanSwapchain] Created 4 images
[VulkanSwapchain] Creating image views for 4 frames
[VulkanSwapchain] All image views created successfully
[VulkanSwapchain] Depth format set to: 126
[VulkanSwapchain] Created successfully

[SwapchainManager] internalCreate() SUCCESS
════════════════════════════════════════════════════════════

[Device] Step 4 ✓ Swapchain created with 4 images
[SwapchainManager] registerSwapchainResourcesToDevice() ENTRY
[SwapchainManager] device = 0x2b04328f00
[SwapchainManager] unregisterSwapchainResourcesFromDevice() ENTRY
[SwapchainManager] device = 0x2b04328f00
[SwapchainManager] destroySwapchainImageViews() ENTRY
[SwapchainManager] m_imageViewHandles count: 0
[SwapchainManager] m_swapchainDepthTextures count: 0
[SwapchainManager] m_swapchainDepthImageViews count: 0
[SwapchainManager] m_swapchainTextureHandles count: 0
[SwapchainManager] :white_check_mark: All swapchain image view handles unregistered
[SwapchainManager] :white_check_mark: All swapchain texture handles unwrapped
[SwapchainManager] :white_check_mark: All depth textures destroyed
[SwapchainManager] :white_check_mark: All depth image views cleared (already destroyed with textures)
[SwapchainManager] destroySwapchainImageViews() COMPLETED
[SwapchainManager] :white_check_mark: Destroyed sync objects
[SwapchainManager] unregisterSwapchainResourcesFromDevice() COMPLETED
[SwapchainManager] Creating image view handles…
[INFO] Created image view: 1 (view=0xb000000000b, image=0x70000000007, SwapchainImageView_0, owns=false, swapchain=true)
[SwapchainManager] :white_check_mark: Registered image view 0: handle=1
[INFO] Created image view: 2 (view=0xc000000000c, image=0x80000000008, SwapchainImageView_1, owns=false, swapchain=true)
[SwapchainManager] :white_check_mark: Registered image view 1: handle=2
[INFO] Created image view: 3 (view=0xd000000000d, image=0x90000000009, SwapchainImageView_2, owns=false, swapchain=true)
[SwapchainManager] :white_check_mark: Registered image view 2: handle=3
[INFO] Created image view: 4 (view=0xe000000000e, image=0xa000000000a, SwapchainImageView_3, owns=false, swapchain=true)
[SwapchainManager] :white_check_mark: Registered image view 3: handle=4
[SwapchainManager] Creating sync objects…
[SwapchainManager] :white_check_mark: Destroyed sync objects
[INFO] Registered semaphore: 1 (0x230000000023, SwapchainAcquire_0, owns=false)
[INFO] Registered semaphore: 2 (0x240000000024, SwapchainImageAvailable_0, owns=false)
[INFO] Registered semaphore: 3 (0x250000000025, SwapchainRenderFinished_0, owns=false)
[INFO] Registered fence: 1 (0x260000000026, SwapchainFence_0, owns=false)
[INFO] Registered semaphore: 4 (0x270000000027, SwapchainAcquire_1, owns=false)
[INFO] Registered semaphore: 5 (0x280000000028, SwapchainImageAvailable_1, owns=false)
[INFO] Registered semaphore: 6 (0x290000000029, SwapchainRenderFinished_1, owns=false)
[INFO] Registered fence: 2 (0x2a000000002a, SwapchainFence_1, owns=false)
[INFO] Registered semaphore: 7 (0x2b000000002b, SwapchainAcquire_2, owns=false)
[INFO] Registered semaphore: 8 (0x2c000000002c, SwapchainImageAvailable_2, owns=false)
[INFO] Registered semaphore: 9 (0x2d000000002d, SwapchainRenderFinished_2, owns=false)
[INFO] Registered fence: 3 (0x2e000000002e, SwapchainFence_2, owns=false)
[INFO] Registered semaphore: 10 (0x2f000000002f, SwapchainAcquire_3, owns=false)
[INFO] Registered semaphore: 11 (0x300000000030, SwapchainImageAvailable_3, owns=false)
[INFO] Registered semaphore: 12 (0x310000000031, SwapchainRenderFinished_3, owns=false)
[INFO] Registered fence: 4 (0x320000000032, SwapchainFence_3, owns=false)
[SwapchainManager] :white_check_mark: Created 4 sync objects (3 semaphores + 1 fence each)
[SwapchainManager] Creating framebuffers…
[TextureResource] ERROR: view is null!
[TextureResource] Constructed: SwapchainTexture_0, texture=0x70000000007, view=0, size=1280x720, format=B8G8R8A8_UNORM
[INFO] Created swapchain texture: SwapchainTexture_0, handle=1, imageView=1, nativeImage=0x70000000007, 1280x720, format=B8G8R8A8_UNORM
11:46:45 [INFO] Registered swapchain texture index=0, handle=1
[DEBUG] createTexture: D32_SFLOAT → VkFormat=126, size=1280x720
[TextureResource] Constructed: SwapchainDepth_0, texture=0x330000000033, view=0x350000000035, size=1280x720, format=D32_SFLOAT
[INFO] Created texture: SwapchainDepth_0, 1280x720, format=D32_SFLOAT, handle=2
[INFO] Created image view: 5 (view=0x350000000035, image=0x330000000033, SwapchainDepthView_0, owns=true, swapchain=false)
[INFO] Created render pass: DefaultRenderPass, handle=1
11:46:45 [WARN] Created framebuffer ‘Swapchain Framebuffer 0’ (type=2, handle=1, attachments=2, 1280x720, native=0x370000000037)
[createSwapchainFramebuffers] Created framebuffer 0 with texture handle 1
[TextureResource] ERROR: view is null!
[TextureResource] Constructed: SwapchainTexture_1, texture=0x80000000008, view=0, size=1280x720, format=B8G8R8A8_UNORM
[INFO] Created swapchain texture: SwapchainTexture_1, handle=3, imageView=2, nativeImage=0x80000000008, 1280x720, format=B8G8R8A8_UNORM
11:46:45 [INFO] Registered swapchain texture index=1, handle=3
[DEBUG] createTexture: D32_SFLOAT → VkFormat=126, size=1280x720
[TextureResource] Constructed: SwapchainDepth_1, texture=0x380000000038, view=0x3a000000003a, size=1280x720, format=D32_SFLOAT
[INFO] Created texture: SwapchainDepth_1, 1280x720, format=D32_SFLOAT, handle=4
[INFO] Created image view: 6 (view=0x3a000000003a, image=0x380000000038, SwapchainDepthView_1, owns=true, swapchain=false)
11:46:45 [WARN] Created framebuffer ‘Swapchain Framebuffer 1’ (type=2, handle=2, attachments=2, 1280x720, native=0x3b000000003b)
[createSwapchainFramebuffers] Created framebuffer 1 with texture handle 3
[TextureResource] ERROR: view is null!
[TextureResource] Constructed: SwapchainTexture_2, texture=0x90000000009, view=0, size=1280x720, format=B8G8R8A8_UNORM
[INFO] Created swapchain texture: SwapchainTexture_2, handle=5, imageView=3, nativeImage=0x90000000009, 1280x720, format=B8G8R8A8_UNORM
11:46:45 [INFO] Registered swapchain texture index=2, handle=5
[DEBUG] createTexture: D32_SFLOAT → VkFormat=126, size=1280x720
[TextureResource] Constructed: SwapchainDepth_2, texture=0x3c000000003c, view=0x3e000000003e, size=1280x720, format=D32_SFLOAT
[INFO] Created texture: SwapchainDepth_2, 1280x720, format=D32_SFLOAT, handle=6
[INFO] Created image view: 7 (view=0x3e000000003e, image=0x3c000000003c, SwapchainDepthView_2, owns=true, swapchain=false)
11:46:45 [WARN] Created framebuffer ‘Swapchain Framebuffer 2’ (type=2, handle=3, attachments=2, 1280x720, native=0x3f000000003f)
[createSwapchainFramebuffers] Created framebuffer 2 with texture handle 5
[TextureResource] ERROR: view is null!
[TextureResource] Constructed: SwapchainTexture_3, texture=0xa000000000a, view=0, size=1280x720, format=B8G8R8A8_UNORM
[INFO] Created swapchain texture: SwapchainTexture_3, handle=7, imageView=4, nativeImage=0xa000000000a, 1280x720, format=B8G8R8A8_UNORM
11:46:45 [INFO] Registered swapchain texture index=3, handle=7
[DEBUG] createTexture: D32_SFLOAT → VkFormat=126, size=1280x720
[TextureResource] Constructed: SwapchainDepth_3, texture=0x400000000040, view=0x420000000042, size=1280x720, format=D32_SFLOAT
[INFO] Created texture: SwapchainDepth_3, 1280x720, format=D32_SFLOAT, handle=8
[INFO] Created image view: 8 (view=0x420000000042, image=0x400000000040, SwapchainDepthView_3, owns=true, swapchain=false)
11:46:45 [WARN] Created framebuffer ‘Swapchain Framebuffer 3’ (type=2, handle=4, attachments=2, 1280x720, native=0x430000000043)
[createSwapchainFramebuffers] Created framebuffer 3 with texture handle 7
[createSwapchainFramebuffers] Successfully created 4 framebuffers
[SwapchainManager] :white_check_mark: Registered framebuffer 0 to Device cache: handle=1
[SwapchainManager] :white_check_mark: Registered framebuffer 1 to Device cache: handle=2
[SwapchainManager] :white_check_mark: Registered framebuffer 2 to Device cache: handle=3
[SwapchainManager] :white_check_mark: Registered framebuffer 3 to Device cache: handle=4
[SwapchainManager] registerSwapchainResourcesToDevice() SUCCESS

[Device] Step 5: Initializing resource tracking…
[INFO] Initializing resource tracking
[Device] Step 5 ✓ Resource tracking initialized

[Device] Step 6: Starting worker threads…
[Device] Step 6 ✓ Worker threads started

[Device] Step 8: Auto-loading components…
[2026-05-10 11:46:45] [INFO] [200878] [gemm_compute_pass.cpp:142 detectOptimalMode] GEMM: Using Standard Storage Buffer mode
[2026-05-10 11:46:45] [INFO] [200878] [gemm_compute_pass.cpp:58 loadSpirvFromFile] GEMM: Loaded SPIR-V from: /home/eddle/Documents/3DGameMovieEngine/core/build/tests/graphics/compute/shaders/gemm_shader.spv, size=21232 bytes
[INFO] Created shader module: GEMMPass_CS, size=21232, handle=1
[DEBUG] createDescriptorSetLayout: useUpdateAfterBind=NO
[DEBUG] createDescriptorSetLayout: m_capabilities address=0x2b041e9ef0
[DEBUG] createDescriptorSetLayout: layoutFlags=0
[DEBUG] createDescriptorSetLayout: bindingFlags.size()=0
[DEBUG] createDescriptorSetLayout: No binding flags, pNext=nullptr
[DEBUG] Creating descriptor set layout:
flags: 0
bindingCount: 3
Binding 0:
binding: 0
descriptorType: 7
descriptorCount: 1
stageFlags: 32
pImmutableSamplers: 0
Binding 1:
binding: 1
descriptorType: 7
descriptorCount: 1
stageFlags: 32
pImmutableSamplers: 0
Binding 2:
binding: 2
descriptorType: 7
descriptorCount: 1
stageFlags: 32
pImmutableSamplers: 0
[INFO] Created descriptor set layout: GEMMPass_Layout, handle=1
[2026-05-10 11:46:45] [INFO] [200878] [gemm_compute_pass.cpp:400 createDescriptorSetLayout] GEMM: Created descriptor set layout
[DEBUG] Converted 1 descriptor set layouts to native pointers
[Vulkan] Created compute pipeline: GEMMPass_Pipeline
11:46:45 [WARN] Created compute pipeline ‘GEMMPass_Pipeline’ successfully
[INFO] Allocated descriptor set: GEMMPass_DescSet, handle=1
[2026-05-10 11:46:45] [INFO] [200878] [gemm_compute_pass.cpp:214 initialize] GEMMComputePass: Initialized (mode=Standard Storage Buffer (GPU), blockSize: 16x4x8, sharedMem: true)
[2026-05-10 11:46:45] [INFO] [200878] [gemm_compute_pass.cpp:220 initialize] GEMMComputePass: Warming up…
[INFO] Allocated command buffer: GEMM_Warmup, handle=1
[INFO] Created buffer: WarmupTemp, size=4, handle=1
[DEBUG] Updated descriptor set with 3 writes
[INFO] CommandBuffer handle 1 is in use, waiting for GPU…
[INFO] GPU idle, now freeing command buffer
[INFO] Freed command buffer handle: 1
11:46:45 [WARN] Component ‘GEMM’ added successfully

════════════════════════════════════════════════════════════
[Device] ✓ Device initialized successfully!
════════════════════════════════════════════════════════════

[2026-05-10 11:46:45] [INFO] [200878] [gemm_compute_pass.cpp:142 detectOptimalMode] GEMM: Using Standard Storage Buffer mode
[2026-05-10 11:46:45] [INFO] [200878] [gemm_compute_pass.cpp:58 loadSpirvFromFile] GEMM: Loaded SPIR-V from: /home/eddle/Documents/3DGameMovieEngine/core/build/tests/graphics/compute/shaders/gemm_shader.spv, size=21232 bytes
[INFO] Created shader module: TiledGEMM_CS, size=21232, handle=2
[DEBUG] createDescriptorSetLayout: useUpdateAfterBind=NO
[DEBUG] createDescriptorSetLayout: m_capabilities address=0x2b041e9ef0
[DEBUG] createDescriptorSetLayout: layoutFlags=0
[DEBUG] createDescriptorSetLayout: bindingFlags.size()=0
[DEBUG] createDescriptorSetLayout: No binding flags, pNext=nullptr
[DEBUG] Creating descriptor set layout:
flags: 0
bindingCount: 3
Binding 0:
binding: 0
descriptorType: 7
descriptorCount: 1
stageFlags: 32
pImmutableSamplers: 0
Binding 1:
binding: 1
descriptorType: 7
descriptorCount: 1
stageFlags: 32
pImmutableSamplers: 0
Binding 2:
binding: 2
descriptorType: 7
descriptorCount: 1
stageFlags: 32
pImmutableSamplers: 0
[INFO] Created descriptor set layout: TiledGEMM_Layout, handle=2
[2026-05-10 11:46:45] [INFO] [200878] [gemm_compute_pass.cpp:400 createDescriptorSetLayout] GEMM: Created descriptor set layout
[DEBUG] Converted 1 descriptor set layouts to native pointers
[Vulkan] Created compute pipeline: TiledGEMM_Pipeline
11:46:45 [WARN] Created compute pipeline ‘TiledGEMM_Pipeline’ successfully
[INFO] Allocated descriptor set: TiledGEMM_DescSet, handle=2
[2026-05-10 11:46:45] [INFO] [200878] [gemm_compute_pass.cpp:214 initialize] GEMMComputePass: Initialized (mode=Standard Storage Buffer (GPU), blockSize: 32x32x64, sharedMem: false)
[2026-05-10 11:46:45] [INFO] [200878] [gemm_compute_pass.cpp:220 initialize] GEMMComputePass: Warming up…
[INFO] Allocated command buffer: GEMM_Warmup, handle=2
[INFO] Created buffer: WarmupTemp, size=4, handle=2
[DEBUG] Updated descriptor set with 3 writes
[INFO] CommandBuffer handle 2 is in use, waiting for GPU…
[INFO] GPU idle, now freeing command buffer
[INFO] Freed command buffer handle: 2

=== Queue Capabilities (Auto-Detected) ===
Total Families: 1
Family 0: queueCount=2 GRAPHICS COMPUTE TRANSFER SPARSE_BINDING
Max Graphics Queues: 2
Max Compute Queues: 2
Max Transfer Queues: 2
Async Compute: NO
Async Transfer: NO
Strategy: DUAL Compute Queue (4-buffer pipeline)

[INFO] Created buffer: TileGpuA, size=4194304, handle=3
[INFO] Created buffer: TileGpuB, size=4194304, handle=4
[INFO] Created buffer: TileGpuC, size=4194304, handle=5
[INFO] Allocated descriptor set: TileDescSet, handle=3
[DEBUG] Updated descriptor set with 3 writes
[INFO] Created fence: TileFence, handle=5
[INFO] Allocated command buffer: TileCmd, handle=3
[INFO] Created buffer: TileGpuA, size=4194304, handle=6
[INFO] Created buffer: TileGpuB, size=4194304, handle=7
[INFO] Created buffer: TileGpuC, size=4194304, handle=8
[INFO] Allocated descriptor set: TileDescSet, handle=4
[DEBUG] Updated descriptor set with 3 writes
[INFO] Created fence: TileFence, handle=6
[INFO] Allocated command buffer: TileCmd, handle=4
[INFO] Created buffer: TileGpuA, size=4194304, handle=9
[INFO] Created buffer: TileGpuB, size=4194304, handle=10
[INFO] Created buffer: TileGpuC, size=4194304, handle=11
[INFO] Allocated descriptor set: TileDescSet, handle=5
[DEBUG] Updated descriptor set with 3 writes
[INFO] Created fence: TileFence, handle=7
[INFO] Allocated command buffer: TileCmd, handle=5
[INFO] Created buffer: TileGpuA, size=4194304, handle=12
[INFO] Created buffer: TileGpuB, size=4194304, handle=13
[INFO] Created buffer: TileGpuC, size=4194304, handle=14
[INFO] Allocated descriptor set: TileDescSet, handle=6
[DEBUG] Updated descriptor set with 3 writes
[INFO] Created fence: TileFence, handle=8
[INFO] Allocated command buffer: TileCmd, handle=6
Tiled GEMM 1024x1024x1024 (tile 1024x1024, 1 tiles, 2 queues): 643.626 ms
Max error: 9.536743e-06
[INFO] Freed descriptor set handle: 3
[INFO] CommandBuffer handle 3 is in use, waiting for GPU…
[INFO] GPU idle, now freeing command buffer
[INFO] Freed command buffer handle: 3
[INFO] Freed descriptor set handle: 4
[INFO] Freed command buffer handle: 4
[INFO] Freed descriptor set handle: 5
[INFO] Freed command buffer handle: 5
[INFO] Freed descriptor set handle: 6
[INFO] Freed command buffer handle: 6
[INFO] Freed descriptor set handle: 2
[2026-05-10 11:46:46] [INFO] [200878] [gemm_compute_pass.cpp:309 shutdown] GEMMComputePass: Shutdown complete (mode=Standard Storage Buffer (GPU))
[Device] Destroying device…
[Device] Step 1/14: Shutting down all components
[INFO] Freed descriptor set handle: 1
[2026-05-10 11:46:46] [INFO] [200878] [gemm_compute_pass.cpp:309 shutdown] GEMMComputePass: Shutdown complete (mode=Standard Storage Buffer (GPU))
[Device] Step 1/14: ✓ Components shut down
[Device] Step 2/14: Stopping worker threads
[Device] Stopping 2 worker threads
[Device] All worker threads stopped
[Device] Step 2/14: ✓ Worker threads stopped
[Device] Step 3/14: Waiting for device idle
[Device] Step 3/14: ✓ Device idle
[Device] Step 4/14: Processing deferred destruction queues
[Device] Step 4/14: ✓ Deferred destruction queues processed
[Device] Step 5/14: First cleanup of deferred destruction queues
[Device] Step 5/14: ✓ First cleanup completed
[Device] Step 6/14: Destroying anti-aliasing resources
11:46:46 [WARN] Destroying MSAA resources
11:46:46 [WARN] MSAA resources destroyed successfully
[Device] Step 6/14: ✓ Anti-aliasing resources destroyed
[Device] Step 7/14: Destroying depth resources
[Device] Step 7/14: ✓ Depth resources destroyed
[Device] Step 8/14: Clearing cache maps
[Device] Step 8/14: ✓ Cache maps cleared
[Device] Step 9/14: Unregistering swapchain resources
[SwapchainManager] unregisterSwapchainResourcesFromDevice() ENTRY
[SwapchainManager] device = 0x2b04328f00
[SwapchainManager] destroySwapchainImageViews() ENTRY
[SwapchainManager] m_imageViewHandles count: 4
[SwapchainManager] m_swapchainDepthTextures count: 4
[SwapchainManager] m_swapchainDepthImageViews count: 4
[SwapchainManager] m_swapchainTextureHandles count: 4
[INFO] Unregistered image view handle: 1
[SwapchainManager] :white_check_mark: Unregistered image view handle: 1
[INFO] Unregistered image view handle: 2
[SwapchainManager] :white_check_mark: Unregistered image view handle: 2
[INFO] Unregistered image view handle: 3
[SwapchainManager] :white_check_mark: Unregistered image view handle: 3
[INFO] Unregistered image view handle: 4
[SwapchainManager] :white_check_mark: Unregistered image view handle: 4
[SwapchainManager] :white_check_mark: All swapchain image view handles unregistered
[SwapchainManager] :white_check_mark: Unwrapped swapchain texture handle: 1
[SwapchainManager] :white_check_mark: Unwrapped swapchain texture handle: 3
[SwapchainManager] :white_check_mark: Unwrapped swapchain texture handle: 5
[SwapchainManager] :white_check_mark: Unwrapped swapchain texture handle: 7
[SwapchainManager] :white_check_mark: All swapchain texture handles unwrapped
[SwapchainManager] Destroying depth texture handle: 2
[INFO] Destroyed texture: Texture:SwapchainDepth_0, handle=2
[SwapchainManager] Destroying depth texture handle: 4
[INFO] Destroyed texture: Texture:SwapchainDepth_1, handle=4
[SwapchainManager] Destroying depth texture handle: 6
[INFO] Destroyed texture: Texture:SwapchainDepth_2, handle=6
[SwapchainManager] Destroying depth texture handle: 8
[INFO] Destroyed texture: Texture:SwapchainDepth_3, handle=8
[SwapchainManager] :white_check_mark: All depth textures destroyed
[SwapchainManager] :white_check_mark: All depth image views cleared (already destroyed with textures)
[SwapchainManager] destroySwapchainImageViews() COMPLETED
[INFO] Unregistered fence handle: 1
[INFO] Unregistered fence handle: 2
[INFO] Unregistered fence handle: 3
[INFO] Unregistered fence handle: 4
[INFO] Unregistered semaphore handle: 1
[INFO] Unregistered semaphore handle: 2
[INFO] Unregistered semaphore handle: 3
[INFO] Unregistered semaphore handle: 4
[INFO] Unregistered semaphore handle: 5
[INFO] Unregistered semaphore handle: 6
[INFO] Unregistered semaphore handle: 7
[INFO] Unregistered semaphore handle: 8
[INFO] Unregistered semaphore handle: 9
[INFO] Unregistered semaphore handle: 10
[INFO] Unregistered semaphore handle: 11
[INFO] Unregistered semaphore handle: 12
[SwapchainManager] :white_check_mark: Destroyed sync objects
[SwapchainManager] unregisterSwapchainResourcesFromDevice() COMPLETED
[Device] Step 9/14: ✓ Swapchain resources unregistered
[Device] Step 10/14: Second cleanup of deferred destruction queues (from swapchain)
[Device] Destroyed 0 remaining deferred resources
[Device] Step 10/14: ✓ Second cleanup completed
[Device] Step 10.5/14: Destroying remaining resources in managers by strategy
[Device] Destroying 1 render passes from RenderPassManager
[Device] Destroyed 1 remaining resources
[Device] Step 10.5/14: ✓ Resources destroyed by strategy
[Device] Step 11/14: Clearing resource managers
[Device] Step 11/14: ✓ Resource managers cleared
[Device] Step 12/14: Destroying swapchain and window resources

[SwapchainManager] cleanupHandles() ENTRY
[SwapchainManager] cleanupHandles() COMPLETED
[VulkanSwapchain] Destroying swapchain
[VulkanSwapchain] m_initialized: 1
[VulkanSwapchain] frames count: 4
[VulkanSwapchain] A - Waiting for device idle…
[VulkanSwapchain] B - Destroying framebuffers…
[VulkanSwapchain] Destroyed 4 framebuffers
[VulkanSwapchain] C - Destroying render pass…
[VulkanSwapchain] Destroyed render pass
[VulkanSwapchain] D - Destroying sync objects…
[VulkanSwapchain] Destroyed 8 semaphores, 4 fences
[VulkanSwapchain] E - Destroying swapchain…
[VulkanSwapchain] F - Destroying image views…
[VulkanSwapchain] Destroyed 4 image views
[VulkanSwapchain] G - Destroying depth resources…
[VulkanSwapchain] Destroyed depth image view
[VulkanSwapchain] Destroyed depth image
[VulkanSwapchain] Freed depth image memory
[VulkanSwapchain] Clearing frames and images…
[VulkanSwapchain] Destroyed
[VulkanSwapchain] Destructor
[VulkanSwapchain] Destroying swapchain
[VulkanSwapchain] m_initialized: 0
[VulkanSwapchain] frames count: 0
[VulkanSwapchain] SKIPPED: device=1, initialized=0

[SwapchainManager] cleanupHandles() ENTRY
[SwapchainManager] cleanupHandles() COMPLETED
[Device] Step 12/14: ✓ Swapchain destroyed
[Device] Step 13/14: Clearing frame data
[Device] Step 13/14: ✓ Frame data cleared
[Device] Step 14/14: Destroying underlying API
[VulkanGraphicsAPI] Cleaning up…
[VULKAN VERBOSE] Unloading layer library /usr/lib/riscv64-linux-gnu/libVkLayer_MESA_device_select.so
[VULKAN VERBOSE] Unloading layer library /usr/lib/riscv64-linux-gnu/libVkLayer_khronos_validation.so
[Vulkan] Context cleaned up
[VulkanGraphicsAPI] Destroyed
[Device] Step 14/14: ✓ API destroyed
[Device] Device destroyed successfully
[INFO] Device destructor called
[HandleManager] Destructor, this = 0x2b0421d670
[HandleManager] Destructor, this = 0x2b0428aff0
[HandleManager] Destructor, this = 0x2b04198dc0
[HandleManager] Destructor, this = 0x2b04259850
[HandleManager] Destructor, this = 0x2b041bc0d0
[HandleManager] Destructor, this = 0x2b041ac4f0
[HandleManager] Destructor, this = 0x2b04159a50
[HandleManager] Destructor, this = 0x2b04284830
[HandleManager] Destructor, this = 0x2b0428b460
[HandleManager] Destructor, this = 0x2b0428b3d0
[HandleManager] Destructor, this = 0x2b04204f20
[HandleManager] Destructor, this = 0x2b04260e10
[HandleManager] Destructor, this = 0x2b0421c570
[HandleManager] Destructor, this = 0x2b0421c690
[HandleManager] Destructor, this = 0x2b0428acb0
[HandleManager] Destructor, this = 0x2b04290ca0
[HandleManager] Destructor, this = 0x2b041eb670
[HandleManager] Destructor, this = 0x2b0418d8b0