mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Clang-format tests, examples, libraries, benchmarks, etc.
This commit is contained in:
committed by
Rasmus Munk Larsen
parent
3252ecc7a4
commit
46e9cdb7fe
@@ -24,39 +24,39 @@ using Eigen::Tensor;
|
||||
static const int DataLayout = ColMajor;
|
||||
|
||||
template <typename DataType, typename IndexType>
|
||||
static void test_single_voxel_patch_sycl(const Eigen::SyclDevice& sycl_device)
|
||||
{
|
||||
static void test_single_voxel_patch_sycl(const Eigen::SyclDevice& sycl_device) {
|
||||
IndexType sizeDim0 = 4;
|
||||
IndexType sizeDim1 = 2;
|
||||
IndexType sizeDim2 = 3;
|
||||
IndexType sizeDim3 = 5;
|
||||
IndexType sizeDim4 = 7;
|
||||
array<IndexType, 5> tensorColMajorRange = {{sizeDim0, sizeDim1, sizeDim2, sizeDim3, sizeDim4}};
|
||||
array<IndexType, 5> tensorRowMajorRange = {{sizeDim4, sizeDim3, sizeDim2, sizeDim1, sizeDim0}};
|
||||
Tensor<DataType, 5, DataLayout, IndexType> tensor_col_major(tensorColMajorRange);
|
||||
Tensor<DataType, 5, RowMajor, IndexType> tensor_row_major(tensorRowMajorRange);
|
||||
tensor_col_major.setRandom();
|
||||
|
||||
IndexType sizeDim0 = 4;
|
||||
IndexType sizeDim1 = 2;
|
||||
IndexType sizeDim2 = 3;
|
||||
IndexType sizeDim3 = 5;
|
||||
IndexType sizeDim4 = 7;
|
||||
array<IndexType, 5> tensorColMajorRange = {{sizeDim0, sizeDim1, sizeDim2, sizeDim3, sizeDim4}};
|
||||
array<IndexType, 5> tensorRowMajorRange = {{sizeDim4, sizeDim3, sizeDim2, sizeDim1, sizeDim0}};
|
||||
Tensor<DataType, 5, DataLayout,IndexType> tensor_col_major(tensorColMajorRange);
|
||||
Tensor<DataType, 5, RowMajor,IndexType> tensor_row_major(tensorRowMajorRange);
|
||||
tensor_col_major.setRandom();
|
||||
|
||||
|
||||
DataType* gpu_data_col_major = static_cast<DataType*>(sycl_device.allocate(tensor_col_major.size()*sizeof(DataType)));
|
||||
DataType* gpu_data_row_major = static_cast<DataType*>(sycl_device.allocate(tensor_row_major.size()*sizeof(DataType)));
|
||||
DataType* gpu_data_col_major =
|
||||
static_cast<DataType*>(sycl_device.allocate(tensor_col_major.size() * sizeof(DataType)));
|
||||
DataType* gpu_data_row_major =
|
||||
static_cast<DataType*>(sycl_device.allocate(tensor_row_major.size() * sizeof(DataType)));
|
||||
TensorMap<Tensor<DataType, 5, ColMajor, IndexType>> gpu_col_major(gpu_data_col_major, tensorColMajorRange);
|
||||
TensorMap<Tensor<DataType, 5, RowMajor, IndexType>> gpu_row_major(gpu_data_row_major, tensorRowMajorRange);
|
||||
|
||||
sycl_device.memcpyHostToDevice(gpu_data_col_major, tensor_col_major.data(),(tensor_col_major.size())*sizeof(DataType));
|
||||
gpu_row_major.device(sycl_device)=gpu_col_major.swap_layout();
|
||||
|
||||
sycl_device.memcpyHostToDevice(gpu_data_col_major, tensor_col_major.data(),
|
||||
(tensor_col_major.size()) * sizeof(DataType));
|
||||
gpu_row_major.device(sycl_device) = gpu_col_major.swap_layout();
|
||||
|
||||
// single volume patch: ColMajor
|
||||
array<IndexType, 6> patchColMajorTensorRange={{sizeDim0,1, 1, 1, sizeDim1*sizeDim2*sizeDim3, sizeDim4}};
|
||||
Tensor<DataType, 6, DataLayout,IndexType> single_voxel_patch_col_major(patchColMajorTensorRange);
|
||||
size_t patchTensorBuffSize =single_voxel_patch_col_major.size()*sizeof(DataType);
|
||||
DataType* gpu_data_single_voxel_patch_col_major = static_cast<DataType*>(sycl_device.allocate(patchTensorBuffSize));
|
||||
TensorMap<Tensor<DataType, 6, DataLayout,IndexType>> gpu_single_voxel_patch_col_major(gpu_data_single_voxel_patch_col_major, patchColMajorTensorRange);
|
||||
gpu_single_voxel_patch_col_major.device(sycl_device)=gpu_col_major.extract_volume_patches(1, 1, 1);
|
||||
sycl_device.memcpyDeviceToHost(single_voxel_patch_col_major.data(), gpu_data_single_voxel_patch_col_major, patchTensorBuffSize);
|
||||
|
||||
array<IndexType, 6> patchColMajorTensorRange = {{sizeDim0, 1, 1, 1, sizeDim1 * sizeDim2 * sizeDim3, sizeDim4}};
|
||||
Tensor<DataType, 6, DataLayout, IndexType> single_voxel_patch_col_major(patchColMajorTensorRange);
|
||||
size_t patchTensorBuffSize = single_voxel_patch_col_major.size() * sizeof(DataType);
|
||||
DataType* gpu_data_single_voxel_patch_col_major = static_cast<DataType*>(sycl_device.allocate(patchTensorBuffSize));
|
||||
TensorMap<Tensor<DataType, 6, DataLayout, IndexType>> gpu_single_voxel_patch_col_major(
|
||||
gpu_data_single_voxel_patch_col_major, patchColMajorTensorRange);
|
||||
gpu_single_voxel_patch_col_major.device(sycl_device) = gpu_col_major.extract_volume_patches(1, 1, 1);
|
||||
sycl_device.memcpyDeviceToHost(single_voxel_patch_col_major.data(), gpu_data_single_voxel_patch_col_major,
|
||||
patchTensorBuffSize);
|
||||
|
||||
VERIFY_IS_EQUAL(single_voxel_patch_col_major.dimension(0), 4);
|
||||
VERIFY_IS_EQUAL(single_voxel_patch_col_major.dimension(1), 1);
|
||||
@@ -65,13 +65,15 @@ tensor_col_major.setRandom();
|
||||
VERIFY_IS_EQUAL(single_voxel_patch_col_major.dimension(4), 2 * 3 * 5);
|
||||
VERIFY_IS_EQUAL(single_voxel_patch_col_major.dimension(5), 7);
|
||||
|
||||
array<IndexType, 6> patchRowMajorTensorRange={{sizeDim4, sizeDim1*sizeDim2*sizeDim3, 1, 1, 1, sizeDim0}};
|
||||
Tensor<DataType, 6, RowMajor,IndexType> single_voxel_patch_row_major(patchRowMajorTensorRange);
|
||||
patchTensorBuffSize =single_voxel_patch_row_major.size()*sizeof(DataType);
|
||||
DataType* gpu_data_single_voxel_patch_row_major = static_cast<DataType*>(sycl_device.allocate(patchTensorBuffSize));
|
||||
TensorMap<Tensor<DataType, 6, RowMajor,IndexType>> gpu_single_voxel_patch_row_major(gpu_data_single_voxel_patch_row_major, patchRowMajorTensorRange);
|
||||
gpu_single_voxel_patch_row_major.device(sycl_device)=gpu_row_major.extract_volume_patches(1, 1, 1);
|
||||
sycl_device.memcpyDeviceToHost(single_voxel_patch_row_major.data(), gpu_data_single_voxel_patch_row_major, patchTensorBuffSize);
|
||||
array<IndexType, 6> patchRowMajorTensorRange = {{sizeDim4, sizeDim1 * sizeDim2 * sizeDim3, 1, 1, 1, sizeDim0}};
|
||||
Tensor<DataType, 6, RowMajor, IndexType> single_voxel_patch_row_major(patchRowMajorTensorRange);
|
||||
patchTensorBuffSize = single_voxel_patch_row_major.size() * sizeof(DataType);
|
||||
DataType* gpu_data_single_voxel_patch_row_major = static_cast<DataType*>(sycl_device.allocate(patchTensorBuffSize));
|
||||
TensorMap<Tensor<DataType, 6, RowMajor, IndexType>> gpu_single_voxel_patch_row_major(
|
||||
gpu_data_single_voxel_patch_row_major, patchRowMajorTensorRange);
|
||||
gpu_single_voxel_patch_row_major.device(sycl_device) = gpu_row_major.extract_volume_patches(1, 1, 1);
|
||||
sycl_device.memcpyDeviceToHost(single_voxel_patch_row_major.data(), gpu_data_single_voxel_patch_row_major,
|
||||
patchTensorBuffSize);
|
||||
|
||||
VERIFY_IS_EQUAL(single_voxel_patch_row_major.dimension(0), 7);
|
||||
VERIFY_IS_EQUAL(single_voxel_patch_row_major.dimension(1), 2 * 3 * 5);
|
||||
@@ -80,14 +82,14 @@ tensor_col_major.setRandom();
|
||||
VERIFY_IS_EQUAL(single_voxel_patch_row_major.dimension(4), 1);
|
||||
VERIFY_IS_EQUAL(single_voxel_patch_row_major.dimension(5), 4);
|
||||
|
||||
sycl_device.memcpyDeviceToHost(tensor_row_major.data(), gpu_data_row_major, (tensor_col_major.size())*sizeof(DataType));
|
||||
for (IndexType i = 0; i < tensor_col_major.size(); ++i) {
|
||||
VERIFY_IS_EQUAL(tensor_col_major.data()[i], single_voxel_patch_col_major.data()[i]);
|
||||
sycl_device.memcpyDeviceToHost(tensor_row_major.data(), gpu_data_row_major,
|
||||
(tensor_col_major.size()) * sizeof(DataType));
|
||||
for (IndexType i = 0; i < tensor_col_major.size(); ++i) {
|
||||
VERIFY_IS_EQUAL(tensor_col_major.data()[i], single_voxel_patch_col_major.data()[i]);
|
||||
VERIFY_IS_EQUAL(tensor_row_major.data()[i], single_voxel_patch_row_major.data()[i]);
|
||||
VERIFY_IS_EQUAL(tensor_col_major.data()[i], tensor_row_major.data()[i]);
|
||||
}
|
||||
|
||||
|
||||
sycl_device.deallocate(gpu_data_col_major);
|
||||
sycl_device.deallocate(gpu_data_row_major);
|
||||
sycl_device.deallocate(gpu_data_single_voxel_patch_col_major);
|
||||
@@ -95,8 +97,7 @@ tensor_col_major.setRandom();
|
||||
}
|
||||
|
||||
template <typename DataType, typename IndexType>
|
||||
static void test_entire_volume_patch_sycl(const Eigen::SyclDevice& sycl_device)
|
||||
{
|
||||
static void test_entire_volume_patch_sycl(const Eigen::SyclDevice& sycl_device) {
|
||||
const int depth = 4;
|
||||
const int patch_z = 2;
|
||||
const int patch_y = 3;
|
||||
@@ -105,37 +106,42 @@ static void test_entire_volume_patch_sycl(const Eigen::SyclDevice& sycl_device)
|
||||
|
||||
array<IndexType, 5> tensorColMajorRange = {{depth, patch_z, patch_y, patch_x, batch}};
|
||||
array<IndexType, 5> tensorRowMajorRange = {{batch, patch_x, patch_y, patch_z, depth}};
|
||||
Tensor<DataType, 5, DataLayout,IndexType> tensor_col_major(tensorColMajorRange);
|
||||
Tensor<DataType, 5, RowMajor,IndexType> tensor_row_major(tensorRowMajorRange);
|
||||
Tensor<DataType, 5, DataLayout, IndexType> tensor_col_major(tensorColMajorRange);
|
||||
Tensor<DataType, 5, RowMajor, IndexType> tensor_row_major(tensorRowMajorRange);
|
||||
tensor_col_major.setRandom();
|
||||
|
||||
DataType* gpu_data_col_major =
|
||||
static_cast<DataType*>(sycl_device.allocate(tensor_col_major.size() * sizeof(DataType)));
|
||||
DataType* gpu_data_row_major =
|
||||
static_cast<DataType*>(sycl_device.allocate(tensor_row_major.size() * sizeof(DataType)));
|
||||
TensorMap<Tensor<DataType, 5, ColMajor, IndexType>> gpu_col_major(gpu_data_col_major, tensorColMajorRange);
|
||||
TensorMap<Tensor<DataType, 5, RowMajor, IndexType>> gpu_row_major(gpu_data_row_major, tensorRowMajorRange);
|
||||
|
||||
DataType* gpu_data_col_major = static_cast<DataType*>(sycl_device.allocate(tensor_col_major.size()*sizeof(DataType)));
|
||||
DataType* gpu_data_row_major = static_cast<DataType*>(sycl_device.allocate(tensor_row_major.size()*sizeof(DataType)));
|
||||
TensorMap<Tensor<DataType, 5, ColMajor, IndexType>> gpu_col_major(gpu_data_col_major, tensorColMajorRange);
|
||||
TensorMap<Tensor<DataType, 5, RowMajor, IndexType>> gpu_row_major(gpu_data_row_major, tensorRowMajorRange);
|
||||
sycl_device.memcpyHostToDevice(gpu_data_col_major, tensor_col_major.data(),
|
||||
(tensor_col_major.size()) * sizeof(DataType));
|
||||
gpu_row_major.device(sycl_device) = gpu_col_major.swap_layout();
|
||||
sycl_device.memcpyDeviceToHost(tensor_row_major.data(), gpu_data_row_major,
|
||||
(tensor_col_major.size()) * sizeof(DataType));
|
||||
|
||||
sycl_device.memcpyHostToDevice(gpu_data_col_major, tensor_col_major.data(),(tensor_col_major.size())*sizeof(DataType));
|
||||
gpu_row_major.device(sycl_device)=gpu_col_major.swap_layout();
|
||||
sycl_device.memcpyDeviceToHost(tensor_row_major.data(), gpu_data_row_major, (tensor_col_major.size())*sizeof(DataType));
|
||||
// single volume patch: ColMajor
|
||||
array<IndexType, 6> patchColMajorTensorRange = {
|
||||
{depth, patch_z, patch_y, patch_x, patch_z * patch_y * patch_x, batch}};
|
||||
Tensor<DataType, 6, DataLayout, IndexType> entire_volume_patch_col_major(patchColMajorTensorRange);
|
||||
size_t patchTensorBuffSize = entire_volume_patch_col_major.size() * sizeof(DataType);
|
||||
DataType* gpu_data_entire_volume_patch_col_major = static_cast<DataType*>(sycl_device.allocate(patchTensorBuffSize));
|
||||
TensorMap<Tensor<DataType, 6, DataLayout, IndexType>> gpu_entire_volume_patch_col_major(
|
||||
gpu_data_entire_volume_patch_col_major, patchColMajorTensorRange);
|
||||
gpu_entire_volume_patch_col_major.device(sycl_device) =
|
||||
gpu_col_major.extract_volume_patches(patch_z, patch_y, patch_x);
|
||||
sycl_device.memcpyDeviceToHost(entire_volume_patch_col_major.data(), gpu_data_entire_volume_patch_col_major,
|
||||
patchTensorBuffSize);
|
||||
|
||||
// Tensor<float, 5> tensor(depth, patch_z, patch_y, patch_x, batch);
|
||||
// tensor.setRandom();
|
||||
// Tensor<float, 5, RowMajor> tensor_row_major = tensor.swap_layout();
|
||||
|
||||
// single volume patch: ColMajor
|
||||
array<IndexType, 6> patchColMajorTensorRange={{depth,patch_z, patch_y, patch_x, patch_z*patch_y*patch_x, batch}};
|
||||
Tensor<DataType, 6, DataLayout,IndexType> entire_volume_patch_col_major(patchColMajorTensorRange);
|
||||
size_t patchTensorBuffSize =entire_volume_patch_col_major.size()*sizeof(DataType);
|
||||
DataType* gpu_data_entire_volume_patch_col_major = static_cast<DataType*>(sycl_device.allocate(patchTensorBuffSize));
|
||||
TensorMap<Tensor<DataType, 6, DataLayout,IndexType>> gpu_entire_volume_patch_col_major(gpu_data_entire_volume_patch_col_major, patchColMajorTensorRange);
|
||||
gpu_entire_volume_patch_col_major.device(sycl_device)=gpu_col_major.extract_volume_patches(patch_z, patch_y, patch_x);
|
||||
sycl_device.memcpyDeviceToHost(entire_volume_patch_col_major.data(), gpu_data_entire_volume_patch_col_major, patchTensorBuffSize);
|
||||
|
||||
|
||||
// Tensor<float, 5> tensor(depth, patch_z, patch_y, patch_x, batch);
|
||||
// tensor.setRandom();
|
||||
// Tensor<float, 5, RowMajor> tensor_row_major = tensor.swap_layout();
|
||||
|
||||
//Tensor<float, 6> entire_volume_patch;
|
||||
//entire_volume_patch = tensor.extract_volume_patches(patch_z, patch_y, patch_x);
|
||||
// Tensor<float, 6> entire_volume_patch;
|
||||
// entire_volume_patch = tensor.extract_volume_patches(patch_z, patch_y, patch_x);
|
||||
VERIFY_IS_EQUAL(entire_volume_patch_col_major.dimension(0), depth);
|
||||
VERIFY_IS_EQUAL(entire_volume_patch_col_major.dimension(1), patch_z);
|
||||
VERIFY_IS_EQUAL(entire_volume_patch_col_major.dimension(2), patch_y);
|
||||
@@ -143,17 +149,20 @@ static void test_entire_volume_patch_sycl(const Eigen::SyclDevice& sycl_device)
|
||||
VERIFY_IS_EQUAL(entire_volume_patch_col_major.dimension(4), patch_z * patch_y * patch_x);
|
||||
VERIFY_IS_EQUAL(entire_volume_patch_col_major.dimension(5), batch);
|
||||
|
||||
// Tensor<float, 6, RowMajor> entire_volume_patch_row_major;
|
||||
//entire_volume_patch_row_major = tensor_row_major.extract_volume_patches(patch_z, patch_y, patch_x);
|
||||
|
||||
array<IndexType, 6> patchRowMajorTensorRange={{batch,patch_z*patch_y*patch_x, patch_x, patch_y, patch_z, depth}};
|
||||
Tensor<DataType, 6, RowMajor,IndexType> entire_volume_patch_row_major(patchRowMajorTensorRange);
|
||||
patchTensorBuffSize =entire_volume_patch_row_major.size()*sizeof(DataType);
|
||||
DataType* gpu_data_entire_volume_patch_row_major = static_cast<DataType*>(sycl_device.allocate(patchTensorBuffSize));
|
||||
TensorMap<Tensor<DataType, 6, RowMajor,IndexType>> gpu_entire_volume_patch_row_major(gpu_data_entire_volume_patch_row_major, patchRowMajorTensorRange);
|
||||
gpu_entire_volume_patch_row_major.device(sycl_device)=gpu_row_major.extract_volume_patches(patch_z, patch_y, patch_x);
|
||||
sycl_device.memcpyDeviceToHost(entire_volume_patch_row_major.data(), gpu_data_entire_volume_patch_row_major, patchTensorBuffSize);
|
||||
// Tensor<float, 6, RowMajor> entire_volume_patch_row_major;
|
||||
// entire_volume_patch_row_major = tensor_row_major.extract_volume_patches(patch_z, patch_y, patch_x);
|
||||
|
||||
array<IndexType, 6> patchRowMajorTensorRange = {
|
||||
{batch, patch_z * patch_y * patch_x, patch_x, patch_y, patch_z, depth}};
|
||||
Tensor<DataType, 6, RowMajor, IndexType> entire_volume_patch_row_major(patchRowMajorTensorRange);
|
||||
patchTensorBuffSize = entire_volume_patch_row_major.size() * sizeof(DataType);
|
||||
DataType* gpu_data_entire_volume_patch_row_major = static_cast<DataType*>(sycl_device.allocate(patchTensorBuffSize));
|
||||
TensorMap<Tensor<DataType, 6, RowMajor, IndexType>> gpu_entire_volume_patch_row_major(
|
||||
gpu_data_entire_volume_patch_row_major, patchRowMajorTensorRange);
|
||||
gpu_entire_volume_patch_row_major.device(sycl_device) =
|
||||
gpu_row_major.extract_volume_patches(patch_z, patch_y, patch_x);
|
||||
sycl_device.memcpyDeviceToHost(entire_volume_patch_row_major.data(), gpu_data_entire_volume_patch_row_major,
|
||||
patchTensorBuffSize);
|
||||
|
||||
VERIFY_IS_EQUAL(entire_volume_patch_row_major.dimension(0), batch);
|
||||
VERIFY_IS_EQUAL(entire_volume_patch_row_major.dimension(1), patch_z * patch_y * patch_x);
|
||||
@@ -184,8 +193,7 @@ static void test_entire_volume_patch_sycl(const Eigen::SyclDevice& sycl_device)
|
||||
const int eff_z = z - forward_pad_z + pz;
|
||||
const int eff_y = y - forward_pad_y + py;
|
||||
const int eff_x = x - forward_pad_x + px;
|
||||
if (eff_z >= 0 && eff_y >= 0 && eff_x >= 0 &&
|
||||
eff_z < patch_z && eff_y < patch_y && eff_x < patch_x) {
|
||||
if (eff_z >= 0 && eff_y >= 0 && eff_x >= 0 && eff_z < patch_z && eff_y < patch_y && eff_x < patch_x) {
|
||||
expected = tensor_col_major(d, eff_z, eff_y, eff_x, b);
|
||||
expected_row_major = tensor_row_major(b, eff_x, eff_y, eff_z, d);
|
||||
}
|
||||
@@ -205,19 +213,17 @@ static void test_entire_volume_patch_sycl(const Eigen::SyclDevice& sycl_device)
|
||||
sycl_device.deallocate(gpu_data_entire_volume_patch_row_major);
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<typename DataType, typename dev_Selector> void sycl_tensor_volume_patch_test_per_device(dev_Selector s){
|
||||
QueueInterface queueInterface(s);
|
||||
auto sycl_device = Eigen::SyclDevice(&queueInterface);
|
||||
std::cout << "Running on " << s.template get_info<cl::sycl::info::device::name>() << std::endl;
|
||||
test_single_voxel_patch_sycl<DataType, int64_t>(sycl_device);
|
||||
test_entire_volume_patch_sycl<DataType, int64_t>(sycl_device);
|
||||
}
|
||||
EIGEN_DECLARE_TEST(cxx11_tensor_volume_patch_sycl)
|
||||
{
|
||||
for (const auto& device :Eigen::get_sycl_supported_devices()) {
|
||||
CALL_SUBTEST(sycl_tensor_volume_patch_test_per_device<half>(device));
|
||||
CALL_SUBTEST(sycl_tensor_volume_patch_test_per_device<float>(device));
|
||||
template <typename DataType, typename dev_Selector>
|
||||
void sycl_tensor_volume_patch_test_per_device(dev_Selector s) {
|
||||
QueueInterface queueInterface(s);
|
||||
auto sycl_device = Eigen::SyclDevice(&queueInterface);
|
||||
std::cout << "Running on " << s.template get_info<cl::sycl::info::device::name>() << std::endl;
|
||||
test_single_voxel_patch_sycl<DataType, int64_t>(sycl_device);
|
||||
test_entire_volume_patch_sycl<DataType, int64_t>(sycl_device);
|
||||
}
|
||||
EIGEN_DECLARE_TEST(cxx11_tensor_volume_patch_sycl) {
|
||||
for (const auto& device : Eigen::get_sycl_supported_devices()) {
|
||||
CALL_SUBTEST(sycl_tensor_volume_patch_test_per_device<half>(device));
|
||||
CALL_SUBTEST(sycl_tensor_volume_patch_test_per_device<float>(device));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user