Author: Remi Meier Branch: c7 Changeset: r703:852f9a4772d4 Date: 2014-02-05 13:02 +0100 http://bitbucket.org/pypy/stmgc/changeset/852f9a4772d4/
Log: add parallel version of n-queens diff --git a/duhton/demo/nqueens.duh b/duhton/demo/nqueens.duh --- a/duhton/demo/nqueens.duh +++ b/duhton/demo/nqueens.duh @@ -3,13 +3,33 @@ -(setq count (container 0)) (defun abs (i) (if (<= 0 i) i (- 0 i))) +(defun clean_list (n) + (setq i n) + (setq res (list)) + (while (> i 0) + (append res 0) + (setq i (- i 1)) + ) + res + ) + +(defun copy_list (xs) + (setq res (list)) + (setq idx 0) + (while (< idx (len xs)) + (append res (get xs idx)) + (setq idx (+ idx 1)) + ) + res + ) + + (defun attacks (hist col i j) (|| (== (get hist j) i) (== (abs (- (get hist j) i)) @@ -38,11 +58,11 @@ ) ) -(defun solve (n col hist) +(defun solve (n col hist count) (if (== col n) (progn (set count (+ (get count) 1)) - (print_solution hist n) + ;; (print_solution hist n) ) ;; else @@ -57,7 +77,7 @@ (if (>= j col) (progn (set hist col i) - (solve n (+ col 1) hist) + (solve n (+ col 1) hist count) )) (setq i (+ i 1)) @@ -66,20 +86,63 @@ ) +(defun solve_parallel (n col hist count) + (if (== col n) + (progn + (set count (+ (get count) 1)) + ;; (print_solution hist n) + ) -(defun clean_list (n) - (setq i n) - (setq res (list)) - (while (> i 0) - (append res 0) - (setq i (- i 1)) + ;; else + (setq i 0) + (setq transaction-limit 1) + (if (== col transaction-limit) + (setq counts (list))) + + (while (< i n) + (setq j 0) + (while (&& (< j col) + (not (attacks hist col i j))) + (setq j (+ j 1)) + ) + + (if (>= j col) + (progn + (set hist col i) + (if (== col transaction-limit) + (progn + (setq new_cont (container 0)) + (append counts new_cont) + (transaction solve n (+ col 1) (copy_list hist) new_cont) + ) + (solve_parallel n (+ col 1) hist count) + ) + ) + ) + ;; iterator + (setq i (+ i 1)) + ) + + (if (== col transaction-limit) + (progn + (run-transactions) + (setq i 0) + (while (< i (len counts)) + (set count (+ (get count) (get (get counts i)))) + (setq i (+ i 1)) + ) + ) + ) ) - res ) -(setq n 8) -(solve n 0 (clean_list n)) + + +(setq count (container 0)) + +(setq n 11) +(solve_parallel n 0 (clean_list n) count) (print (quote solutions:) (get count)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit