mirror of
https://github.com/ROCm/composable_kernel.git
synced 2026-05-11 08:50:17 +00:00
Common forward convolution utility refactor. (#141)
* Convolution ND * Code unification across dimensions for generating tensor descriptors. * Example * Instances * Move convnd f32 instance file to comply with repo structure. * Conv 1D tensor layouts. * Formatting and use ReferenceConv * Reference ConvFwd supporting 1D and 2D convolution. * Debug printing TensorLayout name. * Conv fwd 1D instance f32 * Refactor conv ND example. Needed to support various conv dimensio. Needed to support various conv dimensions * Rename conv nd example director to prevent conflicts. * Refactor some common utility to single file. Plus some tests. * Refactor GetHostTensorDescriptor + UT. * Add 1D test case. * Test reference convolution 1d/2d * Remove some leftovers. * Fix convolution example error for 1D * Refactor test check errors utility function. * Test Conv2D Fwd XDL * More UT for 1D case. * Parameterize input & weight initializers. * Rename example to prevent conflicts. * Split convnd instance into separate files for 1d/2d * Address review comments. * Fix data type for flops/gbytes calculations. * Assign example number 11. * 3D cases for convolution utility functions. * 3D reference convolution. * Add support for 3D convolution. * Check for inputs bigger than 2GB. * Formatting * Support for bf16/f16/f32/i8 - conv instances + UT. * Use check_err from test_util.hpp. * Split convnd test into separate files for each dim. * Fix data generation and use proper instances. * Formatting * Skip tensor initialization if not necessary. * Fix CMakefiles. * Remove redundant conv2d_fwd test. * Lower problem size for conv3D UT. * 3D case for convnd example. * Remove leftovers after merge. * Add Conv Specialization string to GetTypeString * Skip instance causing numerical errors. * Small fixes. * Remove redundant includes. * Fix namespace name error. * Script for automatic testing and logging convolution fwd UTs * Comment out numactl cmd. * Refine weights initalization and relax rtol for fp16 * Move test_util.hpp to check_err.hpp * Refine weights initalization and relax rtol for fp16 * Refactor common part of test conv utils. * Move utility function to single common place. * Add additional common functions to utility. * Refactor convnd_fwd_xdl examples. * Remove redundant files. * Unify structure. * Add constructor to ConvParams. * And add input parameters validation. * Modify conv examples to use single utility file. * Remove check_error from host_tensor.hpp * Get rid of check_indices function. * Remove bf16_to_f32 function overload for scalars. * Fix namespace. * Add half_float::half for check_err. * Fix conv params size in UT. * Fix weights initialization for int8. * Fix weights initialization for int8. * Add type_convert when store output in ref conv 1D. * Get back old conv2d_fwd_xdl operation. * Silence conv debug print. * format * clean * clean * Fix merge. * Fix namespace for check_err * Formatting. * Fix merge artifacts. * Remove deleted header. * Fix some includes and use ck::utils::check_err. * Remove unused check_indices restored by previous merge. * Fix namespaces after merge. * Fix compilation error. * Small fixes. * Use common functions. * Fix filename * Fix namespaces. * Fix merge artifact - retrieve removed by accident fun. * Fix ConvForwardSpecialization. * Adhere to coding style rules. * Fix merge artifacts. Co-authored-by: Adam Osewski <aosewski@amd.com> Co-authored-by: Chao Liu <chao.liu2@amd.com>
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
#include <cstdlib>
|
||||
#include <stdlib.h>
|
||||
#include <half.hpp>
|
||||
|
||||
#include "check_err.hpp"
|
||||
#include "config.hpp"
|
||||
#include "magic_division.hpp"
|
||||
#include "device.hpp"
|
||||
@@ -54,29 +56,6 @@ __host__ void cpu_magic_number_division(uint32_t magic_multiplier,
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T check_error(const std::vector<T>& ref, const std::vector<T>& result)
|
||||
{
|
||||
T error = 0;
|
||||
T max_diff = 0;
|
||||
T ref_value = 0, result_value = 0;
|
||||
|
||||
for(std::size_t i = 0; i < ref.size(); ++i)
|
||||
{
|
||||
T diff = std::abs(ref[i] - result[i]);
|
||||
error += diff;
|
||||
|
||||
if(max_diff < diff)
|
||||
{
|
||||
max_diff = diff;
|
||||
ref_value = ref[i];
|
||||
result_value = result[i];
|
||||
}
|
||||
}
|
||||
|
||||
return max_diff;
|
||||
}
|
||||
|
||||
int main(int, char*[])
|
||||
{
|
||||
uint64_t num_divisor = 4096;
|
||||
@@ -135,9 +114,9 @@ int main(int, char*[])
|
||||
naive_result_dev_buf.FromDevice(naive_result_host.data());
|
||||
magic_result_dev_buf.FromDevice(magic_result_host.data());
|
||||
|
||||
int32_t max_diff = check_error(naive_result_host, magic_result_host);
|
||||
bool res = ck::utils::check_err(magic_result_host, naive_result_host);
|
||||
|
||||
if(max_diff != 0)
|
||||
if(!res)
|
||||
{
|
||||
pass = false;
|
||||
continue;
|
||||
@@ -149,9 +128,9 @@ int main(int, char*[])
|
||||
magic_result_host2.data(),
|
||||
num_dividend);
|
||||
|
||||
max_diff = check_error(naive_result_host, magic_result_host2);
|
||||
res = ck::utils::check_err(magic_result_host2, naive_result_host);
|
||||
|
||||
if(max_diff != 0)
|
||||
if(!res)
|
||||
{
|
||||
pass = false;
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user