more fixes to CLPBN

fix some Yap overflows.


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1216 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2004-12-20 21:44:58 +00:00
parent a013a38c7b
commit a4f158fd33
5 changed files with 42 additions and 35 deletions

View File

@ -11,8 +11,11 @@
* File: amasm.c *
* comments: abstract machine assembler *
* *
* Last rev: $Date: 2004-12-07 16:54:57 $ *
* Last rev: $Date: 2004-12-20 21:44:56 $ *
* $Log: not supported by cvs2svn $
* Revision 1.68 2004/12/07 16:54:57 vsc
* fix memory overflow
*
* Revision 1.67 2004/12/05 05:01:23 vsc
* try to reduce overheads when running with goal expansion enabled.
* CLPBN fixes
@ -3029,8 +3032,9 @@ Yap_assemble(int mode, Term t, PredEntry *ap, int is_fact, struct intermediates
DBTerm *x;
LogUpdClause *cl;
if(!(x = fetch_clause_space(&t,size,cip)))
if(!(x = fetch_clause_space(&t,size,cip))){
return NULL;
}
cl = (LogUpdClause *)((CODEADDR)x-(UInt)size);
cl->ClSource = x;
cip->code_addr = (yamop *)cl;
@ -3040,8 +3044,9 @@ Yap_assemble(int mode, Term t, PredEntry *ap, int is_fact, struct intermediates
!is_fact) {
DBTerm *x;
StaticClause *cl;
if(!(x = fetch_clause_space(&t,size,cip)))
if(!(x = fetch_clause_space(&t,size,cip))) {
return NULL;
}
cl = (StaticClause *)((CODEADDR)x-(UInt)size);
cip->code_addr = (yamop *)cl;
code_p = do_pass(1, &entry_code, mode, &clause_has_blobs, cip, size);
@ -3054,6 +3059,7 @@ Yap_assemble(int mode, Term t, PredEntry *ap, int is_fact, struct intermediates
if (!Yap_growheap(TRUE, size, cip)) {
Yap_Error_TYPE = OUT_OF_HEAP_ERROR;
Yap_Error_Size = size;
return NULL;
}
}

View File

@ -11,8 +11,11 @@
* File: cdmgr.c *
* comments: Code manager *
* *
* Last rev: $Date: 2004-12-16 05:57:23 $,$Author: vsc $ *
* Last rev: $Date: 2004-12-20 21:44:57 $,$Author: vsc $ *
* $Log: not supported by cvs2svn $
* Revision 1.145 2004/12/16 05:57:23 vsc
* fix overflows
*
* Revision 1.144 2004/12/08 00:10:48 vsc
* more grow fixes
*
@ -2033,10 +2036,13 @@ p_compile_dynamic(void)
addclause(t, code_adr, (int) (IntOfTerm(t1) & 3), mod, &ARG5);
}
if (Yap_ErrorMessage) {
if (!Yap_Error_Term)
Yap_Error_Term = TermNil;
if (IntOfTerm(t1) & 4) {
Yap_Error(Yap_Error_TYPE, Yap_Error_Term, "line %d, %s", Yap_FirstLineInParse(), Yap_ErrorMessage);
} else
} else {
Yap_Error(Yap_Error_TYPE, Yap_Error_Term, Yap_ErrorMessage);
}
YAPLeaveCriticalSection();
return FALSE;
}

View File

