本文整理汇总了C++中af::dim4方法的典型用法代码示例。如果您正苦于以下问题:C++ af::dim4方法的具体用法?C++ af::dim4怎么用?C++ af::dim4使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类af
的用法示例。
在下文中一共展示了af::dim4方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sparseArithTesterMul
void sparseArithTesterMul(const int m, const int n, int factor, const double eps)
{
deviceGC();
if (noDoubleTests<T>()) return;
#if 1
array A = cpu_randu<T>(dim4(m, n));
array B = cpu_randu<T>(dim4(m, n));
#else
array A = randu(m, n, (dtype)dtype_traits<T>::af_type);
array B = randu(m, n, (dtype)dtype_traits<T>::af_type);
#endif
A = makeSparse<T>(A, factor);
array RA = sparse(A, AF_STORAGE_CSR);
array OA = sparse(A, AF_STORAGE_COO);
// Forward
{
// Arith Op
array resR = arith_op<af_mul_t>()(RA, B);
array resO = arith_op<af_mul_t>()(OA, B);
// We will test this by converting the COO to CSR and CSR to COO and
// comparing them. In essense, we are comparing the resR and resO
// TODO: Make a better comparison using dense
// Check resR against conR
array conR = sparseConvertTo(resR, AF_STORAGE_CSR);
sparseCompare<T>(resR, conR, eps);
// Check resO against conO
array conO = sparseConvertTo(resR, AF_STORAGE_COO);
sparseCompare<T>(resO, conO, eps);
}
// Reverse
{
// Arith Op
array resR = arith_op<af_mul_t>()(B, RA);
array resO = arith_op<af_mul_t>()(B, OA);
// We will test this by converting the COO to CSR and CSR to COO and
// comparing them. In essense, we are comparing the resR and resO
// TODO: Make a better comparison using dense
// Check resR against conR
array conR = sparseConvertTo(resR, AF_STORAGE_CSR);
sparseCompare<T>(resR, conR, eps);
// Check resO against conO
array conO = sparseConvertTo(resR, AF_STORAGE_COO);
sparseCompare<T>(resO, conO, eps);
}
}
示例2: range
TEST(Where, MaxDim) {
const size_t largeDim = 65535 * 32 + 2;
array input = range(dim4(1, largeDim), 1);
array output = where(input % 2 == 0);
array gold = 2 * range(largeDim / 2);
ASSERT_ARRAYS_EQ(gold.as(u32), output);
input = range(dim4(1, 1, 1, largeDim), 3);
output = where(input % 2 == 0);
ASSERT_ARRAYS_EQ(gold.as(u32), output);
}
示例3: assign
void assign(Array<T>& out, const af_index_t idxrs[], const Array<T>& rhs)
{
out.eval();
rhs.eval();
vector<bool> isSeq(4);
vector<af_seq> seqs(4, af_span);
// create seq vector to retrieve output dimensions, offsets & offsets
for (dim_t x=0; x<4; ++x) {
if (idxrs[x].isSeq) {
seqs[x] = idxrs[x].idx.seq;
}
isSeq[x] = idxrs[x].isSeq;
}
vector< Array<uint> > idxArrs(4, createEmptyArray<uint>(dim4()));
// look through indexs to read af_array indexs
for (dim_t x=0; x<4; ++x) {
if (!isSeq[x]) {
idxArrs[x] = castArray<uint>(idxrs[x].idx.arr);
idxArrs[x].eval();
}
}
vector<CParam<uint>> idxParams(idxArrs.begin(), idxArrs.end());
getQueue().enqueue(kernel::assign<T>, out, out.getDataDims(), rhs,
move(isSeq), move(seqs), move(idxParams));
}
示例4: histogram
Array<outType> histogram(const Array<inType> &in, const unsigned &nbins, const double &minval, const double &maxval)
{
float step = (maxval - minval)/(float)nbins;
const dim4 inDims = in.dims();
dim4 iStrides = in.strides();
dim4 outDims = dim4(nbins,1,inDims[2],inDims[3]);
Array<outType> out = createValueArray<outType>(outDims, outType(0));
dim4 oStrides = out.strides();
dim_t nElems = inDims[0]*inDims[1];
outType *outData = out.get();
const inType* inData= in.get();
for(dim_t b3 = 0; b3 < outDims[3]; b3++) {
for(dim_t b2 = 0; b2 < outDims[2]; b2++) {
for(dim_t i=0; i<nElems; i++) {
int bin = (int)((inData[i] - minval) / step);
bin = std::max(bin, 0);
bin = std::min(bin, (int)(nbins - 1));
outData[bin]++;
}
inData += iStrides[2];
outData += oStrides[2];
}
}
return out;
}
示例5: constant
TEST(Accum, MaxDim)
{
const size_t largeDim = 65535 * 32 + 1;
//first dimension kernel tests
array input = constant(0, 2, largeDim, 2, 2);
input(span, seq(0, 9999), span, span) = 1;
array gold_first = constant(0, 2, largeDim, 2, 2);
gold_first(span, seq(0, 9999), span, span) = range(2, 10000, 2, 2) + 1;
array output_first = accum(input, 0);
ASSERT_ARRAYS_EQ(gold_first, output_first);
input = constant(0, 2, 2, 2, largeDim);
input(span, span, span, seq(0, 9999)) = 1;
gold_first = constant(0, 2, 2, 2, largeDim);
gold_first(span, span, span, seq(0, 9999)) = range(2, 2, 2, 10000) + 1;
output_first = accum(input, 0);
ASSERT_ARRAYS_EQ(gold_first, output_first);
//other dimension kernel tests
input = constant(0, 2, largeDim, 2, 2);
input(span, seq(0, 9999), span, span) = 1;
array gold_dim = constant(10000, 2, largeDim, 2, 2);
gold_dim(span, seq(0, 9999), span, span) = range(dim4(2, 10000, 2, 2), 1) + 1;
array output_dim = accum(input, 1);
ASSERT_ARRAYS_EQ(gold_dim, output_dim);
input = constant(0, 2, 2, 2, largeDim);
input(span, span, span, seq(0, 9999)) = 1;
gold_dim = constant(0, 2, 2, 2, largeDim);
gold_dim(span, span, span, seq(0, 9999)) = range(dim4(2, 2, 2, 10000), 1) + 1;
output_dim = accum(input, 1);
ASSERT_ARRAYS_EQ(gold_dim, output_dim);
}
示例6: rank
static inline uint rank(const af_array in, double tol)
{
Array<T> In = getArray<T>(in);
Array<T> r = createEmptyArray<T>(dim4());
// Scoping to get rid of q and t as they are not necessary
{
Array<T> q = createEmptyArray<T>(dim4());
Array<T> t = createEmptyArray<T>(dim4());
qr(q, r, t, In);
}
Array<T> val = createValueArray<T>(r.dims(), scalar<T>(tol));
Array<char> gt = logicOp<T, af_gt_t>(r, val, val.dims());
Array<char> at = reduce<af_or_t, char, char>(gt, 1);
return reduce_all<af_notzero_t, char, uint>(at);
}
示例7: histogram
Array<outType> histogram(const Array<inType> &in, const unsigned &nbins, const double &minval, const double &maxval)
{
const dim4 dims = in.dims();
dim4 outDims = dim4(nbins, 1, dims[2], dims[3]);
Array<outType> out = createValueArray<outType>(outDims, outType(0));
kernel::histogram<inType, outType, isLinear>(out, in, nbins, minval, maxval);
return out;
}
示例8: reorder
static forge::Image* convert_and_copy_image(const af_array in)
{
const Array<T> _in = getArray<T>(in);
dim4 inDims = _in.dims();
dim4 rdims = (inDims[2]>1 ? dim4(2, 1, 0, 3) : dim4(1, 0, 2, 3));
Array<T> imgData = reorder(_in, rdims);
ForgeManager& fgMngr = ForgeManager::getInstance();
// The inDims[2] * 100 is a hack to convert to forge::ChannelFormat
// TODO Write a proper conversion function
forge::Image* ret_val = fgMngr.getImage(inDims[1], inDims[0], (forge::ChannelFormat)(inDims[2] * 100), getGLType<T>());
copy_image<T>(normalizePerType<T>(imgData), ret_val);
return ret_val;
}
示例9: sparseArithTesterDiv
void sparseArithTesterDiv(const int m, const int n, int factor, const double eps)
{
deviceGC();
if (noDoubleTests<T>()) return;
#if 1
array A = cpu_randu<T>(dim4(m, n));
array B = cpu_randu<T>(dim4(m, n));
#else
array A = randu(m, n, (dtype)dtype_traits<T>::af_type);
array B = randu(m, n, (dtype)dtype_traits<T>::af_type);
#endif
A = makeSparse<T>(A, factor);
array RA = sparse(A, AF_STORAGE_CSR);
array OA = sparse(A, AF_STORAGE_COO);
// Arith Op
array resR = arith_op<af_div_t>()(RA, B);
array resO = arith_op<af_div_t>()(OA, B);
// Assert division by sparse is not allowed
af_array out_temp = 0;
ASSERT_EQ(AF_ERR_NOT_SUPPORTED, af_div(&out_temp, B.get(), RA.get(), false));
ASSERT_EQ(AF_ERR_NOT_SUPPORTED, af_div(&out_temp, B.get(), OA.get(), false));
if(out_temp != 0) af_release_array(out_temp);
// We will test this by converting the COO to CSR and CSR to COO and
// comparing them. In essense, we are comparing the resR and resO
// TODO: Make a better comparison using dense
// Check resR against conR
array conR = sparseConvertTo(resR, AF_STORAGE_CSR);
sparseCompare<T>(resR, conR, eps);
// Check resO against conO
array conO = sparseConvertTo(resR, AF_STORAGE_COO);
sparseCompare<T>(resO, conO, eps);
}
示例10: transpose
Array<T> * transpose(const Array<T> &in)
{
if ((std::is_same<T, double>::value || std::is_same<T, cdouble>::value) &&
!isDoubleSupported(getActiveDeviceId())) {
OPENCL_NOT_SUPPORTED();
}
const dim4 inDims = in.dims();
dim4 outDims = dim4(inDims[1],inDims[0],inDims[2],inDims[3]);
Array<T>* out = createEmptyArray<T>(outDims);
kernel::transpose<T>(*out, in);
return out;
}
示例11: susan
static af_features susan(af_array const &in,
const unsigned radius, const float diff_thr, const float geom_thr,
const float feature_ratio, const unsigned edge)
{
Array<float> x = createEmptyArray<float>(dim4());
Array<float> y = createEmptyArray<float>(dim4());
Array<float> score = createEmptyArray<float>(dim4());
af_features_t feat;
feat.n = susan<T>(x, y, score,
getArray<T>(in), radius, diff_thr, geom_thr,
feature_ratio, edge);
feat.x = getHandle(x);
feat.y = getHandle(y);
feat.score = getHandle(score);
feat.orientation = getHandle(feat.n > 0 ? createValueArray<float>(feat.n, 0.0) : createEmptyArray<float>(dim4()));
feat.size = getHandle(feat.n > 0 ? createValueArray<float>(feat.n, 1.0) : createEmptyArray<float>(dim4()));
return getFeaturesHandle(feat);
}
示例12: sparseArithTester
void sparseArithTester(const int m, const int n, int factor, const double eps)
{
deviceGC();
if (noDoubleTests<T>()) return;
#if 1
array A = cpu_randu<T>(dim4(m, n));
array B = cpu_randu<T>(dim4(m, n));
#else
array A = randu(m, n, (dtype)dtype_traits<T>::af_type);
array B = randu(m, n, (dtype)dtype_traits<T>::af_type);
#endif
A = makeSparse<T>(A, factor);
array RA = sparse(A, AF_STORAGE_CSR);
array OA = sparse(A, AF_STORAGE_COO);
// Arith Op
array resR = arith_op<op>()(RA, B);
array resO = arith_op<op>()(OA, B);
array resD = arith_op<op>()( A, B);
array revR = arith_op<op>()(B, RA);
array revO = arith_op<op>()(B, OA);
array revD = arith_op<op>()(B, A);
ASSERT_NEAR(0, sum<double>(abs(real(resR - resD))) / (m * n), eps);
ASSERT_NEAR(0, sum<double>(abs(imag(resR - resD))) / (m * n), eps);
ASSERT_NEAR(0, sum<double>(abs(real(resO - resD))) / (m * n), eps);
ASSERT_NEAR(0, sum<double>(abs(imag(resO - resD))) / (m * n), eps);
ASSERT_NEAR(0, sum<double>(abs(real(revR - revD))) / (m * n), eps);
ASSERT_NEAR(0, sum<double>(abs(imag(revR - revD))) / (m * n), eps);
ASSERT_NEAR(0, sum<double>(abs(real(revO - revD))) / (m * n), eps);
ASSERT_NEAR(0, sum<double>(abs(imag(revO - revD))) / (m * n), eps);
}
示例13: sift
static void sift(af_features& feat_, af_array& descriptors, const af_array& in, const unsigned n_layers,
const float contrast_thr, const float edge_thr, const float init_sigma,
const bool double_input, const float img_scale, const float feature_ratio,
const bool compute_GLOH)
{
Array<float> x = createEmptyArray<float>(dim4());
Array<float> y = createEmptyArray<float>(dim4());
Array<float> score = createEmptyArray<float>(dim4());
Array<float> ori = createEmptyArray<float>(dim4());
Array<float> size = createEmptyArray<float>(dim4());
Array<float> desc = createEmptyArray<float>(dim4());
af_features_t feat;
feat.n = sift<T, convAccT>(x, y, score, ori, size, desc, getArray<T>(in),
n_layers, contrast_thr, edge_thr, init_sigma,
double_input, img_scale, feature_ratio, compute_GLOH);
feat.x = getHandle(x);
feat.y = getHandle(y);
feat.score = getHandle(score);
feat.orientation = getHandle(ori);
feat.size = getHandle(size);
feat_ = getFeaturesHandle(feat);
descriptors = getHandle<float>(desc);
}
示例14: det
T det(const af_array a)
{
const Array<T> A = getArray<T>(a);
const int num = A.dims()[0];
if(num == 0) {
T res = scalar<T>(1.0);
return res;
}
std::vector<T> hD(num);
std::vector<int> hP(num);
Array<T> D = createEmptyArray<T>(dim4());
Array<int> pivot = createEmptyArray<int>(dim4());
// Free memory as soon as possible
{
Array<T> A_copy = copyArray<T>(A);
Array<int> pivot = lu_inplace(A_copy, false);
copyData(&hP[0], pivot);
Array<T> D = diagExtract(A_copy, 0);
copyData(&hD[0], D);
}
bool is_neg = false;
T res = scalar<T>(is_neg ? -1 : 1);
for (int i = 0; i < num; i++) {
res = res * hD[i];
is_neg ^= (hP[i] != (i+1));
}
if (is_neg) res = res * scalar<T>(-1);
return res;
}
示例15: fast
static af_features fast(af_array const &in, const float thr,
const unsigned arc_length, const bool non_max,
const float feature_ratio, const unsigned edge)
{
Array<float> x = createEmptyArray<float>(dim4());
Array<float> y = createEmptyArray<float>(dim4());
Array<float> score = createEmptyArray<float>(dim4());
af_features feat;
feat.n = fast<T>(x, y, score,
getArray<T>(in), thr,
arc_length, non_max, feature_ratio, edge);
Array<float> orientation = createValueArray<float>(feat.n, 0.0);
Array<float> size = createValueArray<float>(feat.n, 1.0);
feat.x = getHandle(x);
feat.y = getHandle(y);
feat.score = getHandle(score);
feat.orientation = getHandle(orientation);
feat.size = getHandle(size);
return feat;
}