summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile14
-rw-r--r--avx_results100
-rw-r--r--avx_results.txt301
-rwxr-xr-xbench.sh26
-rw-r--r--main.c55
-rw-r--r--noavx_results.txt301
7 files changed, 798 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e4bd7b3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+main_*
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..0d3f6ab
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,14 @@
+
+
+all: main_noavx main_avx
+
+main_noavx: main.c
+ gcc -mno-avx -fno-tree-vectorize $^ -o $@
+
+main_avx: main.c
+ gcc -mavx2 -D USE_VECTOR $^ -o $@
+
+clean:
+ @rm main_avx main_noavx
+
+.PHONY: clean
diff --git a/avx_results b/avx_results
new file mode 100644
index 0000000..19c5969
--- /dev/null
+++ b/avx_results
@@ -0,0 +1,100 @@
+Vectorize... done! (duration=0.007359s)
+Vectorize... done! (duration=0.005866s)
+Vectorize... done! (duration=0.004919s)
+Vectorize... done! (duration=0.005684s)
+Vectorize... done! (duration=0.005440s)
+Vectorize... done! (duration=0.005136s)
+Vectorize... done! (duration=0.005211s)
+Vectorize... done! (duration=0.006229s)
+Vectorize... done! (duration=0.004816s)
+Vectorize... done! (duration=0.004676s)
+Vectorize... done! (duration=0.004297s)
+Vectorize... done! (duration=0.004617s)
+Vectorize... done! (duration=0.003972s)
+Vectorize... done! (duration=0.003814s)
+Vectorize... done! (duration=0.004041s)
+Vectorize... done! (duration=0.004847s)
+Vectorize... done! (duration=0.004813s)
+Vectorize... done! (duration=0.004191s)
+Vectorize... done! (duration=0.004584s)
+Vectorize... done! (duration=0.003710s)
+Vectorize... done! (duration=0.004831s)
+Vectorize... done! (duration=0.004228s)
+Vectorize... done! (duration=0.004211s)
+Vectorize... done! (duration=0.004488s)
+Vectorize... done! (duration=0.004527s)
+Vectorize... done! (duration=0.004185s)
+Vectorize... done! (duration=0.004367s)
+Vectorize... done! (duration=0.004283s)
+Vectorize... done! (duration=0.004272s)
+Vectorize... done! (duration=0.004480s)
+Vectorize... done! (duration=0.004116s)
+Vectorize... done! (duration=0.004024s)
+Vectorize... done! (duration=0.003890s)
+Vectorize... done! (duration=0.003864s)
+Vectorize... done! (duration=0.003799s)
+Vectorize... done! (duration=0.003456s)
+Vectorize... done! (duration=0.004407s)
+Vectorize... done! (duration=0.004296s)
+Vectorize... done! (duration=0.003905s)
+Vectorize... done! (duration=0.004406s)
+Vectorize... done! (duration=0.004389s)
+Vectorize... done! (duration=0.004518s)
+Vectorize... done! (duration=0.004573s)
+Vectorize... done! (duration=0.003854s)
+Vectorize... done! (duration=0.004592s)
+Vectorize... done! (duration=0.004972s)
+Vectorize... done! (duration=0.004391s)
+Vectorize... done! (duration=0.003410s)
+Vectorize... done! (duration=0.004195s)
+Vectorize... done! (duration=0.003982s)
+Vectorize... done! (duration=0.002699s)
+Vectorize... done! (duration=0.003477s)
+Vectorize... done! (duration=0.004454s)
+Vectorize... done! (duration=0.003632s)
+Vectorize... done! (duration=0.004496s)
+Vectorize... done! (duration=0.004199s)
+Vectorize... done! (duration=0.004514s)
+Vectorize... done! (duration=0.004048s)
+Vectorize... done! (duration=0.003613s)
+Vectorize... done! (duration=0.004315s)
+Vectorize... done! (duration=0.004370s)
+Vectorize... done! (duration=0.004275s)
+Vectorize... done! (duration=0.003013s)
+Vectorize... done! (duration=0.004564s)
+Vectorize... done! (duration=0.004233s)
+Vectorize... done! (duration=0.004555s)
+Vectorize... done! (duration=0.003330s)
+Vectorize... done! (duration=0.003939s)
+Vectorize... done! (duration=0.004354s)
+Vectorize... done! (duration=0.004415s)
+Vectorize... done! (duration=0.003795s)
+Vectorize... done! (duration=0.002989s)
+Vectorize... done! (duration=0.004349s)
+Vectorize... done! (duration=0.003815s)
+Vectorize... done! (duration=0.003920s)
+Vectorize... done! (duration=0.004219s)
+Vectorize... done! (duration=0.003809s)
+Vectorize... done! (duration=0.004418s)
+Vectorize... done! (duration=0.003735s)
+Vectorize... done! (duration=0.004354s)
+Vectorize... done! (duration=0.004488s)
+Vectorize... done! (duration=0.004474s)
+Vectorize... done! (duration=0.003238s)
+Vectorize... done! (duration=0.004283s)
+Vectorize... done! (duration=0.004002s)
+Vectorize... done! (duration=0.004600s)
+Vectorize... done! (duration=0.004231s)
+Vectorize... done! (duration=0.004454s)
+Vectorize... done! (duration=0.003981s)
+Vectorize... done! (duration=0.004575s)
+Vectorize... done! (duration=0.004447s)
+Vectorize... done! (duration=0.004461s)
+Vectorize... done! (duration=0.003770s)
+Vectorize... done! (duration=0.004422s)
+Vectorize... done! (duration=0.004662s)
+Vectorize... done! (duration=0.003447s)
+Vectorize... done! (duration=0.004445s)
+Vectorize... done! (duration=0.003966s)
+Vectorize... done! (duration=0.004525s)
+Vectorize... done! (duration=0.004356s)
diff --git a/avx_results.txt b/avx_results.txt
new file mode 100644
index 0000000..33da200
--- /dev/null
+++ b/avx_results.txt
@@ -0,0 +1,301 @@
+
+Vectorize... done! (duration=0.003413s)
+Vectorize... done! (duration=0.005341s)
+Vectorize... done! (duration=0.004528s)
+Vectorize... done! (duration=0.003938s)
+Vectorize... done! (duration=0.004752s)
+Vectorize... done! (duration=0.004774s)
+Vectorize... done! (duration=0.004778s)
+Vectorize... done! (duration=0.005604s)
+Vectorize... done! (duration=0.005156s)
+Vectorize... done! (duration=0.005589s)
+Vectorize... done! (duration=0.005635s)
+Vectorize... done! (duration=0.005929s)
+Vectorize... done! (duration=0.005110s)
+Vectorize... done! (duration=0.004883s)
+Vectorize... done! (duration=0.004130s)
+Vectorize... done! (duration=0.004543s)
+Vectorize... done! (duration=0.003638s)
+Vectorize... done! (duration=0.002249s)
+Vectorize... done! (duration=0.004053s)
+Vectorize... done! (duration=0.003511s)
+Vectorize... done! (duration=0.003905s)
+Vectorize... done! (duration=0.003611s)
+Vectorize... done! (duration=0.002495s)
+Vectorize... done! (duration=0.003872s)
+Vectorize... done! (duration=0.003388s)
+Vectorize... done! (duration=0.003415s)
+Vectorize... done! (duration=0.003442s)
+Vectorize... done! (duration=0.002360s)
+Vectorize... done! (duration=0.004072s)
+Vectorize... done! (duration=0.003574s)
+Vectorize... done! (duration=0.003694s)
+Vectorize... done! (duration=0.004275s)
+Vectorize... done! (duration=0.003158s)
+Vectorize... done! (duration=0.004245s)
+Vectorize... done! (duration=0.004015s)
+Vectorize... done! (duration=0.003969s)
+Vectorize... done! (duration=0.004378s)
+Vectorize... done! (duration=0.004507s)
+Vectorize... done! (duration=0.004485s)
+Vectorize... done! (duration=0.004451s)
+Vectorize... done! (duration=0.004669s)
+Vectorize... done! (duration=0.004866s)
+Vectorize... done! (duration=0.004372s)
+Vectorize... done! (duration=0.004722s)
+Vectorize... done! (duration=0.003550s)
+Vectorize... done! (duration=0.004524s)
+Vectorize... done! (duration=0.004954s)
+Vectorize... done! (duration=0.004355s)
+Vectorize... done! (duration=0.003765s)
+Vectorize... done! (duration=0.003975s)
+Vectorize... done! (duration=0.003201s)
+Vectorize... done! (duration=0.002842s)
+Vectorize... done! (duration=0.003985s)
+Vectorize... done! (duration=0.003989s)
+Vectorize... done! (duration=0.004549s)
+Vectorize... done! (duration=0.004641s)
+Vectorize... done! (duration=0.004851s)
+Vectorize... done! (duration=0.004524s)
+Vectorize... done! (duration=0.004511s)
+Vectorize... done! (duration=0.004544s)
+Vectorize... done! (duration=0.004619s)
+Vectorize... done! (duration=0.003695s)
+Vectorize... done! (duration=0.004732s)
+Vectorize... done! (duration=0.004472s)
+Vectorize... done! (duration=0.004373s)
+Vectorize... done! (duration=0.003653s)
+Vectorize... done! (duration=0.004605s)
+Vectorize... done! (duration=0.004603s)
+Vectorize... done! (duration=0.004426s)
+Vectorize... done! (duration=0.004426s)
+Vectorize... done! (duration=0.004007s)
+Vectorize... done! (duration=0.003722s)
+Vectorize... done! (duration=0.004445s)
+Vectorize... done! (duration=0.003771s)
+Vectorize... done! (duration=0.004416s)
+Vectorize... done! (duration=0.004592s)
+Vectorize... done! (duration=0.004406s)
+Vectorize... done! (duration=0.004185s)
+Vectorize... done! (duration=0.004440s)
+Vectorize... done! (duration=0.004805s)
+Vectorize... done! (duration=0.004380s)
+Vectorize... done! (duration=0.004320s)
+Vectorize... done! (duration=0.003935s)
+Vectorize... done! (duration=0.004378s)
+Vectorize... done! (duration=0.003521s)
+Vectorize... done! (duration=0.003980s)
+Vectorize... done! (duration=0.004078s)
+Vectorize... done! (duration=0.004335s)
+Vectorize... done! (duration=0.004367s)
+Vectorize... done! (duration=0.003853s)
+Vectorize... done! (duration=0.004274s)
+Vectorize... done! (duration=0.004163s)
+Vectorize... done! (duration=0.004377s)
+Vectorize... done! (duration=0.004306s)
+Vectorize... done! (duration=0.003940s)
+Vectorize... done! (duration=0.004709s)
+Vectorize... done! (duration=0.004442s)
+Vectorize... done! (duration=0.003731s)
+Vectorize... done! (duration=0.004382s)
+Vectorize... done! (duration=0.004409s)
+Vectorize... done! (duration=0.004501s)
+Vectorize... done! (duration=0.004296s)
+Vectorize... done! (duration=0.004065s)
+Vectorize... done! (duration=0.004383s)
+Vectorize... done! (duration=0.004623s)
+Vectorize... done! (duration=0.004011s)
+Vectorize... done! (duration=0.003600s)
+Vectorize... done! (duration=0.005209s)
+Vectorize... done! (duration=0.002896s)
+Vectorize... done! (duration=0.003643s)
+Vectorize... done! (duration=0.004068s)
+Vectorize... done! (duration=0.003695s)
+Vectorize... done! (duration=0.003646s)
+Vectorize... done! (duration=0.004999s)
+Vectorize... done! (duration=0.004775s)
+Vectorize... done! (duration=0.004024s)
+Vectorize... done! (duration=0.003658s)
+Vectorize... done! (duration=0.003096s)
+Vectorize... done! (duration=0.003532s)
+Vectorize... done! (duration=0.002951s)
+Vectorize... done! (duration=0.003903s)
+Vectorize... done! (duration=0.002921s)
+Vectorize... done! (duration=0.003337s)
+Vectorize... done! (duration=0.003996s)
+Vectorize... done! (duration=0.003484s)
+Vectorize... done! (duration=0.004574s)
+Vectorize... done! (duration=0.004216s)
+Vectorize... done! (duration=0.004824s)
+Vectorize... done! (duration=0.004035s)
+Vectorize... done! (duration=0.004712s)
+Vectorize... done! (duration=0.004408s)
+Vectorize... done! (duration=0.003769s)
+Vectorize... done! (duration=0.004317s)
+Vectorize... done! (duration=0.003630s)
+Vectorize... done! (duration=0.003282s)
+Vectorize... done! (duration=0.002978s)
+Vectorize... done! (duration=0.004519s)
+Vectorize... done! (duration=0.004255s)
+Vectorize... done! (duration=0.004389s)
+Vectorize... done! (duration=0.003687s)
+Vectorize... done! (duration=0.003543s)
+Vectorize... done! (duration=0.003279s)
+Vectorize... done! (duration=0.003054s)
+Vectorize... done! (duration=0.003953s)
+Vectorize... done! (duration=0.003603s)
+Vectorize... done! (duration=0.003522s)
+Vectorize... done! (duration=0.002986s)
+Vectorize... done! (duration=0.003935s)
+Vectorize... done! (duration=0.003646s)
+Vectorize... done! (duration=0.003624s)
+Vectorize... done! (duration=0.003093s)
+Vectorize... done! (duration=0.002718s)
+Vectorize... done! (duration=0.003953s)
+Vectorize... done! (duration=0.003622s)
+Vectorize... done! (duration=0.003475s)
+Vectorize... done! (duration=0.003473s)
+Vectorize... done! (duration=0.003971s)
+Vectorize... done! (duration=0.002957s)
+Vectorize... done! (duration=0.002362s)
+Vectorize... done! (duration=0.003973s)
+Vectorize... done! (duration=0.004079s)
+Vectorize... done! (duration=0.003271s)
+Vectorize... done! (duration=0.004418s)
+Vectorize... done! (duration=0.004043s)
+Vectorize... done! (duration=0.004048s)
+Vectorize... done! (duration=0.002783s)
+Vectorize... done! (duration=0.004078s)
+Vectorize... done! (duration=0.003341s)
+Vectorize... done! (duration=0.003959s)
+Vectorize... done! (duration=0.002739s)
+Vectorize... done! (duration=0.002839s)
+Vectorize... done! (duration=0.004114s)
+Vectorize... done! (duration=0.003298s)
+Vectorize... done! (duration=0.003963s)
+Vectorize... done! (duration=0.003629s)
+Vectorize... done! (duration=0.004601s)
+Vectorize... done! (duration=0.004087s)
+Vectorize... done! (duration=0.002929s)
+Vectorize... done! (duration=0.004106s)
+Vectorize... done! (duration=0.003195s)
+Vectorize... done! (duration=0.003082s)
+Vectorize... done! (duration=0.003973s)
+Vectorize... done! (duration=0.003121s)
+Vectorize... done! (duration=0.003899s)
+Vectorize... done! (duration=0.003633s)
+Vectorize... done! (duration=0.004067s)
+Vectorize... done! (duration=0.004078s)
+Vectorize... done! (duration=0.004086s)
+Vectorize... done! (duration=0.004623s)
+Vectorize... done! (duration=0.004267s)
+Vectorize... done! (duration=0.004103s)
+Vectorize... done! (duration=0.004231s)
+Vectorize... done! (duration=0.004492s)
+Vectorize... done! (duration=0.005434s)
+Vectorize... done! (duration=0.003771s)
+Vectorize... done! (duration=0.004411s)
+Vectorize... done! (duration=0.004414s)
+Vectorize... done! (duration=0.004208s)
+Vectorize... done! (duration=0.004385s)
+Vectorize... done! (duration=0.004233s)
+Vectorize... done! (duration=0.004333s)
+Vectorize... done! (duration=0.003242s)
+Vectorize... done! (duration=0.004103s)
+Vectorize... done! (duration=0.004466s)
+Vectorize... done! (duration=0.003531s)
+Vectorize... done! (duration=0.003920s)
+Vectorize... done! (duration=0.004078s)
+Vectorize... done! (duration=0.003740s)
+Vectorize... done! (duration=0.004402s)
+Vectorize... done! (duration=0.003880s)
+Vectorize... done! (duration=0.004434s)
+Vectorize... done! (duration=0.004415s)
+Vectorize... done! (duration=0.003994s)
+Vectorize... done! (duration=0.004477s)
+Vectorize... done! (duration=0.003319s)
+Vectorize... done! (duration=0.003887s)
+Vectorize... done! (duration=0.004393s)
+Vectorize... done! (duration=0.004175s)
+Vectorize... done! (duration=0.004351s)
+Vectorize... done! (duration=0.003499s)
+Vectorize... done! (duration=0.002867s)
+Vectorize... done! (duration=0.004242s)
+Vectorize... done! (duration=0.003411s)
+Vectorize... done! (duration=0.003124s)
+Vectorize... done! (duration=0.003072s)
+Vectorize... done! (duration=0.003167s)
+Vectorize... done! (duration=0.003424s)
+Vectorize... done! (duration=0.005039s)
+Vectorize... done! (duration=0.004751s)
+Vectorize... done! (duration=0.004337s)
+Vectorize... done! (duration=0.005358s)
+Vectorize... done! (duration=0.004834s)
+Vectorize... done! (duration=0.004378s)
+Vectorize... done! (duration=0.004672s)
+Vectorize... done! (duration=0.004463s)
+Vectorize... done! (duration=0.004789s)
+Vectorize... done! (duration=0.003595s)
+Vectorize... done! (duration=0.004759s)
+Vectorize... done! (duration=0.004140s)
+Vectorize... done! (duration=0.004624s)
+Vectorize... done! (duration=0.004699s)
+Vectorize... done! (duration=0.004596s)
+Vectorize... done! (duration=0.004245s)
+Vectorize... done! (duration=0.004705s)
+Vectorize... done! (duration=0.004152s)
+Vectorize... done! (duration=0.004245s)
+Vectorize... done! (duration=0.004698s)
+Vectorize... done! (duration=0.004611s)
+Vectorize... done! (duration=0.004152s)
+Vectorize... done! (duration=0.004151s)
+Vectorize... done! (duration=0.004485s)
+Vectorize... done! (duration=0.003275s)
+Vectorize... done! (duration=0.003682s)
+Vectorize... done! (duration=0.003539s)
+Vectorize... done! (duration=0.002899s)
+Vectorize... done! (duration=0.004004s)
+Vectorize... done! (duration=0.004313s)
+Vectorize... done! (duration=0.003605s)
+Vectorize... done! (duration=0.003180s)
+Vectorize... done! (duration=0.004011s)
+Vectorize... done! (duration=0.003907s)
+Vectorize... done! (duration=0.003931s)
+Vectorize... done! (duration=0.003704s)
+Vectorize... done! (duration=0.003561s)
+Vectorize... done! (duration=0.003083s)
+Vectorize... done! (duration=0.002998s)
+Vectorize... done! (duration=0.003927s)
+Vectorize... done! (duration=0.003800s)
+Vectorize... done! (duration=0.003962s)
+Vectorize... done! (duration=0.002957s)
+Vectorize... done! (duration=0.003754s)
+Vectorize... done! (duration=0.002612s)
+Vectorize... done! (duration=0.003960s)
+Vectorize... done! (duration=0.003402s)
+Vectorize... done! (duration=0.003533s)
+Vectorize... done! (duration=0.003780s)
+Vectorize... done! (duration=0.003097s)
+Vectorize... done! (duration=0.003860s)
+Vectorize... done! (duration=0.003379s)
+Vectorize... done! (duration=0.003951s)
+Vectorize... done! (duration=0.002655s)
+Vectorize... done! (duration=0.002800s)
+Vectorize... done! (duration=0.004117s)
+Vectorize... done! (duration=0.003426s)
+Vectorize... done! (duration=0.003835s)
+Vectorize... done! (duration=0.003999s)
+Vectorize... done! (duration=0.004407s)
+Vectorize... done! (duration=0.002871s)
+Vectorize... done! (duration=0.003666s)
+Vectorize... done! (duration=0.004444s)
+Vectorize... done! (duration=0.004659s)
+Vectorize... done! (duration=0.002631s)
+Vectorize... done! (duration=0.004117s)
+Vectorize... done! (duration=0.003680s)
+Vectorize... done! (duration=0.003382s)
+Vectorize... done! (duration=0.003537s)
+Vectorize... done! (duration=0.003991s)
+Vectorize... done! (duration=0.003182s)
+Vectorize... done! (duration=0.003520s)
+Vectorize... done! (duration=0.003987s)
diff --git a/bench.sh b/bench.sh
new file mode 100755
index 0000000..e63c790
--- /dev/null
+++ b/bench.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+iter=300
+
+echo "Compiling..."
+make clean
+make
+
+
+echo "Launching NOAVX..."
+echo > noavx_results.txt
+for i in $(seq 1 $iter)
+do
+ ./main_noavx >> noavx_results.txt
+done
+
+echo "Launching AVX..."
+echo > avx_results.txt
+for i in $(seq 1 $iter)
+do
+ ./main_avx >> avx_results.txt
+done
+
+
+echo "noavx avg=" $(cat noavx_results.txt |grep -Eo "[0-9]+.[0-9]+"|awk 'BEGIN{A=0}{A=A+$1}END{print(A/'$iter')}')
+echo "avx avg=" $(cat avx_results.txt |grep -Eo "[0-9]+.[0-9]+"|awk 'BEGIN{A=0}{A=A+$1}END{print(A/'$iter')}')
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..99a0eca
--- /dev/null
+++ b/main.c
@@ -0,0 +1,55 @@
+#ifdef USE_VECTOR
+#include <immintrin.h>
+#endif
+#include <stdio.h>
+#include <time.h>
+#include <stdlib.h>
+
+#define STRIDE (256/32) // How many integers fit in a 256 vector register
+#define VSIZE (STRIDE*200000)
+
+int main(int argc, char *argv[]) {
+
+ float start, end, duration;
+
+ int *v1;
+ posix_memalign((void**)&v1, 32, VSIZE * sizeof(int));
+ int *v2;
+ posix_memalign((void**)&v2, 32, VSIZE * sizeof(int));
+ int result[VSIZE];
+
+#ifndef USE_VECTOR
+ printf("Sequential..");
+ start = (float)clock()/CLOCKS_PER_SEC;
+ for(int i=0;i<VSIZE;i++){
+ result[i]=v1[i]+v2[i];
+ }
+ end = (float)clock()/CLOCKS_PER_SEC;
+ duration= end - start;
+ printf(" done! (duration=%.6fs)\n", duration);
+#else
+ printf("Vectorize...");
+ __m256i a,b;
+ // e == extended (for historical reasons just brandy name)
+ // p == packed (multiple packed elements)
+ // i == integer
+ // 32 == each integer is 32bits
+ __m256i c = _mm256_add_epi32(a, b);
+ start = (float)clock()/CLOCKS_PER_SEC;
+ for(int i=0;i<VSIZE;i+=STRIDE){
+ a = _mm256_load_si256((__m256i*)&v1[i]);
+ b = _mm256_load_si256((__m256i*)&v2[i]);
+ c = _mm256_add_epi32(a,b);
+
+ _mm256_store_si256((__m256i*)&result[i],c);
+ }
+ end = (float)clock()/CLOCKS_PER_SEC;
+ duration= end - start;
+ printf(" done! (duration=%.6fs)\n", duration);
+#endif
+
+ free(v1);
+ free(v2);
+
+ return 0;
+}
diff --git a/noavx_results.txt b/noavx_results.txt
new file mode 100644
index 0000000..d8cb736
--- /dev/null
+++ b/noavx_results.txt
@@ -0,0 +1,301 @@
+
+Sequential.. done! (duration=0.006455s)
+Sequential.. done! (duration=0.006836s)
+Sequential.. done! (duration=0.006508s)
+Sequential.. done! (duration=0.006054s)
+Sequential.. done! (duration=0.006185s)
+Sequential.. done! (duration=0.005970s)
+Sequential.. done! (duration=0.005341s)
+Sequential.. done! (duration=0.006463s)
+Sequential.. done! (duration=0.005737s)
+Sequential.. done! (duration=0.005953s)
+Sequential.. done! (duration=0.005464s)
+Sequential.. done! (duration=0.006327s)
+Sequential.. done! (duration=0.006270s)
+Sequential.. done! (duration=0.006069s)
+Sequential.. done! (duration=0.006155s)
+Sequential.. done! (duration=0.005290s)
+Sequential.. done! (duration=0.004568s)
+Sequential.. done! (duration=0.004133s)
+Sequential.. done! (duration=0.004881s)
+Sequential.. done! (duration=0.005144s)
+Sequential.. done! (duration=0.005825s)
+Sequential.. done! (duration=0.006051s)
+Sequential.. done! (duration=0.007220s)
+Sequential.. done! (duration=0.006325s)
+Sequential.. done! (duration=0.005952s)
+Sequential.. done! (duration=0.005055s)
+Sequential.. done! (duration=0.005122s)
+Sequential.. done! (duration=0.005834s)
+Sequential.. done! (duration=0.005903s)
+Sequential.. done! (duration=0.005781s)
+Sequential.. done! (duration=0.006190s)
+Sequential.. done! (duration=0.006288s)
+Sequential.. done! (duration=0.006903s)
+Sequential.. done! (duration=0.006374s)
+Sequential.. done! (duration=0.006138s)
+Sequential.. done! (duration=0.006259s)
+Sequential.. done! (duration=0.007450s)
+Sequential.. done! (duration=0.005860s)
+Sequential.. done! (duration=0.006052s)
+Sequential.. done! (duration=0.006066s)
+Sequential.. done! (duration=0.006205s)
+Sequential.. done! (duration=0.006282s)
+Sequential.. done! (duration=0.005392s)
+Sequential.. done! (duration=0.005714s)
+Sequential.. done! (duration=0.005329s)
+Sequential.. done! (duration=0.005803s)
+Sequential.. done! (duration=0.005939s)
+Sequential.. done! (duration=0.007323s)
+Sequential.. done! (duration=0.006925s)
+Sequential.. done! (duration=0.007741s)
+Sequential.. done! (duration=0.006448s)
+Sequential.. done! (duration=0.006670s)
+Sequential.. done! (duration=0.006154s)
+Sequential.. done! (duration=0.006289s)
+Sequential.. done! (duration=0.005602s)
+Sequential.. done! (duration=0.006637s)
+Sequential.. done! (duration=0.005916s)
+Sequential.. done! (duration=0.006616s)
+Sequential.. done! (duration=0.006174s)
+Sequential.. done! (duration=0.006295s)
+Sequential.. done! (duration=0.006198s)
+Sequential.. done! (duration=0.005801s)
+Sequential.. done! (duration=0.005831s)
+Sequential.. done! (duration=0.005936s)
+Sequential.. done! (duration=0.005111s)
+Sequential.. done! (duration=0.005442s)
+Sequential.. done! (duration=0.005214s)
+Sequential.. done! (duration=0.005616s)
+Sequential.. done! (duration=0.005561s)
+Sequential.. done! (duration=0.004770s)
+Sequential.. done! (duration=0.004671s)
+Sequential.. done! (duration=0.005197s)
+Sequential.. done! (duration=0.005865s)
+Sequential.. done! (duration=0.005745s)
+Sequential.. done! (duration=0.005660s)
+Sequential.. done! (duration=0.004894s)
+Sequential.. done! (duration=0.005139s)
+Sequential.. done! (duration=0.005498s)
+Sequential.. done! (duration=0.005736s)
+Sequential.. done! (duration=0.006094s)
+Sequential.. done! (duration=0.005901s)
+Sequential.. done! (duration=0.005756s)
+Sequential.. done! (duration=0.005099s)
+Sequential.. done! (duration=0.005021s)
+Sequential.. done! (duration=0.005913s)
+Sequential.. done! (duration=0.004574s)
+Sequential.. done! (duration=0.005689s)
+Sequential.. done! (duration=0.005988s)
+Sequential.. done! (duration=0.005548s)
+Sequential.. done! (duration=0.005692s)
+Sequential.. done! (duration=0.005763s)
+Sequential.. done! (duration=0.005664s)
+Sequential.. done! (duration=0.007562s)
+Sequential.. done! (duration=0.004494s)
+Sequential.. done! (duration=0.004097s)
+Sequential.. done! (duration=0.005623s)
+Sequential.. done! (duration=0.004019s)
+Sequential.. done! (duration=0.004875s)
+Sequential.. done! (duration=0.004254s)
+Sequential.. done! (duration=0.005057s)
+Sequential.. done! (duration=0.005236s)
+Sequential.. done! (duration=0.005554s)
+Sequential.. done! (duration=0.004783s)
+Sequential.. done! (duration=0.004486s)
+Sequential.. done! (duration=0.005311s)
+Sequential.. done! (duration=0.005673s)
+Sequential.. done! (duration=0.004255s)
+Sequential.. done! (duration=0.005891s)
+Sequential.. done! (duration=0.006412s)
+Sequential.. done! (duration=0.006630s)
+Sequential.. done! (duration=0.006092s)
+Sequential.. done! (duration=0.005633s)
+Sequential.. done! (duration=0.005967s)
+Sequential.. done! (duration=0.005674s)
+Sequential.. done! (duration=0.005767s)
+Sequential.. done! (duration=0.006205s)
+Sequential.. done! (duration=0.005868s)
+Sequential.. done! (duration=0.006186s)
+Sequential.. done! (duration=0.006160s)
+Sequential.. done! (duration=0.006166s)
+Sequential.. done! (duration=0.005917s)
+Sequential.. done! (duration=0.005726s)
+Sequential.. done! (duration=0.005569s)
+Sequential.. done! (duration=0.006167s)
+Sequential.. done! (duration=0.005367s)
+Sequential.. done! (duration=0.005725s)
+Sequential.. done! (duration=0.005539s)
+Sequential.. done! (duration=0.005998s)
+Sequential.. done! (duration=0.005933s)
+Sequential.. done! (duration=0.005867s)
+Sequential.. done! (duration=0.005833s)
+Sequential.. done! (duration=0.006130s)
+Sequential.. done! (duration=0.005875s)
+Sequential.. done! (duration=0.007998s)
+Sequential.. done! (duration=0.004442s)
+Sequential.. done! (duration=0.005197s)
+Sequential.. done! (duration=0.004793s)
+Sequential.. done! (duration=0.005324s)
+Sequential.. done! (duration=0.004932s)
+Sequential.. done! (duration=0.005535s)
+Sequential.. done! (duration=0.004147s)
+Sequential.. done! (duration=0.005621s)
+Sequential.. done! (duration=0.003879s)
+Sequential.. done! (duration=0.005486s)
+Sequential.. done! (duration=0.004061s)
+Sequential.. done! (duration=0.005053s)
+Sequential.. done! (duration=0.004618s)
+Sequential.. done! (duration=0.005882s)
+Sequential.. done! (duration=0.006024s)
+Sequential.. done! (duration=0.005845s)
+Sequential.. done! (duration=0.005899s)
+Sequential.. done! (duration=0.004930s)
+Sequential.. done! (duration=0.005722s)
+Sequential.. done! (duration=0.008235s)
+Sequential.. done! (duration=0.004721s)
+Sequential.. done! (duration=0.004786s)
+Sequential.. done! (duration=0.004772s)
+Sequential.. done! (duration=0.005477s)
+Sequential.. done! (duration=0.004513s)
+Sequential.. done! (duration=0.005667s)
+Sequential.. done! (duration=0.004915s)
+Sequential.. done! (duration=0.005796s)
+Sequential.. done! (duration=0.004549s)
+Sequential.. done! (duration=0.005541s)
+Sequential.. done! (duration=0.005830s)
+Sequential.. done! (duration=0.006130s)
+Sequential.. done! (duration=0.005980s)
+Sequential.. done! (duration=0.005770s)
+Sequential.. done! (duration=0.006137s)
+Sequential.. done! (duration=0.006131s)
+Sequential.. done! (duration=0.006644s)
+Sequential.. done! (duration=0.005471s)
+Sequential.. done! (duration=0.006122s)
+Sequential.. done! (duration=0.005666s)
+Sequential.. done! (duration=0.006583s)
+Sequential.. done! (duration=0.005661s)
+Sequential.. done! (duration=0.006517s)
+Sequential.. done! (duration=0.005115s)
+Sequential.. done! (duration=0.005659s)
+Sequential.. done! (duration=0.004924s)
+Sequential.. done! (duration=0.005530s)
+Sequential.. done! (duration=0.004467s)
+Sequential.. done! (duration=0.005714s)
+Sequential.. done! (duration=0.006331s)
+Sequential.. done! (duration=0.006541s)
+Sequential.. done! (duration=0.008955s)
+Sequential.. done! (duration=0.005636s)
+Sequential.. done! (duration=0.004691s)
+Sequential.. done! (duration=0.005450s)
+Sequential.. done! (duration=0.006592s)
+Sequential.. done! (duration=0.007671s)
+Sequential.. done! (duration=0.005722s)
+Sequential.. done! (duration=0.004568s)
+Sequential.. done! (duration=0.005909s)
+Sequential.. done! (duration=0.006089s)
+Sequential.. done! (duration=0.005623s)
+Sequential.. done! (duration=0.007487s)
+Sequential.. done! (duration=0.007410s)
+Sequential.. done! (duration=0.005726s)
+Sequential.. done! (duration=0.007090s)
+Sequential.. done! (duration=0.004736s)
+Sequential.. done! (duration=0.004913s)
+Sequential.. done! (duration=0.004743s)
+Sequential.. done! (duration=0.004741s)
+Sequential.. done! (duration=0.004504s)
+Sequential.. done! (duration=0.006194s)
+Sequential.. done! (duration=0.004885s)
+Sequential.. done! (duration=0.004468s)
+Sequential.. done! (duration=0.003946s)
+Sequential.. done! (duration=0.004445s)
+Sequential.. done! (duration=0.004317s)
+Sequential.. done! (duration=0.005220s)
+Sequential.. done! (duration=0.005587s)
+Sequential.. done! (duration=0.006728s)
+Sequential.. done! (duration=0.006144s)
+Sequential.. done! (duration=0.006396s)
+Sequential.. done! (duration=0.006021s)
+Sequential.. done! (duration=0.006639s)
+Sequential.. done! (duration=0.005823s)
+Sequential.. done! (duration=0.006127s)
+Sequential.. done! (duration=0.005715s)
+Sequential.. done! (duration=0.005197s)
+Sequential.. done! (duration=0.006151s)
+Sequential.. done! (duration=0.006165s)
+Sequential.. done! (duration=0.006074s)
+Sequential.. done! (duration=0.005420s)
+Sequential.. done! (duration=0.006128s)
+Sequential.. done! (duration=0.006180s)
+Sequential.. done! (duration=0.004856s)
+Sequential.. done! (duration=0.005259s)
+Sequential.. done! (duration=0.005063s)
+Sequential.. done! (duration=0.004724s)
+Sequential.. done! (duration=0.004366s)
+Sequential.. done! (duration=0.005659s)
+Sequential.. done! (duration=0.003846s)
+Sequential.. done! (duration=0.007471s)
+Sequential.. done! (duration=0.006768s)
+Sequential.. done! (duration=0.004573s)
+Sequential.. done! (duration=0.005363s)
+Sequential.. done! (duration=0.004142s)
+Sequential.. done! (duration=0.004738s)
+Sequential.. done! (duration=0.004499s)
+Sequential.. done! (duration=0.004722s)
+Sequential.. done! (duration=0.004033s)
+Sequential.. done! (duration=0.003894s)
+Sequential.. done! (duration=0.005487s)
+Sequential.. done! (duration=0.004909s)
+Sequential.. done! (duration=0.004608s)
+Sequential.. done! (duration=0.004838s)
+Sequential.. done! (duration=0.004443s)
+Sequential.. done! (duration=0.005320s)
+Sequential.. done! (duration=0.004243s)
+Sequential.. done! (duration=0.007535s)
+Sequential.. done! (duration=0.004333s)
+Sequential.. done! (duration=0.005304s)
+Sequential.. done! (duration=0.004505s)
+Sequential.. done! (duration=0.005305s)
+Sequential.. done! (duration=0.004590s)
+Sequential.. done! (duration=0.006821s)
+Sequential.. done! (duration=0.005769s)
+Sequential.. done! (duration=0.006384s)
+Sequential.. done! (duration=0.006301s)
+Sequential.. done! (duration=0.005222s)
+Sequential.. done! (duration=0.005339s)
+Sequential.. done! (duration=0.004681s)
+Sequential.. done! (duration=0.004205s)
+Sequential.. done! (duration=0.005184s)
+Sequential.. done! (duration=0.004826s)
+Sequential.. done! (duration=0.004295s)
+Sequential.. done! (duration=0.005022s)
+Sequential.. done! (duration=0.005340s)
+Sequential.. done! (duration=0.004832s)
+Sequential.. done! (duration=0.005239s)
+Sequential.. done! (duration=0.005155s)
+Sequential.. done! (duration=0.005755s)
+Sequential.. done! (duration=0.006053s)
+Sequential.. done! (duration=0.005970s)
+Sequential.. done! (duration=0.006671s)
+Sequential.. done! (duration=0.005905s)
+Sequential.. done! (duration=0.005883s)
+Sequential.. done! (duration=0.005864s)
+Sequential.. done! (duration=0.006138s)
+Sequential.. done! (duration=0.005907s)
+Sequential.. done! (duration=0.007824s)
+Sequential.. done! (duration=0.004725s)
+Sequential.. done! (duration=0.005187s)
+Sequential.. done! (duration=0.004558s)
+Sequential.. done! (duration=0.005132s)
+Sequential.. done! (duration=0.004902s)
+Sequential.. done! (duration=0.005629s)
+Sequential.. done! (duration=0.005403s)
+Sequential.. done! (duration=0.005272s)
+Sequential.. done! (duration=0.005811s)
+Sequential.. done! (duration=0.004585s)
+Sequential.. done! (duration=0.005342s)
+Sequential.. done! (duration=0.005603s)
+Sequential.. done! (duration=0.005872s)
+Sequential.. done! (duration=0.005298s)
+Sequential.. done! (duration=0.005681s)
+Sequential.. done! (duration=0.005211s)