*** empty log message ***
[sb-simd.git] / test-seq.lisp
blob4a630cf872dc8ca64b3d2d2b2a919d5e6766d716
1 (in-package :cl-user)
3 (declaim (optimize (speed 3) (safety 0) (space 0) (debug 0)))
5 (defun sse-seq= (seq1 seq2)
6 (= (sb-sys:%primitive sb-vm::%sse-seq= seq1 seq2) 0))
8 (defun seq= (seq1 seq2)
9 (declare (type (simple-array (unsigned-byte 8) (*)) seq1 seq2))
10 (and (= (length seq1) (length seq2))
11 (loop for equal = t
12 for s1 of-type unsigned-byte across seq1
13 for s2 of-type unsigned-byte across seq2
14 when (/= s1 s2) do (setq equal nil) (return nil)
15 finally (return equal))))
18 (defun test-seq (&optional (test-count 50000))
19 (let ((arr1 (make-array #.(* 255 1025) :element-type '(unsigned-byte 8) :initial-element 0))
20 (arr2 (make-array #.(* 255 1025) :element-type '(unsigned-byte 8) :initial-element 0))
21 (arr3 (make-array #.(* 255 1025) :element-type '(unsigned-byte 8) :initial-element 0))
22 (arr4 (make-array #.(* 255 1025) :element-type '(unsigned-byte 8) :initial-element 0))
23 res)
25 (loop for i from 0 below (length arr1)
26 do (setf (aref arr1 i) (mod (* (1+ i) 10) 256)
27 (aref arr2 i) (aref arr1 i)
28 (aref arr3 i) (aref arr1 i)
29 (aref arr4 i) (aref arr1 i)
32 (setf (aref arr3 1200) (mod (1+ (aref arr3 1200)) 256)
33 (aref arr4 (- (length arr4) 2)) (mod (1+ (aref arr4 (- (length arr4) 2))) 256))
35 ;; (time (dotimes (i 100000) (sse-seq= arr1 arr2)))
36 ;; (time (dotimes (i #.(/ 100000 30)) (seq= arr1 arr2)))
38 (format t "; seq= a1 a2~%")
39 (time-sample-form #'(lambda () (dotimes (i (truncate test-count 15)) (setf res (seq= arr1 arr2)))))
41 (format t "; seq= a1 a3~%")
42 (time-sample-form #'(lambda () (dotimes (i (truncate test-count 15)) (setf res (seq= arr1 arr3)))))
44 (format t "; seq= a2 a4~%")
45 (time-sample-form #'(lambda () (dotimes (i (truncate test-count 15)) (setf res (seq= arr2 arr4)))))
48 (format t "; sse-seq= a1 a2~%")
49 (time-sample-form #'(lambda () (dotimes (i test-count) (setf res (sse-seq= arr1 arr2)))))
51 (format t "; sse-seq= a1 a3~%")
52 (time-sample-form #'(lambda () (dotimes (i test-count) (setf res (sse-seq= arr1 arr3)))))
54 (format t "; sse-seq= a2 a4~%")
55 (time-sample-form #'(lambda () (dotimes (i test-count) (setf res (sse-seq= arr2 arr4)))))