| @@ -218,12 +218,12 @@ int test_layer(int typeindex, const ncnn::ParamDict& pd, const std::vector<ncnn: | |||||
| ncnn::VkWeightBufferAllocator g_weight_vkallocator(vkdev); | ncnn::VkWeightBufferAllocator g_weight_vkallocator(vkdev); | ||||
| ncnn::VkWeightStagingBufferAllocator g_weight_staging_vkallocator(vkdev); | ncnn::VkWeightStagingBufferAllocator g_weight_staging_vkallocator(vkdev); | ||||
| ncnn::VkBlobBufferAllocator g_blob_vkallocator(vkdev); | |||||
| ncnn::VkStagingBufferAllocator g_staging_vkallocator(vkdev); | |||||
| ncnn::VkAllocator* blob_vkallocator = vkdev->acquire_blob_allocator(); | |||||
| ncnn::VkAllocator* staging_vkallocator = vkdev->acquire_staging_allocator(); | |||||
| opt.blob_vkallocator = &g_blob_vkallocator; | |||||
| opt.workspace_vkallocator = &g_blob_vkallocator; | |||||
| opt.staging_vkallocator = &g_staging_vkallocator; | |||||
| opt.blob_vkallocator = blob_vkallocator; | |||||
| opt.workspace_vkallocator = blob_vkallocator; | |||||
| opt.staging_vkallocator = staging_vkallocator; | |||||
| if (!vkdev->info.support_fp16_storage) opt.use_fp16_storage = false; | if (!vkdev->info.support_fp16_storage) opt.use_fp16_storage = false; | ||||
| if (!vkdev->info.support_fp16_packed) opt.use_fp16_packed = false; | if (!vkdev->info.support_fp16_packed) opt.use_fp16_packed = false; | ||||
| @@ -346,7 +346,7 @@ int test_layer(int typeindex, const ncnn::ParamDict& pd, const std::vector<ncnn: | |||||
| std::vector<ncnn::VkMat> a4_fp16_gpu(a4_fp16.size()); | std::vector<ncnn::VkMat> a4_fp16_gpu(a4_fp16.size()); | ||||
| for (size_t i=0; i<a4_fp16.size(); i++) | for (size_t i=0; i<a4_fp16.size(); i++) | ||||
| { | { | ||||
| a4_fp16_gpu[i].create_like(a4_fp16[i], &g_blob_vkallocator, &g_staging_vkallocator); | |||||
| a4_fp16_gpu[i].create_like(a4_fp16[i], opt.blob_vkallocator, opt.staging_vkallocator); | |||||
| a4_fp16_gpu[i].prepare_staging_buffer(); | a4_fp16_gpu[i].prepare_staging_buffer(); | ||||
| a4_fp16_gpu[i].upload(a4_fp16[i]); | a4_fp16_gpu[i].upload(a4_fp16[i]); | ||||
| } | } | ||||
| @@ -400,6 +400,13 @@ int test_layer(int typeindex, const ncnn::ParamDict& pd, const std::vector<ncnn: | |||||
| delete op; | delete op; | ||||
| #if NCNN_VULKAN | |||||
| vkdev->reclaim_blob_allocator(blob_vkallocator); | |||||
| vkdev->reclaim_staging_allocator(staging_vkallocator); | |||||
| g_weight_vkallocator.clear(); | |||||
| g_weight_staging_vkallocator.clear(); | |||||
| #endif // NCNN_VULKAN | |||||
| if (CompareMat(b, c, epsilon) != 0) | if (CompareMat(b, c, epsilon) != 0) | ||||
| { | { | ||||
| fprintf(stderr, "test_layer failed cpu\n"); | fprintf(stderr, "test_layer failed cpu\n"); | ||||
| @@ -439,12 +446,12 @@ int test_layer(int typeindex, const ncnn::ParamDict& pd, const std::vector<ncnn: | |||||
| ncnn::VkWeightBufferAllocator g_weight_vkallocator(vkdev); | ncnn::VkWeightBufferAllocator g_weight_vkallocator(vkdev); | ||||
| ncnn::VkWeightStagingBufferAllocator g_weight_staging_vkallocator(vkdev); | ncnn::VkWeightStagingBufferAllocator g_weight_staging_vkallocator(vkdev); | ||||
| ncnn::VkBlobBufferAllocator g_blob_vkallocator(vkdev); | |||||
| ncnn::VkStagingBufferAllocator g_staging_vkallocator(vkdev); | |||||
| ncnn::VkAllocator* blob_vkallocator = vkdev->acquire_blob_allocator(); | |||||
| ncnn::VkAllocator* staging_vkallocator = vkdev->acquire_staging_allocator(); | |||||
| opt.blob_vkallocator = &g_blob_vkallocator; | |||||
| opt.workspace_vkallocator = &g_blob_vkallocator; | |||||
| opt.staging_vkallocator = &g_staging_vkallocator; | |||||
| opt.blob_vkallocator = blob_vkallocator; | |||||
| opt.workspace_vkallocator = blob_vkallocator; | |||||
| opt.staging_vkallocator = staging_vkallocator; | |||||
| if (!vkdev->info.support_fp16_storage) opt.use_fp16_storage = false; | if (!vkdev->info.support_fp16_storage) opt.use_fp16_storage = false; | ||||
| if (!vkdev->info.support_fp16_packed) opt.use_fp16_packed = false; | if (!vkdev->info.support_fp16_packed) opt.use_fp16_packed = false; | ||||
| @@ -545,7 +552,7 @@ int test_layer(int typeindex, const ncnn::ParamDict& pd, const std::vector<ncnn: | |||||
| // upload | // upload | ||||
| ncnn::VkMat a4_fp16_gpu; | ncnn::VkMat a4_fp16_gpu; | ||||
| a4_fp16_gpu.create_like(a4_fp16, &g_blob_vkallocator, &g_staging_vkallocator); | |||||
| a4_fp16_gpu.create_like(a4_fp16, opt.blob_vkallocator, opt.staging_vkallocator); | |||||
| a4_fp16_gpu.prepare_staging_buffer(); | a4_fp16_gpu.prepare_staging_buffer(); | ||||
| a4_fp16_gpu.upload(a4_fp16); | a4_fp16_gpu.upload(a4_fp16); | ||||
| @@ -583,9 +590,10 @@ int test_layer(int typeindex, const ncnn::ParamDict& pd, const std::vector<ncnn: | |||||
| delete op; | delete op; | ||||
| #if NCNN_VULKAN | #if NCNN_VULKAN | ||||
| g_blob_vkallocator.clear(); | |||||
| g_staging_vkallocator.clear(); | |||||
| vkdev->reclaim_blob_allocator(blob_vkallocator); | |||||
| vkdev->reclaim_staging_allocator(staging_vkallocator); | |||||
| g_weight_vkallocator.clear(); | g_weight_vkallocator.clear(); | ||||
| g_weight_staging_vkallocator.clear(); | |||||
| #endif // NCNN_VULKAN | #endif // NCNN_VULKAN | ||||
| if (CompareMat(b, c, epsilon) != 0) | if (CompareMat(b, c, epsilon) != 0) | ||||