warn slow for unknown scans & folds & ⍋
This commit is contained in:
parent
2ddfc43682
commit
797a848ed4
@ -2,7 +2,10 @@
|
|||||||
#include "../utils/each.h"
|
#include "../utils/each.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#define P2(N) { if(isArr(w)|isArr(x)) return arith_recd(N##_c2, w, x); }
|
#define P2(N) { if(isArr(w)|isArr(x)) { \
|
||||||
|
SLOWIF((!isArr(w) || TI(w,elType)!=el_B) && (!isArr(x) || TI(x,elType)!=el_B)) SLOW2("arithd " #N, w, x); \
|
||||||
|
return arith_recd(N##_c2, w, x); \
|
||||||
|
}}
|
||||||
#if TYPED_ARITH
|
#if TYPED_ARITH
|
||||||
#define GC2f(SYMB, NAME, EXPR, EXTRA) B NAME##_c2(B t, B w, B x) { \
|
#define GC2f(SYMB, NAME, EXPR, EXTRA) B NAME##_c2(B t, B w, B x) { \
|
||||||
if (isF64(w) & isF64(x)) return m_f64(EXPR); \
|
if (isF64(w) & isF64(x)) return m_f64(EXPR); \
|
||||||
|
|||||||
@ -2,7 +2,10 @@
|
|||||||
#include "../utils/each.h"
|
#include "../utils/each.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#define P2(N) { if(isArr(w)|isArr(x)) return arith_recd(N##_c2, w, x); }
|
#define P2(N) { if (isArr(w)|isArr(x)) { \
|
||||||
|
SLOWIF((!isArr(w) || TI(w,elType)!=el_B) && (!isArr(x) || TI(x,elType)!=el_B)) SLOW2("cmp " #N, w, x); \
|
||||||
|
return arith_recd(N##_c2, w, x); \
|
||||||
|
}}
|
||||||
|
|
||||||
#define AL(X) i8* rp; B r = m_i8arrc(&rp, X);
|
#define AL(X) i8* rp; B r = m_i8arrc(&rp, X);
|
||||||
|
|
||||||
|
|||||||
@ -72,6 +72,7 @@ B GRADE_CAT(c1)(B t, B x) {
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SLOW1(GRADE_UD("⍋","⍒")"𝕩", x);
|
||||||
TALLOC(BI32p, tmp, ia);
|
TALLOC(BI32p, tmp, ia);
|
||||||
SGetU(x)
|
SGetU(x)
|
||||||
for (usz i = 0; i < ia; i++) {
|
for (usz i = 0; i < ia; i++) {
|
||||||
@ -124,6 +125,7 @@ B GRADE_CAT(c2)(B t, B w, B x) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SGetU(x)
|
SGetU(x)
|
||||||
|
SLOW2("𝕨"GRADE_UD("⍋","⍒")"𝕩", w, x);
|
||||||
B* wp = arr_bptr(w);
|
B* wp = arr_bptr(w);
|
||||||
if (wp==NULL) {
|
if (wp==NULL) {
|
||||||
HArr* a = toHArr(w);
|
HArr* a = toHArr(w);
|
||||||
|
|||||||
@ -118,6 +118,7 @@ B scan_c1(Md1D* d, B x) { B f = d->f;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
base:;
|
base:;
|
||||||
|
SLOW2("𝕎`𝕩", f, x);
|
||||||
|
|
||||||
bool reuse = v(x)->type==t_harr && reusable(x);
|
bool reuse = v(x)->type==t_harr && reusable(x);
|
||||||
usz i = 0;
|
usz i = 0;
|
||||||
@ -161,6 +162,8 @@ B scan_c2(Md1D* d, B w, B x) { B f = d->f;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
base:;
|
base:;
|
||||||
|
SLOW3("𝕨 F` 𝕩", w, x, f);
|
||||||
|
|
||||||
bool reuse = (v(x)->type==t_harr && reusable(x)) | !ia;
|
bool reuse = (v(x)->type==t_harr && reusable(x)) | !ia;
|
||||||
usz i = 0;
|
usz i = 0;
|
||||||
HArr_p r = reuse? harr_parts(REUSE(x)) : m_harrs(a(x)->ia, &i);
|
HArr_p r = reuse? harr_parts(REUSE(x)) : m_harrs(a(x)->ia, &i);
|
||||||
@ -198,7 +201,7 @@ B fold_c1(Md1D* d, B x) { B f = d->f;
|
|||||||
u8 xe = TI(x,elType);
|
u8 xe = TI(x,elType);
|
||||||
if (isFun(f) && v(f)->flags && xe<=el_f64) {
|
if (isFun(f) && v(f)->flags && xe<=el_f64) {
|
||||||
u8 rtid = v(f)->flags-1;
|
u8 rtid = v(f)->flags-1;
|
||||||
if (rtid==0) { // +
|
if (rtid==0) { // +
|
||||||
if (xe==el_i8 ) { i8* xp = i8any_ptr (x); i64 c=0; for (usz i=0; i<ia; i++) c+= xp[i]; dec(x); return m_f64(c); } // won't worry about 64TB array sum float inaccuracy for now
|
if (xe==el_i8 ) { i8* xp = i8any_ptr (x); i64 c=0; for (usz i=0; i<ia; i++) c+= xp[i]; dec(x); return m_f64(c); } // won't worry about 64TB array sum float inaccuracy for now
|
||||||
if (xe==el_i16) { i16* xp = i16any_ptr(x); i32 c=0; for (usz i=0; i<ia; i++) if (addOn(c,xp[i]))goto base; dec(x); return m_i32(c); }
|
if (xe==el_i16) { i16* xp = i16any_ptr(x); i32 c=0; for (usz i=0; i<ia; i++) if (addOn(c,xp[i]))goto base; dec(x); return m_i32(c); }
|
||||||
if (xe==el_i32) { i32* xp = i32any_ptr(x); i32 c=0; for (usz i=0; i<ia; i++) if (addOn(c,xp[i]))goto base; dec(x); return m_i32(c); }
|
if (xe==el_i32) { i32* xp = i32any_ptr(x); i32 c=0; for (usz i=0; i<ia; i++) if (addOn(c,xp[i]))goto base; dec(x); return m_i32(c); }
|
||||||
@ -227,6 +230,7 @@ B fold_c1(Md1D* d, B x) { B f = d->f;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
base:;
|
base:;
|
||||||
|
SLOW2("𝕎´ 𝕩", f, x);
|
||||||
|
|
||||||
SGet(x)
|
SGet(x)
|
||||||
BBB2B fc2 = c2fn(f);
|
BBB2B fc2 = c2fn(f);
|
||||||
@ -276,6 +280,7 @@ B fold_c2(Md1D* d, B w, B x) { B f = d->f;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
base:;
|
base:;
|
||||||
|
SLOW3("𝕨 F´ 𝕩", w, x, f);
|
||||||
|
|
||||||
B c = w;
|
B c = w;
|
||||||
SGet(x)
|
SGet(x)
|
||||||
|
|||||||
@ -1008,7 +1008,7 @@ B select_ucw(B t, B o, B w, B x) {
|
|||||||
for (i64 i = 0; i < xia; i++) set[i] = false;
|
for (i64 i = 0; i < xia; i++) set[i] = false;
|
||||||
#define EQ(F) if (set[cw] && (F)) thrM("𝔽⌾(a⊸⊏): Incompatible result elements"); set[cw] = true;
|
#define EQ(F) if (set[cw] && (F)) thrM("𝔽⌾(a⊸⊏): Incompatible result elements"); set[cw] = true;
|
||||||
#define FREE_CHECK TFREE(set)
|
#define FREE_CHECK TFREE(set)
|
||||||
SLOWIF(xia>100 && wia<xia/10) SLOW2("⌾(𝕨⊸⊏)𝕩 because CHECK_VALID", w, x);
|
SLOWIF(xia>100 && wia<xia/20) SLOW2("⌾(𝕨⊸⊏)𝕩 because CHECK_VALID", w, x);
|
||||||
#else
|
#else
|
||||||
#define EQ(F)
|
#define EQ(F)
|
||||||
#define FREE_CHECK
|
#define FREE_CHECK
|
||||||
@ -1017,7 +1017,7 @@ B select_ucw(B t, B o, B w, B x) {
|
|||||||
u8 we = TI(w,elType);
|
u8 we = TI(w,elType);
|
||||||
u8 xe = TI(x,elType);
|
u8 xe = TI(x,elType);
|
||||||
u8 re = TI(rep,elType);
|
u8 re = TI(rep,elType);
|
||||||
SLOWIF(!reusable(x) && xia>100 && wia<xia/10) SLOW2("⌾(𝕨⊸⊏)𝕩 because not reusable", w, x);
|
SLOWIF(!reusable(x) && xia>100 && wia<xia/50) SLOW2("⌾(𝕨⊸⊏)𝕩 because not reusable", w, x);
|
||||||
if (we<=el_i32) {
|
if (we<=el_i32) {
|
||||||
w = toI32Any(w);
|
w = toI32Any(w);
|
||||||
i32* wp = i32any_ptr(w);
|
i32* wp = i32any_ptr(w);
|
||||||
|
|||||||
@ -734,7 +734,11 @@ NOINLINE void printAllocStats() {
|
|||||||
BBB2B ptr;
|
BBB2B ptr;
|
||||||
static void warn_ln(B x) {
|
static void warn_ln(B x) {
|
||||||
if (isArr(x)) print_fmt("%s items, %S, shape=%H\n", a(x)->ia, eltype_repr(TI(x,elType)), x);
|
if (isArr(x)) print_fmt("%s items, %S, shape=%H\n", a(x)->ia, eltype_repr(TI(x,elType)), x);
|
||||||
else printf("not array\n");
|
else {
|
||||||
|
printf("atom: ");
|
||||||
|
printRaw(x = bqn_fmt(inc(x))); dec(x);
|
||||||
|
putchar('\n');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void warn_slow1(char* s, B x) {
|
void warn_slow1(char* s, B x) {
|
||||||
if (isArr(x) && a(x)->ia<100) return;
|
if (isArr(x) && a(x)->ia<100) return;
|
||||||
@ -745,4 +749,10 @@ NOINLINE void printAllocStats() {
|
|||||||
printf("slow %s:\n 𝕨: ", s); warn_ln(w);
|
printf("slow %s:\n 𝕨: ", s); warn_ln(w);
|
||||||
printf(" 𝕩: "); warn_ln(x);
|
printf(" 𝕩: "); warn_ln(x);
|
||||||
}
|
}
|
||||||
|
void warn_slow3(char* s, B w, B x, B y) {
|
||||||
|
if ((isArr(w)||isArr(x)) && (!isArr(x) || a(x)->ia<50) && (!isArr(x) || a(x)->ia<50)) return;
|
||||||
|
printf("slow %s:\n 𝕨: ", s); warn_ln(w);
|
||||||
|
printf(" 𝕩: "); warn_ln(x);
|
||||||
|
printf(" f: "); warn_ln(y);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
5
src/h.h
5
src/h.h
@ -250,12 +250,15 @@ typedef struct Arr {
|
|||||||
#if WARN_SLOW==1
|
#if WARN_SLOW==1
|
||||||
void warn_slow1(char* s, B x);
|
void warn_slow1(char* s, B x);
|
||||||
void warn_slow2(char* s, B w, B x);
|
void warn_slow2(char* s, B w, B x);
|
||||||
|
void warn_slow3(char* s, B w, B x, B y);
|
||||||
#define SLOW1(S, X) warn_slow1(S, X)
|
#define SLOW1(S, X) warn_slow1(S, X)
|
||||||
#define SLOW2(S, W, X) warn_slow2(S, W, X)
|
#define SLOW2(S, W, X) warn_slow2(S, W, X)
|
||||||
|
#define SLOW3(S, W, X, Y) warn_slow3(S, W, X, Y)
|
||||||
#define SLOWIF(C) if(C)
|
#define SLOWIF(C) if(C)
|
||||||
#else
|
#else
|
||||||
#define SLOW1(S, X)
|
#define SLOW1(S, X)
|
||||||
#define SLOW2(S, W,X)
|
#define SLOW2(S, W, X)
|
||||||
|
#define SLOW3(S, W, X, Y)
|
||||||
#define SLOWIF(C)
|
#define SLOWIF(C)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@ -152,7 +152,6 @@ static B eachd(B f, B w, B x) { // complete w F¨ x without fills
|
|||||||
|
|
||||||
#if CATCH_ERRORS
|
#if CATCH_ERRORS
|
||||||
static inline B arith_recd(BBB2B f, B w, B x) {
|
static inline B arith_recd(BBB2B f, B w, B x) {
|
||||||
SLOWIF((!isArr(w) || TI(w,elType)!=el_B) && (!isArr(x) || TI(x,elType)!=el_B)) SLOW2("arith", w, x);
|
|
||||||
B fx = getFillQ(x);
|
B fx = getFillQ(x);
|
||||||
if (noFill(fx)) return eachd_fn(f, bi_N, w, x);
|
if (noFill(fx)) return eachd_fn(f, bi_N, w, x);
|
||||||
B fw = getFillQ(w);
|
B fw = getFillQ(w);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user