← 返回首页
broadcasting in af_arith for binary operations by syurkevi · Pull Request #2871 · arrayfire/arrayfire · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus
Prev Previous commit
Next Next commit
update tile to common:: namespace
  • Loading branch information
syurkevi committed Jul 5, 2022
commit 456815d6e9e39f021adfac7e92ac7350a8b6d2f4
8 changes: 4 additions & 4 deletions src/api/c/binary.cpp
Show comments View file Edit file Delete file Open in desktop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
#include <common/ArrayInfo.hpp>
#include <common/err_common.hpp>
#include <common/moddims.hpp>
#include <common/tile.hpp>
#include <handle.hpp>
#include <implicit.hpp>
#include <optypes.hpp>
#include <sparse.hpp>
#include <sparse_handle.hpp>
#include <tile.hpp>
#include <af/arith.h>
#include <af/array.h>
#include <af/data.h>
Expand All @@ -32,13 +32,13 @@ using af::dim4;
using af::dtype;
using common::half;
using common::modDims;
using common::tile;
using detail::arithOp;
using detail::arithOpD;
using detail::Array;
using detail::cdouble;
using detail::cfloat;
using detail::intl;
using detail::tile;
using detail::uchar;
using detail::uint;
using detail::uintl;
Expand Down Expand Up @@ -84,8 +84,8 @@ static inline af_array arithOpBroadcast(const af_array lhs,
}
}

Array<T> lhst = tile<T>(modDims(getArray<T>(lhs), lshape), ltile);
Array<T> rhst = tile<T>(modDims(getArray<T>(rhs), rshape), rtile);
Array<T> lhst = common::tile<T>(modDims(getArray<T>(lhs), lshape), ltile);
Array<T> rhst = common::tile<T>(modDims(getArray<T>(rhs), rshape), rtile);

return getHandle(arithOp<T, op>(lhst, rhst, odims));
}
Expand Down
25 changes: 13 additions & 12 deletions test/binary.cpp
Show comments View file Edit file Delete file Open in desktop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -715,7 +715,7 @@ TEST_P(Broadcast, AdditionLHSIndexed) {

af::dim4 outdims = broadcastOut(get<0>(params), rhs.dims());
af::array indexedlhs = lhs(seq(lhs_dims[0]), seq(lhs_dims[1]),
seq(lhs_dims[2]), seq(lhs_dims[3]));
seq(lhs_dims[2]), seq(lhs_dims[3]));
af::dim4 tilerepetions = tileRepeations(get<0>(params), rhs.dims());
af::array tiledlhs = tile(indexedlhs, tilerepetions);

Expand Down Expand Up @@ -758,15 +758,15 @@ TEST_P(Broadcast, AdditionBothIndexed) {
rhs(seq(rhs_dims[0]), seq(rhs_dims[1]), seq(rhs_dims[2]),
seq(rhs_dims[3]));

af::dim4 outdims = broadcastOut(lhs_dims, rhs_dims);
af::array indexedlhs = lhs(seq(lhs_dims[0]), seq(lhs_dims[1]),
seq(lhs_dims[2]), seq(lhs_dims[3])); af::dim4 tilerepetions =
tileRepeations(get<0>(params), get<1>(params)); af::array tiledlhs =
tile(indexedlhs, tilerepetions);
af::dim4 outdims = broadcastOut(lhs_dims, rhs_dims);
af::array indexedlhs = lhs(seq(lhs_dims[0]), seq(lhs_dims[1]),
seq(lhs_dims[2]), seq(lhs_dims[3]));
af::dim4 tilerepetions = tileRepeations(get<0>(params), get<1>(params));
af::array tiledlhs = tile(indexedlhs, tilerepetions);

vector<float> outvec(outdims.elements());
tiledlhs.host(outvec.data());
for(auto& out : outvec) { out += 1; }
for (auto &out : outvec) { out += 1; }

ASSERT_VEC_ARRAY_EQ(outvec, outdims, out);
}
Expand Down Expand Up @@ -819,10 +819,10 @@ TEST(Broadcast, VectorMatrix4d) {
void testAllBroadcast(dim4 dims) {
af::array A = constant(1, dims);
for (int k = 0; k < dims.ndims(); ++k) {
dim4 rdims = dims;
rdims[k] = 1;
af::array B = constant(-1, rdims);
af::array C = A + B;
dim4 rdims = dims;
rdims[k] = 1;
af::array B = constant(-1, rdims);
af::array C = A + B;
ASSERT_ARRAYS_EQ(C, constant(0, dims));

C = B + A;
Expand Down Expand Up @@ -903,7 +903,8 @@ TEST(Broadcast, SubArrays) {
af::array A = constant(1, dim4(10, 10, 2));
af::array B = constant(2, dim4(15, 15));

af::array C = A(seq(subdim), seq(subdim), span) + B(seq(subdim), seq(subdim));
af::array C =
A(seq(subdim), seq(subdim), span) + B(seq(subdim), seq(subdim));
ASSERT_ARRAYS_EQ(C, constant(3, dim4(subdim, subdim, 2)));

C = B(seq(subdim), seq(subdim)) + A(seq(subdim), seq(subdim), span);
Expand Down
Toggle all file notes Toggle all file annotations

Footer

© 2026 GitHub, Inc.