Changeset 4315 for trunk

Show
Ignore:
Timestamp:
06/15/08 09:30:28 (3 months ago)
Author:
pmoura
Message:

Optimized the threaded/1 predicate implementation of competitive or-parallelism.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/compiler/logtalk.pl

    r4314 r4315  
    1317613176    thread_self(Id), 
    1317713177    call(Goal), 
    13178     thread_send_message(Queue, '$lgt_result'(Id, Goal)). 
     13178    thread_send_message(Queue, '$lgt_result'(Id, true(Goal))). 
    1317913179 
    1318013180 
     
    1318913189'$lgt_mt_threaded_exit_handler'(Id, Queue) :- 
    1319013190    thread_property(Id, status(Status)), 
    13191     catch(thread_send_message(Queue, '$lgt_status'(Id, Status)), _, thread_detach(Id)). 
     13191    (   Status == true -> 
     13192        true 
     13193    ;   catch(thread_send_message(Queue, '$lgt_result'(Id, Status)), _, thread_detach(Id)) 
     13194    ). 
    1319213195 
    1319313196 
     
    1319913202 
    1320013203'$lgt_mt_threaded_and_exit'(Ids, Results) :- 
    13201     thread_get_message('$lgt_status'(Id, Result)), 
     13204    thread_get_message('$lgt_result'(Id, Result)), 
    1320213205    '$lgt_mt_threaded_and_exit'(Result, Id, Ids, Results). 
    1320313206 
     
    1321813221    ). 
    1321913222 
    13220 '$lgt_mt_threaded_and_exit'(true, Id, Ids, Results) :- 
    13221     thread_get_message('$lgt_result'(Id, TGoal)), 
     13223'$lgt_mt_threaded_and_exit'(true(TGoal), Id, Ids, Results) :- 
    1322213224    '$lgt_mt_threaded_and_add_result'(Results, Id, TGoal, Continue), 
    1322313225    (   Continue == false -> 
     
    1327013272 
    1327113273'$lgt_mt_threaded_or_exit'(Ids, Results) :- 
    13272     thread_get_message('$lgt_status'(Id, Result)), 
     13274    thread_get_message('$lgt_result'(Id, Result)), 
    1327313275    '$lgt_mt_threaded_or_exit'(Result, Id, Ids, Results). 
    1327413276 
     
    1328913291    ). 
    1329013292 
    13291 '$lgt_mt_threaded_or_exit'(true, Id, Ids, Results) :- 
    13292     thread_get_message('$lgt_result'(Id, TGoal)), 
    13293     '$lgt_mt_threaded_record_result'(Results, Id, true), 
    13294     '$lgt_mt_threaded_call_cancel'(Ids, Results), 
    13295     '$lgt_mt_threaded_or_exit_unify'(Results, Id, TGoal). 
     13293'$lgt_mt_threaded_or_exit'(true(TGoal), Id, Ids, Results) :- 
     13294    '$lgt_mt_threaded_or_exit_unify'(Results, Id, TGoal), 
     13295    '$lgt_mt_threaded_call_cancel'(Ids, Results). 
    1329613296 
    1329713297'$lgt_mt_threaded_or_exit'(false, Id, Ids, Results) :- 
     
    1331613316 
    1331713317 
    13318 % '$lgt_mt_threaded_record_result'(+list, +thread_identifier, +callable) 
    13319 % 
    13320 % records a thread goal result: 
    13321  
    13322 '$lgt_mt_threaded_record_result'([id(Id, _, Result)| _], Id, Result) :- 
    13323     !. 
    13324  
    13325 '$lgt_mt_threaded_record_result'([_| Results], Id, Result) :- 
    13326     '$lgt_mt_threaded_record_result'(Results, Id, Result). 
    13327  
    13328  
    13329  
    1333013318% '$lgt_mt_threaded_or_record_failure'(+list, +thread_identifier, -atom) 
    1333113319% 
     
    1335913347 
    1336013348 
     13349% '$lgt_mt_threaded_record_result'(+list, +thread_identifier, +callable) 
     13350% 
     13351% records a thread goal result: 
     13352 
     13353'$lgt_mt_threaded_record_result'([id(Id, _, Result)| _], Id, Result) :- 
     13354    !. 
     13355 
     13356'$lgt_mt_threaded_record_result'([_| Results], Id, Result) :- 
     13357    '$lgt_mt_threaded_record_result'(Results, Id, Result). 
     13358 
     13359 
     13360 
    1336113361% '$lgt_mt_threaded_call_cancel'(+list(thread_identifier), +list) 
    1336213362% 
     
    1337313373'$lgt_mt_threaded_call_abort'([Id| Ids]) :- 
    1337413374    (   catch(thread_peek_message(Id, '$lgt_master'), _, fail) -> 
    13375         catch(thread_send_message(Id, '$lgt_status'(_, terminate)), _, true) 
     13375        catch(thread_send_message(Id, '$lgt_result'(_, terminate)), _, true) 
    1337613376    ;   catch(thread_signal(Id, throw('$lgt_terminated')), _, true) 
    1337713377    ), 
     
    1338313383'$lgt_mt_threaded_call_join'([Id| Ids], [id(Id, _, Result)| Results]) :- 
    1338413384    (   var(Result) -> 
    13385         % don't leak thread results 
    13386         thread_get_message('$lgt_status'(Id, Result)), 
    13387         (   Result == true -> 
    13388             thread_get_message('$lgt_result'(Id, _)) 
    13389         ;   true 
    13390         ) 
     13385        thread_get_message('$lgt_result'(Id, _))    % don't leak thread results 
    1339113386    ;   true 
    1339213387    ),