summaryrefslogtreecommitdiff
path: root/external/clBLAS/src/library/blas/generic/solution_assert.c
diff options
context:
space:
mode:
Diffstat (limited to 'external/clBLAS/src/library/blas/generic/solution_assert.c')
-rw-r--r--external/clBLAS/src/library/blas/generic/solution_assert.c195
1 files changed, 0 insertions, 195 deletions
diff --git a/external/clBLAS/src/library/blas/generic/solution_assert.c b/external/clBLAS/src/library/blas/generic/solution_assert.c
deleted file mode 100644
index 1c94ef98..00000000
--- a/external/clBLAS/src/library/blas/generic/solution_assert.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/* ************************************************************************
- * Copyright 2013 Advanced Micro Devices, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ************************************************************************/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include "solution_assert.h"
-
-#define ASSERT_GREQ_AND_DIV(a, b) assert(((a) >= (b)) && ((a) % (b) == 0))
-
-// solution area
-typedef struct SolArea {
- size_t offsetM;
- size_t M;
- size_t offsetN;
- size_t N;
- ListNode node;
-} SolArea;
-
-#ifdef ASSERT_GRANULATION
-
-// check the found dimensions are not wrong
-void VISIBILITY_HIDDEN
-assertGranulation(
- SubproblemDim *dims,
- unsigned int nrDims,
- PGranularity *pgran,
- unsigned int thLevel)
-{
- unsigned int i;
- size_t gsize;
-
- /*
- * subproblem dimensions on all levels must meet the following requirements:
- *
- * 1) Item work piece is greater then a processing step
- * 2) Item work piece is integrally divisible on the processing step
- * 3) Work pieces and processing steps don't grows at forwarding to the bottom level
- * 4) At passing to the thread level, the subproblem must be strict divisible among
- * all the threads
- */
-
- gsize = pgran->wgSize[0] * pgran->wgSize[1];
-
- for (i = 0; i < nrDims; i++) {
- if (i || dims[i].itemX != SUBDIM_UNUSED) {
- ASSERT_GREQ_AND_DIV(dims[i].itemX, dims[i].x);
- }
- if (i || dims[i].itemY != SUBDIM_UNUSED) {
- ASSERT_GREQ_AND_DIV(dims[i].itemY, dims[i].y);
- }
- if (i) {
- ASSERT_GREQ_AND_DIV(dims[i - 1].x, dims[i].itemX);
- ASSERT_GREQ_AND_DIV(dims[i - 1].y, dims[i].itemY);
- ASSERT_GREQ_AND_DIV(dims[i - 1].bwidth, dims[i].bwidth);
- }
- }
-
- assert((dims[thLevel].itemX * dims[thLevel].itemY) * gsize ==
- dims[thLevel - 1].x * dims[thLevel - 1].y);
-}
-
-#endif // ASSERT_GRANULATION
-
-#ifdef ASSERT_IMAGE_STEPS
-
-static __inline void
-assertEnclosed(size_t off1, size_t size1, size_t off2, size_t size2)
-{
- bool enc = ((off1 >= off2) && (off1 < off2 + size2) &&
- (off1 + size1 > off2) && (off1 + size1 <= off2 + size2));
- assert(enc);
-}
-
-static __inline bool
-isIntersected(size_t off1, size_t size1, size_t off2, size_t size2)
-{
- return ((off1 >= off2 && off1 < off2 + size2) ||
- (off1 + size1 > off2 && off1 + size1 <= off2 + size2));
-}
-
-static void
-freeSolAreaNode(ListNode *node)
-{
- SolArea *area = container_of(node, node, SolArea);
-
- free(area);
-}
-
-static void
-accProcessed(ListNode *node, void *priv)
-{
- SolArea *a1 = container_of(node, node, SolArea);
- SolArea *a2 = (SolArea*)priv;
-
- if (!isIntersected(a1->offsetM, a1->M, a2->offsetM, a2->M)) {
- a2->M += a1->M;
- if (a2->offsetM > a1->offsetM) {
- a2->offsetM = a1->offsetM;
- }
- }
- if (!isIntersected(a1->offsetN, a1->N, a2->offsetN, a2->N)) {
- a2->N += a1->N;
- if (a2->offsetN > a1->offsetN) {
- a2->offsetN = a1->offsetN;
- }
- }
-}
-
-static int
-solAreaCmp(ListNode *a, const void *b)
-{
- SolArea *area = container_of(a, node, SolArea);
- const CLBlasKargs *kargs = (const CLBlasKargs*)b;
- int ret;
-
- ret = isIntersected(kargs->offsetM, kargs->M,
- area->offsetM, area->M);
- ret = ret && isIntersected(kargs->offsetN, kargs->N,
- area->offsetN, area->N);
-
- return !ret;
-}
-
-void VISIBILITY_HIDDEN
-assertImageSubstep(
- SolutionStep *wholeStep,
- SolutionStep *substep,
- ListHead *doneSubsteps)
-{
- CLBlasKargs *kargs1 = &substep->args;
- CLBlasKargs *kargs2 = &wholeStep->args;
- ListNode *node;
- SolArea *area;
-
- assertEnclosed(kargs1->offsetM, kargs1->M, kargs2->offsetM, kargs2->M);
- assertEnclosed(kargs1->offsetN, kargs1->N, kargs2->offsetN, kargs2->N);
- node = listNodeSearch(doneSubsteps, (const void*)&substep->args,
- solAreaCmp);
- assert(!node);
- area = malloc(sizeof(SolArea));
- if (area == NULL) {
- fprintf(stderr, "[%s, line %d]: Failed to allocate memory for image "
- "step assertion!\n", __FILE__, __LINE__);
- }
- else {
- area->offsetM = substep->args.offsetM;
- area->M = substep->args.M;
- area->offsetN = substep->args.offsetN;
- area->N = substep->args.N;
- listAddToTail(doneSubsteps, &area->node);
- }
-}
-
-void VISIBILITY_HIDDEN
-assertImageStep(SolutionStep *wholeStep, ListHead *doneSubsteps)
-{
- SolArea area;
-
- area.offsetM = SIZE_MAX;
- area.M = 0;
- area.offsetN = SIZE_MAX;
- area.N = 0;
- listDoForEachPriv(doneSubsteps, accProcessed, &area);
- assert((area.offsetM == wholeStep->args.offsetM) &&
- (area.M == wholeStep->args.M) &&
- (area.offsetM ==wholeStep->args.offsetM) &&
- (area.N == wholeStep->args.N));
-}
-
-void VISIBILITY_HIDDEN
-releaseImageAssertion(ListHead *doneSubsteps)
-{
- listDoForEachSafe(doneSubsteps, freeSolAreaNode);
- listInitHead(doneSubsteps);
-}
-
-#endif /* ASSERT_IMAGE_STEPS */
-