@ -11,8 +11,11 @@
* File: compiler.c *
* comments: Clause compiler *
* *
* Last rev: $Date: 2004-12-16 05:57:32 $,$Author: vsc $ *
* Last rev: $Date: 2004-12-20 21:44:57 $,$Author: vsc $ *
* $Log: not supported by cvs2svn $
* Revision 1.56 2004/12/16 05:57:32 vsc
* fix overflows
*
* Revision 1.55 2004/12/05 05:01:23 vsc
* try to reduce overheads when running with goal expansion enabled.
* CLPBN fixes
@ -2949,16 +2952,7 @@ Yap_cclause(volatile Term inp_clause, int NOfArgs, int mod, volatile Term src)
/* check first if there was space for us */
if (acode == NULL) {
/* make sure we have enough space */
if (!Yap_growheap(FALSE, Yap_Error_Size, NULL)) {
save_machine_regs();
my_clause = Deref(ARG1);
longjmp(cglobs.cint.CompilerBotch, 2);
return(NULL);
} else {
my_clause = Deref(ARG1);
goto restart_compilation;
}
return NULL;
} else {
#ifdef LOW_PROF
if (ProfilerOn) {

View File

@ -48,8 +48,8 @@
solver(vel).
%output(xbif(user_error)).
output(gviz(user_error)).
%output(no).
%output(gviz(user_error)).
output(no).
clpbn_flag(Flag,Option) :-
clpbn_flag(Flag, Option, Option).

View File

@ -53,10 +53,10 @@ vel(LVs,Vs0,AllDiffs) :-
find_all_clpbn_vars([], [], [], []) :- !.
find_all_clpbn_vars([V|Vs], [Var|LV], ProcessedVars, [table(I,Table,Deps,Sizes)|Tables]) :-
var_with_deps(V, Table, Deps, Sizes, Ev, Vals), !,
Var = var(V,I,Sz,Vals,Ev,_,_),
get_dist_size(V,Sz),
% variables with evidence should not be processed.
(var(Ev) ->
Var = var(V,I,Sz,Vals,Ev,_,_),
get_dist_size(V,Sz),
ProcessedVars = [Var|ProcessedVars0]
;
ProcessedVars = ProcessedVars0
@ -132,6 +132,7 @@ add_table_deps_to_variables([], []).
add_table_deps_to_variables([var(V,_,_,_,_,Deps,K)|LV], DepGraph) :-
steal_deps_for_variable(DepGraph, V, NDepGraph, Deps),
compute_size(Deps,[],K),
% ( clpbn:get_atts(V,[key(Key)]) -> write(Key:K), nl ; true),
add_table_deps_to_variables(LV, NDepGraph).
steal_deps_for_variable([V-Info|DepGraph], V0, NDepGraph, [Info|Deps]) :-
@ -141,8 +142,8 @@ steal_deps_for_variable(DepGraph, _, DepGraph, []).
compute_size([],Vs,K) :-
% use sizes now
length(Vs,K).
% multiply_sizes(Vs,1,K).
% length(Vs,K).
multiply_sizes(Vs,1,K).
compute_size([tab(_,Vs,_)|Tabs],Vs0,K) :-
ord_union(Vs,Vs0,VsI),
compute_size(Tabs,VsI,K).
@ -154,7 +155,7 @@ multiply_sizes([V|Vs],K0,K) :-
multiply_sizes(Vs,KI,K).
process(LV0, InputVs, Out) :-
find_best(LV0, V0, 10000, V, WorkTables, LVI, InputVs),
find_best(LV0, V0, -1, V, WorkTables, LVI, InputVs),
V \== V0, !,
multiply_tables(WorkTables, Table),
propagate_evidence(V, Evs),
@ -165,9 +166,11 @@ process(LV0, _, Out) :-
fetch_tables(LV0, WorkTables),
multiply_tables(WorkTables, Out).
find_best([], V, _, V, _, [], _).
find_best([], V, _TF, V, _, [], _).
%:-
% clpbn:get_atts(V,[key(K)]), write(chosen:K:TF), nl.
find_best([var(V,I,Sz,Vals,Ev,Deps,K)|LV], _, Threshold, VF, NWorktables, LVF, Inputs) :-
K < Threshold,
( K < Threshold ; Threshold < 0),
clpbn_not_var_member(Inputs, V), !,
find_best(LV, V, K, VF, WorkTables,LV0, Inputs),
(V == VF ->
@ -310,19 +313,17 @@ include([var(V,P,VSz,D,Ev,Tabs,Est)|LV],tab(T,Vs,Sz),V1,[var(V,P,VSz,D,Ev,Tabs,E
clpbn_not_var_member(Vs,V), !,
include(LV,tab(T,Vs,Sz),V1,NLV).
include([var(V,P,VSz,D,Ev,Tabs,_)|LV],Table,NV,[var(V,P,VSz,D,Ev,NTabs,NEst)|NLV]) :-
update_tables(Tabs,NTabs,Table,NV,[],NEst),
update_tables(Tabs,NTabs,Table,NV),
compute_size(NTabs, [], NEst),
% ( clpbn:get_atts(V,[key(Key)]) -> write(Key:NEst), nl ; true),
include(LV,Table,NV,NLV).
update_tables([],[Table],Table,_,AVs,NS) :-
Table = tab(_,Vs,_),
ord_union(Vs,AVs,TVs),
length(TVs,NS).
update_tables([tab(Tab0,Vs,Sz)|Tabs],[tab(Tab0,Vs,Sz)|NTabs],Table,V,AVs0,NS) :-
update_tables([],[Table],Table,_).
update_tables([tab(Tab0,Vs,Sz)|Tabs],[tab(Tab0,Vs,Sz)|NTabs],Table,V) :-
clpbn_not_var_member(Vs,V), !,
ord_union(Vs,AVs0,AVsI),
update_tables(Tabs,NTabs,Table,V,AVsI,NS).
update_tables([_|Tabs],NTabs,Table,V,AVs0,NS) :-
update_tables(Tabs,NTabs,Table,V,AVs0,NS).
update_tables(Tabs,NTabs,Table,V).
update_tables([_|Tabs],NTabs,Table,V) :-
update_tables(Tabs,NTabs,Table,V).
bind_vals([],_,_) :- !.
% simple case, we want a distribution on a single variable.