warn slow for unknown scans & folds & ⍋
This commit is contained in:
parent
2ddfc43682
commit
797a848ed4
@ -2,7 +2,10 @@
|
||||
#include "../utils/each.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
|
||||
#define GC2f(SYMB, NAME, EXPR, EXTRA) B NAME##_c2(B t, B w, B x) { \
|
||||
if (isF64(w) & isF64(x)) return m_f64(EXPR); \
|
||||
|
||||
@ -2,7 +2,10 @@
|
||||
#include "../utils/each.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);
|
||||
|
||||
|
||||
@ -72,6 +72,7 @@ B GRADE_CAT(c1)(B t, B x) {
|
||||
return r;
|
||||
}
|
||||
|
||||
SLOW1(GRADE_UD("⍋","⍒")"𝕩", x);
|
||||
TALLOC(BI32p, tmp, ia);
|
||||
SGetU(x)
|
||||
for (usz i = 0; i < ia; i++) {
|
||||
@ -124,6 +125,7 @@ B GRADE_CAT(c2)(B t, B w, B x) {
|
||||
}
|
||||
} else {
|
||||
SGetU(x)
|
||||
SLOW2("𝕨"GRADE_UD("⍋","⍒")"𝕩", w, x);
|
||||
B* wp = arr_bptr(w);
|
||||
if (wp==NULL) {
|
||||
HArr* a = toHArr(w);
|
||||
|
||||
@ -118,6 +118,7 @@ B scan_c1(Md1D* d, B x) { B f = d->f;
|
||||
}
|
||||
}
|
||||
base:;
|
||||
SLOW2("𝕎`𝕩", f, x);
|
||||
|
||||
bool reuse = v(x)->type==t_harr && reusable(x);
|
||||
usz i = 0;
|
||||
@ -161,6 +162,8 @@ B scan_c2(Md1D* d, B w, B x) { B f = d->f;
|
||||
}
|
||||
}
|
||||
base:;
|
||||
SLOW3("𝕨 F` 𝕩", w, x, f);
|
||||
|
||||
bool reuse = (v(x)->type==t_harr && reusable(x)) | !ia;
|
||||
usz i = 0;
|
||||
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);
|
||||
if (isFun(f) && v(f)->flags && xe<=el_f64) {
|
||||
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_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); }
|
||||
@ -227,6 +230,7 @@ B fold_c1(Md1D* d, B x) { B f = d->f;
|
||||
}
|
||||
}
|
||||
base:;
|
||||
SLOW2("𝕎´ 𝕩", f, x);
|
||||
|
||||
SGet(x)
|
||||
BBB2B fc2 = c2fn(f);
|
||||
@ -276,6 +280,7 @@ B fold_c2(Md1D* d, B w, B x) { B f = d->f;
|
||||
}
|
||||
}
|
||||
base:;
|
||||
SLOW3("𝕨 F´ 𝕩", w, x, f);
|
||||
|
||||
B c = w;
|
||||
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;
|
||||
#define EQ(F) if (set[cw] && (F)) thrM("𝔽⌾(a⊸⊏): Incompatible result elements"); set[cw] = true;
|
||||
#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
|
||||
#define EQ(F)
|
||||
#define FREE_CHECK
|
||||
@ -1017,7 +1017,7 @@ B select_ucw(B t, B o, B w, B x) {
|
||||
u8 we = TI(w,elType);
|
||||
u8 xe = TI(x,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) {
|
||||
w = toI32Any(w);
|
||||
i32* wp = i32any_ptr(w);
|
||||
|
||||
@ -734,7 +734,11 @@ NOINLINE void printAllocStats() {
|
||||
BBB2B ptr;
|
||||
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);
|
||||
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) {
|
||||
if (isArr(x) && a(x)->ia<100) return;
|
||||
@ -745,4 +749,10 @@ NOINLINE void printAllocStats() {
|
||||
printf("slow %s:\n 𝕨: ", s); warn_ln(w);
|
||||
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
|
||||
|
||||
5
src/h.h
5
src/h.h
@ -250,12 +250,15 @@ typedef struct Arr {
|
||||
#if WARN_SLOW==1
|
||||
void warn_slow1(char* s, 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 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)
|
||||
#else
|
||||
#define SLOW1(S, X)
|
||||
#define SLOW2(S, W,X)
|
||||
#define SLOW2(S, W, X)
|
||||
#define SLOW3(S, W, X, Y)
|
||||
#define SLOWIF(C)
|
||||
#endif
|
||||
|
||||
|
||||
@ -152,7 +152,6 @@ static B eachd(B f, B w, B x) { // complete w F¨ x without fills
|
||||
|
||||
#if CATCH_ERRORS
|
||||
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);
|
||||
if (noFill(fx)) return eachd_fn(f, bi_N, w, x);
|
||||
B fw = getFillQ(w);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user