From 5bdc9fabaf0534b62cb808ee6062970ea98425c7 Mon Sep 17 00:00:00 2001 From: Ridho Pratama <p.ridho@yahoo.co.id> Date: Thu, 11 Apr 2019 17:58:23 +0700 Subject: [PATCH] Added code --- makefile | 2 +- out | 5000 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.cu | 194 +- 3 files changed, 5189 insertions(+), 7 deletions(-) create mode 100644 out diff --git a/makefile b/makefile index 2d1b24c..8a43cc2 100644 --- a/makefile +++ b/makefile @@ -1,2 +1,2 @@ all: - nvcc -g -o main src/main.cu \ No newline at end of file + nvcc -g -std=c++11 -o main src/main.cu \ No newline at end of file diff --git a/out b/out new file mode 100644 index 0000000..7cd5542 --- /dev/null +++ b/out @@ -0,0 +1,5000 @@ +23934 +213750 +296358 +597133 +901216 +2171588 +2459514 +2974509 +3132558 +3402752 +3922093 +4346436 +4454296 +5191188 +5315472 +5955117 +6597189 +6685270 +6706321 +6727246 +6867850 +7324947 +8152153 +8612641 +8689892 +9609878 +9868812 +10466976 +11156299 +11858997 +12820628 +13056894 +13491401 +13616114 +14063577 +14072563 +15792940 +16367584 +16723921 +17127771 +17225141 +18074193 +18293559 +18498994 +18542023 +19127129 +19651057 +20016106 +20021219 +20123571 +21503188 +21619163 +21956851 +22461125 +22877414 +23091747 +23824924 +23832867 +24189616 +25030386 +25152901 +25595588 +25796127 +26706491 +26746001 +26864256 +27186511 +27365919 +27576534 +27593388 +28404860 +28419579 +28490072 +28904898 +29065216 +29359626 +29500686 +29863101 +29886121 +30247885 +30556227 +31750450 +32018139 +33124663 +33174375 +34011995 +34218435 +34318836 +34539735 +34905775 +35051742 +35216007 +35730019 +37654559 +39114446 +39143163 +40667397 +40968150 +41189412 +41339959 +41620122 +41817015 +42144715 +42473860 +42784938 +43286474 +43520378 +44673064 +45578998 +46270640 +46740799 +47139493 +48809829 +49044748 +49239186 +49580337 +50056327 +50296039 +50818232 +50912666 +51039929 +51182995 +51726110 +54127817 +54475589 +55036484 +55364264 +55709343 +55825838 +56265413 +56301581 +57220204 +57862384 +58322664 +58445190 +58963897 +59424395 +60243311 +60306961 +60787081 +61000831 +62137063 +63009900 +63083592 +63477524 +63654233 +63705737 +63735423 +63756850 +63788990 +64119396 +65138264 +65347628 +67126236 +67224420 +67863444 +67932723 +68220954 +68545161 +68696167 +68853868 +69108320 +69968236 +70508267 +71009147 +71031794 +71190815 +71563776 +71607659 +71637238 +72093727 +72826838 +72990630 +73620875 +73630224 +74108123 +74337801 +74651710 +74758491 +75330731 +75393036 +75406370 +75573031 +75631005 +76959445 +77169898 +77441809 +77463812 +77612345 +77720324 +78256136 +78572868 +79615902 +79656503 +79854542 +81021960 +81301155 +81703059 +82632997 +82905527 +83158228 +83312390 +84377199 +84856923 +85240883 +86453803 +86533709 +87539518 +88756155 +88785711 +88856128 +88967752 +89984534 +90258425 +91289040 +92793707 +92975360 +93904723 +94143289 +95012994 +95122522 +95236118 +96076738 +96514106 +97058664 +97439539 +97861406 +99219344 +99321229 +99327394 +99920346 +100268570 +100450324 +100615599 +100903852 +101026554 +101370239 +101774293 +102150729 +102722362 +102728536 +103381956 +103783999 +104158941 +104986880 +104988686 +105059969 +105446265 +105657160 +107060989 +107173374 +107297367 +107520834 +107778253 +108663279 +111849982 +111867528 +111945777 +112086448 +112350960 +112727000 +112973674 +112998735 +113124361 +113127973 +113989789 +114727790 +115551790 +115679293 +116151809 +116227612 +116347068 +116392167 +116767169 +116921454 +117062990 +117841640 +118111522 +118213406 +118700933 +118701560 +119249096 +119277197 +119970012 +120323589 +120395268 +120461272 +120871953 +120892723 +121246003 +121651961 +122031805 +122113100 +122171230 +122640204 +122999735 +123617024 +124009801 +124438713 +124493432 +124693859 +125586456 +126142004 +126505047 +127511661 +128143262 +128348733 +128723815 +129388418 +129483836 +130073831 +130847685 +131446580 +131791313 +132047222 +132239925 +132929685 +132935430 +133142543 +133390522 +133803732 +134069154 +134585871 +134672412 +134722887 +134778440 +135552716 +136532343 +137029595 +137353281 +137484849 +137488138 +138296683 +138297705 +138380372 +138807292 +139030786 +139032643 +140215666 +141018038 +141138613 +141914466 +143621461 +144404885 +145230533 +147351691 +149516887 +149636296 +151304708 +152058238 +152220636 +152254752 +152355390 +152472311 +153063605 +153458138 +153759570 +153859665 +154061423 +154585990 +154619664 +154904872 +155957889 +156061320 +157219985 +157638633 +158086220 +158214275 +158387291 +159339343 +160912276 +161468148 +161501532 +161593927 +161616153 +161695654 +161986050 +162166099 +162669820 +162958412 +163856872 +164110807 +164667545 +165316029 +165339425 +165804719 +166029300 +166393234 +166799894 +166939168 +167356273 +167648717 +168196257 +168360948 +168669497 +169415817 +170282354 +170385239 +170387358 +170632371 +172424344 +172525667 +172825685 +172970311 +173646163 +174007405 +174026749 +174675238 +175324469 +176333995 +176872249 +177496143 +177707705 +178203599 +180962153 +181054723 +181081836 +181082643 +181323188 +182022928 +183188299 +183493844 +184242190 +184384259 +184694719 +185089748 +185226133 +185598148 +185600690 +185646518 +185686881 +185760495 +185875113 +185952297 +186293453 +186600753 +187427873 +188212232 +189151217 +190103854 +190184787 +190280274 +190402825 +190838327 +190866958 +191190571 +191401807 +191866787 +192530672 +193123878 +193360808 +193375825 +193897170 +194033514 +195094834 +195300200 +196379894 +196939891 +197047461 +197475885 +197515358 +197699633 +197830121 +198172384 +198259611 +199258865 +199483144 +199583013 +200993688 +201131386 +201506045 +202426985 +202452505 +205228196 +205851960 +207637815 +207727031 +207949858 +208219453 +208641025 +209545827 +209771559 +211786387 +212660250 +213014476 +213065486 +213536868 +213665946 +213766259 +215120086 +215808919 +216002114 +216017837 +216056404 +216796851 +217112094 +217916531 +217967979 +217972248 +218466902 +219489726 +220308714 +222292123 +222353193 +222403884 +223396996 +223452581 +224450113 +224577615 +225402083 +225836008 +226381425 +226636069 +226664039 +226816729 +227910973 +228226735 +228355726 +228781138 +229075386 +230234596 +230293719 +230407083 +231468991 +231978749 +232346682 +233096479 +233442537 +233574885 +233683321 +234255070 +234901233 +234943942 +236448315 +238019491 +238989998 +240070339 +241103266 +242191669 +242302885 +242845541 +242971490 +243073230 +243530338 +243842938 +243920530 +245095627 +245719323 +246161829 +246336008 +246340090 +246785606 +248279847 +248340648 +248421847 +248631330 +248783473 +248845064 +249266843 +249799639 +249882431 +250390260 +250465676 +250880399 +251006231 +251045739 +251109976 +251151975 +251471713 +251916213 +252286455 +252472089 +252571707 +252866606 +254278462 +254500017 +255070935 +255480776 +255646218 +255696418 +255744997 +256833792 +257165735 +257574902 +257793635 +258061914 +258185560 +258311106 +258979470 +259109131 +259948176 +261192017 +261323698 +261441438 +261714756 +261931803 +263519416 +263969550 +264211558 +264787805 +265243646 +267435521 +267833897 +268057008 +268263798 +268704351 +268740042 +269149271 +269807180 +270296056 +271532912 +272061851 +272109197 +272361617 +272426339 +272566307 +272959352 +273417227 +274418594 +274772411 +274973201 +275188041 +275910416 +275972765 +276048162 +276150428 +277349246 +277534190 +277887047 +278151068 +279300325 +279617540 +279904952 +279917533 +280483285 +280706710 +280991932 +281724829 +282085511 +282275480 +282699213 +283263901 +283952339 +284034774 +284765325 +285673028 +285830717 +286691621 +286963880 +287292894 +287472821 +288835126 +289019063 +289140974 +289550254 +289785483 +289814520 +290599593 +290628998 +290953632 +291209904 +291328953 +291814054 +292745314 +292911790 +293457964 +294499148 +294598845 +295432879 +296055294 +296702367 +296789675 +297083606 +297216472 +297593505 +297619979 +297983949 +298982745 +299764184 +300024748 +300830281 +300978794 +301526589 +302257784 +302641671 +302770168 +303504660 +303565828 +304249131 +304890833 +304904498 +305086472 +305357932 +306346862 +306840825 +306921112 +307009665 +307860134 +308516194 +308549862 +309729974 +310008763 +310226019 +310371067 +310554653 +310650594 +310722055 +311120371 +312902870 +313017156 +313026569 +313061975 +314182190 +314619829 +314637754 +314966931 +314979679 +315356070 +315397329 +315688116 +315934413 +316185207 +316235817 +316977832 +317377732 +317620829 +318341074 +318453047 +318777396 +319300977 +321117672 +321371180 +321551486 +321890823 +321979981 +322164079 +322866606 +324198689 +324522518 +325084823 +325172450 +326004621 +326702388 +327441952 +327742798 +327766429 +327790400 +328352436 +328568409 +329460906 +330552796 +330554195 +332141462 +332445271 +333015356 +333044386 +333053675 +333324437 +333754242 +334077473 +335222113 +335233176 +335600561 +335649157 +336232984 +336558220 +336643863 +337452056 +337503082 +337576964 +337746256 +338198311 +338815595 +339253923 +339708478 +341015345 +341181794 +341630544 +341970222 +342241309 +342815876 +342857791 +342960597 +343674259 +344547928 +345111594 +346677195 +346777746 +346811470 +346934309 +347108159 +348448002 +349153591 +349162625 +349523704 +349595672 +349678387 +349806853 +351477007 +352308844 +353848053 +353850832 +354096393 +354904404 +355704455 +355838961 +356001384 +357280550 +358758907 +358775542 +360500063 +360531616 +360586051 +360812717 +361000232 +361923533 +362602225 +363105959 +363236132 +363870891 +364507651 +364550802 +364955874 +365483821 +366175578 +366335866 +366585807 +366911060 +367549703 +367651904 +368473835 +369511112 +370575751 +370662389 +371075948 +372044524 +373178222 +373569218 +373655635 +373714500 +374649504 +374688442 +375967511 +376374090 +376752678 +377560408 +378065389 +378447955 +379303133 +379435221 +379567598 +379637090 +379674999 +379718302 +379882500 +379951980 +380226943 +380356867 +380363080 +380478179 +381132555 +381397063 +381480110 +381783855 +382097924 +382401786 +382878699 +383180841 +383987552 +384200606 +384544523 +384557348 +384640574 +384658916 +384779785 +385939930 +387573509 +387702151 +387876452 +389028427 +389756264 +390194441 +390216478 +390285091 +390897568 +391193927 +391451852 +391918976 +392516218 +392652929 +392800196 +392901952 +394079032 +395169745 +395713647 +395912515 +396003029 +396059679 +396606068 +396705206 +396815991 +397144040 +397795425 +397919257 +398037222 +398067240 +398912215 +399490557 +399956759 +400321336 +400539359 +400789573 +400926484 +401412231 +401515039 +402100977 +402344037 +403014625 +404786440 +404859208 +404935213 +406032735 +406295729 +406471045 +406842295 +406875510 +406898787 +407262275 +407284272 +407482678 +407519468 +407871532 +408622170 +409141887 +410465468 +410631434 +410682237 +412397376 +412640346 +413278616 +413516970 +413725540 +414226102 +414662944 +415871922 +417289460 +417511609 +417651642 +417725767 +418290063 +418528985 +418721134 +418835499 +421867228 +422269304 +422419944 +423156670 +423221054 +423353337 +425346291 +425786449 +426181117 +427154789 +427496338 +429905384 +430063678 +431162591 +432329419 +432400191 +433659790 +433956168 +434953116 +435618812 +436572448 +436969329 +437076277 +438182870 +438454886 +438657545 +438883344 +438883573 +439107489 +439162704 +439513744 +439697403 +440230202 +440340298 +440847683 +441776216 +442637918 +444197922 +444240931 +444338231 +444399897 +444498858 +445497356 +445913461 +446411193 +446582170 +446601491 +446825097 +447207665 +447709727 +449682532 +450040318 +450188828 +450463412 +450913370 +451530408 +452354361 +452794546 +452979123 +453102498 +453125712 +453350899 +453536197 +453825608 +454641776 +454971125 +455095274 +455623503 +455636003 +457060601 +457078350 +457222372 +457273910 +457658556 +458044528 +458255689 +458405100 +458728969 +459192574 +459639064 +459852815 +460040227 +460178473 +461276015 +461369921 +461503499 +461796427 +461860817 +462047825 +462998819 +463149657 +464376911 +464579370 +464739672 +464961477 +465217267 +465402927 +465726717 +465758773 +465845490 +466483513 +467034842 +467402080 +467609085 +468364229 +468383487 +468504014 +468924965 +468984400 +469537736 +469558825 +469634563 +469938671 +470441008 +470730771 +470749460 +470973255 +471466299 +471535602 +471872437 +472028326 +472269160 +472602531 +472617136 +473018181 +473662302 +474427287 +474485305 +474512123 +474566754 +474803445 +475372453 +475749614 +475819447 +476445299 +477277818 +477492915 +478151145 +478920969 +479498920 +479744019 +481094112 +483021303 +483589224 +483920788 +484086052 +484169290 +484396079 +485705212 +486073807 +486159076 +486220128 +486238302 +486583263 +486798939 +486920433 +487368067 +487509451 +487855314 +488266903 +488461189 +488575483 +489446965 +489555799 +489598575 +489723932 +490469028 +491500957 +492755548 +492888814 +493319527 +494996147 +495176598 +495192706 +495491009 +495761623 +496912002 +497066217 +497287626 +497704527 +497938290 +498849105 +499408643 +499425807 +499658678 +499689319 +501565433 +501661495 +501840115 +501897646 +502257098 +502710688 +503189128 +503647944 +504729693 +504800926 +504852607 +504973319 +505036176 +505568084 +505591915 +506505773 +506606239 +506996415 +507297946 +507348081 +507596112 +507723746 +508564136 +508663222 +508692516 +509169844 +509825577 +510971320 +511030300 +511750071 +512173292 +512201675 +512664844 +512836656 +513011483 +513077774 +513203234 +513455407 +513497904 +513891790 +513918531 +514849074 +515107349 +515885500 +516744509 +517182198 +517528021 +518195895 +518323823 +518760161 +518978864 +519819521 +520248283 +520853646 +520949002 +521150283 +521385990 +521625936 +521636029 +521764790 +522241311 +522730174 +522849598 +523154685 +523199133 +523630570 +524229719 +524330144 +524360832 +524417479 +524445100 +524549137 +524830979 +525096373 +525877752 +526231169 +526906402 +527419856 +527752974 +528916741 +530138313 +530799850 +531113918 +531208537 +531312482 +531401862 +532147310 +532341109 +533325239 +533470728 +534148350 +534610534 +534648298 +534926810 +535205444 +536380515 +537314105 +537356981 +537987559 +538145117 +538518560 +539504932 +540927207 +541728533 +541794070 +543644425 +544215950 +544685596 +545204057 +546348635 +546737487 +547114647 +547131295 +547273705 +547617182 +547875027 +548667836 +549051941 +549547667 +549675457 +551084087 +551651968 +551797809 +552306460 +552449435 +553396556 +553586936 +554481294 +554816348 +554840685 +555221462 +555843239 +556600735 +557180047 +557980431 +558676811 +559903086 +560217489 +560642900 +560912506 +561423760 +561501371 +562292062 +562376836 +563091955 +563190184 +563224342 +563613494 +564086400 +565221088 +565516820 +565943368 +566984456 +567121392 +567371906 +569103762 +569363149 +569700040 +570042692 +570110514 +571499412 +571556756 +571806712 +571882036 +572271981 +572463916 +573221792 +573552491 +573694839 +573990946 +574140090 +574335946 +575388556 +575590461 +575828111 +576146773 +576245144 +577057288 +577210784 +577278309 +577630019 +578308087 +578385933 +579456243 +579716906 +579801607 +580692658 +581243674 +581321810 +581502307 +581896537 +582531254 +583093155 +583393648 +583470870 +584206676 +584466240 +585350204 +585530554 +587414609 +587848975 +588263870 +588452684 +589350519 +589585479 +589610834 +590346391 +590409690 +590678935 +591071316 +591230199 +591824649 +592185063 +594756829 +595012747 +595095281 +595549541 +595803686 +595864400 +597721913 +599166974 +599231172 +601315779 +601413095 +601421293 +601607404 +601720763 +602232527 +602289544 +603741055 +603757146 +603769894 +604595706 +604687211 +604860636 +605849929 +606199088 +606470152 +607277889 +607682193 +607930589 +607965686 +608129405 +608159104 +608214424 +609095546 +610257093 +610281255 +610472502 +610705608 +611498655 +611750472 +611763826 +612536715 +612783463 +612785019 +614368639 +614487430 +614558912 +615465439 +615670981 +616368801 +617029198 +617636508 +617923478 +618131225 +618672277 +618767163 +618814585 +618829540 +619439349 +619647351 +619744133 +619756309 +620764509 +621071969 +621507909 +622431722 +622661769 +622860133 +624421863 +624784677 +625814487 +626670992 +627117169 +629149987 +629491123 +629743679 +630245879 +630316420 +630337841 +630400017 +630678321 +631105258 +631333524 +631714113 +632143960 +632350801 +633545194 +633559203 +633647931 +633916219 +633990724 +634034749 +634513353 +634627891 +635629081 +635735616 +635978885 +635979303 +636021214 +637227575 +637917305 +637957421 +639717522 +639785694 +640004040 +640205294 +640922866 +641108519 +641371871 +642196191 +642646444 +643411425 +643942570 +644399903 +644723023 +644941569 +645748694 +646288399 +646315053 +647437884 +647801531 +647920096 +648012892 +648865396 +649365125 +649428611 +649907657 +649922460 +650682961 +650896385 +651387627 +652255195 +652733421 +652952687 +653168764 +653184251 +654630788 +654697570 +655537063 +655653120 +655870554 +656088963 +657485076 +657830830 +658096529 +658417776 +658548863 +659250298 +660040971 +660824896 +660920324 +661137877 +662388996 +662861724 +663161982 +663822753 +664284504 +664954239 +665061400 +665141434 +665392794 +665833345 +666297247 +666872117 +667479419 +667970979 +668361203 +668810478 +669235743 +670091874 +670341781 +670389322 +670984295 +670996389 +672677971 +672906671 +673356651 +673491883 +674124560 +674341777 +674401946 +675594773 +676408097 +678118031 +678180703 +679255468 +679416048 +680061286 +680777288 +682126495 +683023243 +683454852 +683656694 +684884793 +685221830 +685242072 +685443445 +686535889 +686832041 +686977077 +687944674 +687980736 +688120643 +688325644 +689052779 +689139268 +689370274 +689534503 +690408526 +692643345 +693085156 +693169702 +693263396 +693541019 +693592208 +694359191 +694920265 +694972065 +695587228 +695625155 +696906135 +697279360 +698221235 +698367159 +698986999 +699159179 +699979634 +700368288 +700551228 +700716251 +701144910 +701685726 +701797079 +701964632 +703259019 +703317663 +703361764 +703753442 +704232185 +704238435 +704324345 +705081233 +705584333 +705616684 +706337567 +706498294 +706719652 +707248277 +707254630 +708283481 +708800774 +708850326 +709143052 +709204440 +711056085 +711499200 +711889925 +712289660 +712576561 +713405664 +713673778 +714960897 +714971367 +715685871 +715904298 +716163670 +716423819 +716592236 +716838149 +717579985 +718737505 +719451342 +719566899 +719937255 +719950677 +720152943 +720388907 +720455792 +721173823 +723236934 +723450541 +723481315 +724643294 +724999699 +725543216 +725617152 +725692478 +726060919 +726392702 +726423049 +726942926 +727555678 +727856832 +728192735 +728244473 +732354167 +732668424 +733481138 +733926637 +733998499 +734055199 +735035289 +735167345 +735446529 +735994419 +737144490 +737246661 +737439591 +737782377 +738633278 +738715152 +738907213 +739396617 +739771471 +739991094 +740039567 +740151222 +740293261 +740877302 +741637887 +741771065 +743813778 +743828965 +744125324 +744643758 +746344418 +747005166 +747142747 +747662775 +747749291 +748059824 +748789078 +750468780 +750480721 +750781259 +750877838 +750976287 +751018973 +751129024 +752898000 +754284883 +754614176 +755117481 +755763687 +756463547 +756724758 +757266692 +757381198 +758980740 +759190694 +759261659 +759525191 +759661468 +760117668 +760615934 +760715439 +761497213 +762186826 +762948529 +762962309 +763002806 +764368711 +764482864 +764901112 +765103149 +766628308 +766702597 +767286596 +767295356 +767301731 +767665261 +768364195 +768580298 +768796763 +768918470 +768942404 +769053620 +769493962 +769600550 +769927523 +770117510 +770164993 +770722356 +770790283 +771446426 +771641830 +771668101 +772868848 +772905602 +773699522 +774686685 +774762393 +776046394 +777895715 +778179234 +779330759 +779598579 +779653813 +780022546 +780092720 +780300364 +780871364 +782347058 +782669734 +783247730 +783586206 +783630576 +783718076 +783987291 +785013949 +785855566 +785861546 +786223556 +786569557 +788346429 +788663625 +788746810 +789047579 +791238886 +791439909 +791808079 +792233065 +792322744 +792433951 +792444296 +792841125 +793251626 +793723093 +794472812 +794505773 +794814909 +795076151 +796105874 +798105587 +798319152 +798557002 +799416960 +799650651 +800239192 +801782472 +802530724 +803011590 +805352699 +805468946 +805600440 +805631422 +805825118 +806253572 +806367878 +806699962 +807026614 +808646136 +808832448 +809596521 +809915580 +810747245 +811101139 +811909393 +812060631 +812262099 +812309331 +812576481 +813362761 +813427369 +814147690 +814263348 +814287382 +814991546 +815041951 +815160261 +816477041 +816718336 +816841665 +817224720 +817245177 +817967179 +818744579 +819114684 +820247012 +820632597 +820796631 +820851342 +820948736 +821565834 +822311848 +822555578 +823364023 +824142910 +824663456 +825359081 +825497949 +826236615 +826252372 +826693570 +827297137 +827677027 +827927172 +827941560 +828470034 +829328164 +829524554 +829552755 +829605023 +830370224 +830371712 +830731173 +830880159 +831562177 +832426984 +832458795 +832471060 +833757560 +833760903 +833853259 +834511482 +835296068 +835695058 +836099935 +836265934 +836571249 +836708185 +836977289 +837099962 +837292009 +837426330 +838226220 +838896383 +839980913 +840140886 +840142593 +840389985 +840457922 +840554232 +840587621 +840612598 +840724245 +840834142 +840855521 +840920478 +841446586 +841625121 +841681404 +842111693 +842487749 +842823102 +843152101 +843647470 +843950684 +843982251 +844429159 +844759696 +845435861 +845699794 +845718428 +845745019 +846485943 +847313248 +847424688 +847661187 +848004996 +848777065 +849243206 +849988506 +849997077 +850160843 +850362553 +851193441 +851376533 +851504365 +851578932 +851673462 +852039443 +852592306 +852769963 +853506041 +854025212 +854067419 +854325698 +854520670 +856501357 +857077425 +858271019 +858277667 +858310021 +859381031 +859835689 +860724191 +861270210 +861412955 +862719490 +863001555 +863310747 +863975460 +865153535 +866133892 +866408109 +866663975 +867919476 +868138771 +868191602 +868464769 +868737995 +868914668 +869412617 +869600835 +870108198 +870192827 +870448406 +871010481 +871105236 +871174127 +871508745 +871792515 +871962505 +872421140 +872918866 +872984343 +873595620 +873786880 +873954755 +874576727 +875440951 +875693789 +875786891 +876000241 +876041437 +876674640 +876701130 +876850191 +877065603 +877509459 +877591449 +877812601 +878307572 +878478779 +878538775 +878607207 +878711874 +879037053 +879299396 +879426815 +879741049 +879811724 +880317314 +880418864 +880438566 +880492278 +880502729 +880670844 +880879282 +881059802 +881356786 +882043897 +882194150 +882666055 +882770339 +884738445 +885030663 +885068893 +886019549 +887078650 +887535066 +888094659 +888582339 +888785268 +888915903 +888948057 +889105789 +891196029 +891815523 +892292996 +892597905 +892908030 +892914010 +894300388 +894468319 +894745623 +895162112 +895187749 +896478043 +896632954 +897049242 +897430373 +897435447 +897700988 +897745109 +897800201 +897828005 +898159481 +898277604 +899094604 +899892995 +899964948 +900813718 +901174423 +901214444 +901801455 +901815769 +902269967 +902983085 +903272597 +904017369 +904305017 +904343034 +904644688 +904885384 +904920696 +905748257 +906462424 +907239832 +907711928 +909038287 +909298163 +909538613 +909706388 +909718472 +910200856 +910602278 +910687046 +911351636 +912143112 +912298451 +912745856 +913088274 +913555006 +913598977 +914474009 +915251608 +915260744 +915533169 +915857005 +916178734 +916197952 +916316457 +916800184 +917769720 +917878239 +917917279 +918254365 +918558471 +918938998 +920186540 +920467657 +921361072 +921397948 +921589527 +922069927 +922910374 +923725777 +924461879 +924480871 +924839789 +924882793 +924924362 +925038303 +925117818 +925551419 +925840834 +926408757 +926438094 +926442649 +926546077 +926673125 +926695383 +926735678 +927612256 +927987629 +928164908 +928303341 +928622412 +929168475 +929401754 +930063183 +931436759 +931520595 +931872061 +932081661 +932126704 +934092231 +934190044 +934882959 +935198149 +935955663 +936202873 +936464072 +936867504 +937384108 +938660458 +938662387 +938847765 +939438859 +939576495 +940157710 +941145790 +941184859 +941587151 +942229836 +942451961 +942528569 +942954589 +944068831 +944323507 +944587992 +945131887 +945429147 +946286876 +947666753 +947855887 +947898595 +948811518 +948824740 +948892315 +948933847 +949439017 +950162230 +950467290 +951612766 +951988367 +952752833 +952759513 +954126818 +954536486 +954609382 +955000147 +955451307 +955495469 +955533538 +955715764 +956061587 +956505361 +956795067 +957016724 +958411919 +958514322 +958976520 +958995671 +959532298 +959849347 +960070928 +962761413 +962828022 +963464713 +963494276 +963711900 +963939730 +964419361 +965283159 +965534139 +965677562 +965884089 +966096374 +966563279 +966705149 +966998638 +967279575 +967361771 +967761230 +968211638 +970088971 +970165915 +970284418 +970367996 +970956471 +971157120 +971388262 +971853354 +972790462 +972865442 +973208178 +975759872 +976906628 +976986735 +977359882 +977886451 +978125811 +978344336 +978709080 +979636696 +980020311 +980690696 +981175012 +981349256 +982066649 +982516345 +982622885 +983800092 +983837680 +984911121 +985494189 +985873127 +986679713 +986827473 +988021442 +988119319 +988385030 +990262511 +990562046 +991459715 +991989788 +991993857 +992112977 +992319946 +992330013 +992456032 +993187167 +994484104 +995073073 +995986482 +996358988 +997043445 +997069593 +998006077 +998425105 +998532861 +998675296 +999045287 +999123256 +999576306 +999894836 +1000492057 +1000969656 +1001186550 +1001341992 +1001358664 +1002099416 +1004501435 +1004518720 +1004967589 +1005521356 +1005769459 +1005775041 +1005971165 +1006261941 +1006343085 +1006615883 +1006664227 +1006755330 +1006781160 +1007620042 +1008117097 +1009566985 +1009787722 +1010245085 +1010252547 +1010868593 +1011547600 +1012070836 +1012328352 +1012630631 +1012777663 +1013508407 +1013535846 +1013679465 +1013896052 +1014121953 +1015836789 +1016093839 +1016489493 +1016753120 +1017127610 +1017134002 +1017542217 +1017875517 +1019046702 +1019060712 +1019072935 +1020557609 +1020814813 +1022155115 +1022815045 +1023049407 +1023588962 +1023639352 +1023872290 +1024096459 +1024200889 +1025471594 +1026927843 +1027170034 +1027202169 +1027559768 +1028355775 +1028617742 +1028622657 +1028720480 +1029087844 +1029721019 +1029750607 +1029798920 +1030319264 +1030519542 +1030527091 +1031015649 +1031057571 +1031189946 +1031216988 +1031277749 +1031809549 +1032082267 +1032138384 +1032428290 +1032635061 +1032869333 +1033120683 +1034155793 +1034161605 +1034358867 +1035052833 +1035349086 +1036783587 +1036979054 +1037508899 +1037688875 +1038384353 +1038418991 +1038932375 +1039843625 +1039947042 +1040181837 +1040578067 +1040891312 +1042194309 +1042793044 +1043074740 +1043078509 +1043586517 +1044163859 +1044524094 +1044586989 +1045050466 +1045414783 +1046086695 +1046113041 +1046334227 +1047330875 +1047590489 +1047830092 +1047919128 +1048641939 +1048732903 +1049061778 +1050155332 +1050211432 +1050341656 +1050430637 +1051332592 +1051813925 +1052286722 +1052916622 +1052990918 +1053299876 +1053516102 +1053593115 +1053799766 +1054354716 +1054531942 +1055634025 +1055935533 +1057074214 +1057325363 +1057329226 +1057802003 +1058065101 +1058244899 +1059175865 +1059293406 +1060164643 +1060275191 +1060469604 +1060782711 +1061021653 +1061470079 +1061779408 +1061871071 +1061924479 +1062245996 +1062269972 +1063045084 +1063966184 +1064212205 +1064936445 +1065393105 +1065770365 +1065984752 +1066063571 +1066363987 +1066466969 +1067011290 +1068029166 +1068881525 +1069261283 +1069434628 +1069461512 +1069544759 +1069623426 +1069923966 +1069992142 +1070137098 +1070804072 +1070924468 +1071155641 +1071486514 +1072403171 +1073766139 +1073888108 +1074854744 +1074926551 +1075346360 +1075569066 +1075604267 +1076334787 +1076358157 +1077710553 +1077908050 +1078834697 +1078918697 +1079468548 +1079672667 +1079718803 +1079876223 +1079931645 +1080531193 +1080570510 +1080739319 +1080994303 +1081121774 +1081287698 +1081333613 +1081540470 +1082201750 +1082662848 +1082942913 +1083487995 +1083730320 +1084058702 +1084611063 +1084633474 +1084734065 +1085145266 +1085473581 +1085584349 +1086167579 +1086369929 +1086963659 +1087148805 +1087999764 +1088936590 +1089056013 +1089343646 +1090200304 +1090476771 +1090498261 +1090541021 +1091401168 +1091462655 +1091812936 +1092014639 +1092280019 +1092592192 +1093292985 +1093861304 +1094362757 +1095773043 +1096206859 +1097111269 +1097944365 +1098273566 +1098903088 +1099073579 +1099594159 +1099711173 +1100027034 +1100473381 +1100741495 +1101097922 +1101545436 +1101556576 +1102072020 +1102209104 +1103511156 +1104944284 +1105471812 +1105938322 +1106049165 +1106594531 +1107245983 +1107673058 +1107755919 +1107844774 +1108044518 +1108091058 +1108517508 +1108755618 +1109799364 +1109922364 +1109923104 +1110551809 +1110995440 +1111223904 +1111348636 +1111498302 +1111673450 +1111913622 +1111943550 +1112292396 +1112547055 +1113429033 +1113717133 +1113965722 +1114046027 +1114921616 +1114971803 +1115610847 +1116019379 +1116579084 +1117340404 +1117565648 +1117929074 +1117932625 +1118040001 +1119022926 +1119206839 +1119337427 +1119651086 +1120295798 +1120358222 +1120407844 +1120571525 +1121130142 +1121464431 +1121799257 +1121957952 +1122270586 +1122399578 +1122897791 +1123579704 +1123710199 +1123835189 +1124395197 +1125273353 +1125351103 +1125384018 +1126279919 +1126471534 +1127093767 +1128002758 +1128550286 +1128958250 +1129089769 +1129238968 +1129649179 +1129711111 +1129976156 +1130317166 +1130516817 +1131551243 +1131684503 +1132161989 +1132488400 +1133543597 +1133655857 +1134218249 +1134459598 +1135152663 +1135319251 +1135541468 +1135598522 +1137328011 +1137334542 +1137595274 +1139093195 +1139399547 +1140552318 +1140688085 +1141401170 +1141443464 +1141770237 +1141884694 +1142788490 +1142912390 +1143201716 +1143657087 +1143760525 +1144753118 +1144782128 +1144845945 +1145420545 +1145605070 +1146509639 +1147243673 +1148609124 +1148956081 +1150207131 +1150431356 +1150928466 +1151766394 +1151998697 +1152644825 +1152966052 +1153515764 +1153747243 +1153838985 +1154017472 +1154262551 +1154585996 +1155283960 +1155356110 +1155627337 +1155801799 +1155956630 +1156570753 +1157861195 +1158247995 +1158612410 +1159109167 +1159172648 +1159425168 +1159993999 +1160810118 +1161079656 +1161261388 +1162486392 +1162621715 +1162724895 +1162807400 +1163276241 +1163382401 +1163606529 +1163865603 +1164191699 +1164923549 +1165041417 +1165150572 +1166204325 +1166390696 +1166715126 +1167919865 +1167971839 +1168299671 +1169183565 +1169802184 +1170029864 +1171378820 +1171715681 +1171831062 +1172544631 +1172977881 +1173142695 +1173892272 +1174878299 +1175363534 +1175625879 +1175993890 +1176160194 +1176904710 +1177099799 +1177124860 +1177275354 +1178221166 +1178226729 +1178298096 +1178763659 +1179027058 +1179400074 +1179585161 +1179827965 +1179861567 +1179927083 +1180344939 +1180782079 +1181191422 +1181463821 +1181763794 +1182002745 +1183614578 +1183837162 +1184196345 +1185184305 +1185754772 +1186023369 +1186152522 +1187411050 +1187425249 +1187692262 +1187745934 +1188537676 +1188576841 +1188718688 +1189280465 +1189404118 +1189916547 +1190617506 +1190757635 +1190886078 +1191386403 +1191724647 +1192173799 +1192453812 +1192511042 +1193575210 +1194114382 +1195298511 +1195349524 +1195962525 +1196142114 +1196323043 +1196633742 +1196660905 +1196776525 +1197535782 +1197665146 +1197761826 +1198053336 +1198091467 +1198146638 +1198193805 +1198546566 +1200601289 +1200818893 +1200928475 +1201764499 +1202611923 +1203427159 +1203812157 +1203819121 +1203819632 +1203854780 +1204369782 +1206307352 +1206339464 +1206484486 +1206502274 +1207470068 +1207680164 +1208110708 +1209104096 +1209572269 +1209755052 +1209815787 +1210057761 +1210168793 +1210594440 +1210914999 +1210944476 +1211231592 +1211619810 +1212181129 +1212979573 +1214861181 +1216262954 +1216540136 +1216986819 +1217123248 +1217275657 +1217294366 +1217604021 +1217725207 +1218182132 +1218462612 +1218564942 +1218841575 +1219612741 +1219765659 +1219773394 +1220457562 +1220986741 +1221581474 +1222049408 +1222792775 +1223058825 +1223334859 +1223486437 +1223980065 +1224829012 +1225647192 +1226091857 +1226388993 +1226441353 +1226644407 +1227089351 +1227128296 +1227374915 +1227904095 +1227932198 +1228235415 +1228452243 +1228755729 +1229344765 +1230238890 +1230896171 +1231047282 +1231156996 +1231435493 +1231601802 +1231954014 +1231987635 +1233995760 +1234562347 +1235005733 +1235852112 +1236121192 +1236757553 +1237011439 +1237569494 +1238323990 +1239218871 +1240174493 +1240200544 +1240718342 +1240778998 +1241036230 +1242168760 +1242393630 +1242812428 +1244406841 +1244486392 +1245909592 +1245956306 +1246404408 +1246468975 +1247049036 +1247115310 +1248987569 +1249080433 +1249581403 +1249750507 +1249878160 +1249911240 +1250709648 +1251459786 +1251620147 +1251748109 +1251791199 +1252107663 +1252510905 +1253044813 +1253986152 +1254513520 +1254637646 +1254693492 +1254886439 +1255321303 +1255402241 +1255744939 +1255930783 +1256292864 +1256303457 +1256503031 +1256743812 +1257182973 +1257702306 +1258117305 +1258198315 +1258388712 +1259308229 +1259467816 +1259845953 +1260139183 +1260992535 +1261101346 +1261771556 +1262733795 +1262972537 +1263913986 +1264020042 +1264425904 +1265216571 +1265228664 +1266538021 +1266824424 +1267492239 +1267494303 +1267598330 +1267619941 +1268678364 +1270715228 +1270999591 +1271217907 +1272224999 +1272642994 +1273372946 +1273771105 +1274434997 +1274831626 +1274908546 +1275089108 +1275102490 +1275628830 +1275938126 +1276350055 +1276380415 +1276539290 +1276820018 +1277182580 +1277453761 +1277519689 +1277985548 +1278785981 +1278844909 +1279486643 +1280300687 +1281134914 +1282344668 +1282409386 +1283362756 +1283498988 +1284490376 +1285204065 +1285895230 +1286358301 +1287007275 +1287419275 +1287681290 +1287970100 +1288390172 +1290206234 +1290302365 +1290365793 +1290516751 +1291250959 +1291980727 +1292682027 +1293051445 +1293117550 +1293203323 +1293315299 +1293582704 +1293787144 +1293991658 +1294150597 +1294259903 +1294355288 +1295692662 +1295821495 +1295998720 +1297010079 +1297136603 +1298722330 +1298854010 +1299917234 +1300636351 +1300759624 +1301020017 +1301305371 +1301665649 +1302055012 +1302332179 +1303099868 +1303106550 +1303244801 +1303428615 +1303464916 +1303618745 +1304715817 +1305868967 +1306126703 +1306524581 +1307872323 +1308246523 +1308598905 +1308711312 +1308865789 +1308993123 +1309005761 +1309674216 +1309887313 +1311266983 +1312045806 +1312057763 +1312238594 +1312859811 +1313626393 +1313840645 +1314378360 +1314581859 +1314980087 +1315235578 +1315550243 +1315609614 +1316135813 +1316795158 +1317362815 +1317628227 +1317685764 +1317955572 +1318109467 +1318112960 +1318117123 +1318817477 +1318826051 +1319759976 +1320193713 +1320998373 +1321476496 +1321526058 +1321570822 +1321783041 +1321902420 +1322223331 +1322445402 +1323514869 +1323707823 +1324131250 +1324389173 +1324398690 +1324883698 +1325050247 +1326823833 +1327267031 +1327883125 +1327907380 +1328986155 +1329356095 +1329548767 +1330056367 +1330591078 +1330591865 +1330630548 +1330665240 +1331590216 +1331603739 +1332403141 +1332961252 +1333430297 +1334271853 +1334409042 +1335016663 +1335097471 +1335252995 +1335935960 +1336351177 +1336362589 +1336577531 +1336692646 +1336778054 +1336830130 +1337021702 +1337140137 +1337696656 +1339268337 +1339359722 +1340579274 +1341260903 +1341346370 +1342931898 +1343067335 +1343451516 +1343703684 +1343765835 +1344501540 +1345309568 +1346354433 +1346793579 +1346970098 +1347305936 +1347452806 +1348296040 +1348938589 +1350122134 +1350471259 +1350500853 +1350836967 +1351621791 +1351687712 +1352750093 +1353636826 +1353652294 +1353965040 +1354220464 +1355305113 +1355727544 +1355869088 +1357093410 +1357246892 +1357270295 +1357367167 +1357501695 +1358070146 +1358211202 +1358258628 +1358654879 +1359018069 +1359161466 +1359175016 +1360982254 +1361164449 +1361325760 +1361447163 +1361836802 +1361877452 +1361939807 +1362084833 +1362708634 +1362897542 +1363312824 +1363479714 +1363488896 +1363786400 +1364318182 +1364604716 +1365914242 +1366325793 +1367193450 +1367423162 +1367476924 +1367654081 +1368655573 +1368876735 +1368879157 +1369106493 +1369264647 +1369472886 +1369653553 +1370401890 +1370407628 +1370450959 +1371079064 +1371111347 +1371850344 +1372170912 +1372256416 +1372341200 +1373093559 +1373454441 +1373715728 +1375225427 +1375794209 +1375903821 +1376230181 +1376285131 +1376432468 +1377474840 +1378095087 +1378228526 +1378426536 +1378655843 +1379246661 +1380254949 +1380430354 +1380973492 +1381586775 +1382600700 +1382801611 +1382969866 +1384627510 +1384772307 +1384870876 +1385082793 +1385225811 +1385622579 +1385695068 +1385934905 +1386030481 +1386453326 +1386907833 +1387235282 +1387988232 +1388199302 +1388272338 +1390027146 +1390384957 +1391072891 +1391547265 +1391908042 +1393114267 +1393654358 +1394280120 +1394428135 +1395039743 +1395171834 +1395275317 +1396337825 +1396582906 +1397159896 +1397251054 +1398483031 +1398655599 +1399224595 +1399324181 +1399957580 +1400439719 +1401047675 +1401213120 +1403140492 +1404114586 +1405061826 +1405287744 +1405328471 +1406639146 +1407516609 +1407797287 +1407824438 +1408344577 +1408759857 +1409023855 +1409663690 +1410049396 +1410263135 +1410445863 +1410940071 +1411239184 +1412121383 +1413004758 +1413057376 +1413114424 +1413502251 +1413522075 +1413602000 +1414723613 +1415050885 +1415083309 +1415263304 +1415607206 +1417314939 +1418450257 +1418842893 +1419010306 +1419066321 +1419229814 +1419395059 +1419602938 +1419716132 +1419884685 +1420412638 +1421154134 +1421869115 +1422718329 +1422945078 +1423187771 +1423329721 +1423499694 +1423951884 +1424133369 +1424152226 +1424764863 +1425491137 +1425528816 +1425750191 +1426225112 +1426627456 +1426697259 +1426857901 +1427245479 +1428072514 +1428239456 +1428792512 +1429491405 +1430295847 +1431536176 +1432310881 +1432407947 +1432410882 +1432500118 +1432508921 +1433310062 +1433542045 +1433949777 +1434091713 +1434450170 +1434610577 +1434697648 +1434698345 +1435139121 +1435976243 +1436445015 +1436451497 +1436639176 +1436656013 +1438209604 +1438244485 +1438928575 +1439085914 +1439243004 +1440241698 +1440451892 +1440540720 +1440745411 +1441232322 +1441472430 +1442108920 +1443012500 +1443398688 +1443496591 +1443528445 +1443665816 +1444070840 +1445592436 +1445750720 +1445821302 +1446878841 +1446893156 +1447008264 +1447702058 +1447831405 +1448410180 +1448743560 +1449054948 +1449694851 +1449801758 +1449931350 +1449945531 +1450227316 +1450228940 +1450775421 +1450977510 +1451521384 +1451633626 +1451998682 +1452905789 +1453424868 +1454471389 +1454523044 +1454630509 +1455049157 +1455106356 +1455455795 +1455618870 +1456259549 +1456487714 +1458351804 +1458489975 +1458537817 +1458841841 +1459403616 +1459480057 +1459483699 +1459705675 +1459875994 +1459894598 +1460135725 +1460474853 +1461062209 +1461070564 +1461100452 +1463031386 +1463295791 +1463504477 +1464233010 +1464420267 +1464721618 +1464742852 +1464842350 +1464933907 +1465047641 +1465905327 +1466808758 +1467609796 +1467776403 +1468612375 +1468653906 +1469204570 +1469706221 +1471499908 +1472614534 +1472683889 +1473017832 +1473205868 +1473368255 +1474779409 +1475347496 +1475821206 +1476575279 +1477242542 +1477379589 +1477458914 +1477927053 +1478145746 +1479142193 +1479280526 +1479949218 +1480017225 +1480672252 +1480947739 +1480969173 +1482138076 +1482531718 +1483582856 +1485039997 +1485359446 +1485431084 +1485598392 +1485690683 +1485714618 +1486521997 +1486540233 +1486693915 +1487283078 +1487714516 +1487928255 +1488133531 +1488695107 +1488695548 +1490585015 +1490787730 +1492471054 +1492509748 +1493076599 +1494154211 +1494680106 +1495626549 +1495919490 +1496046304 +1496760470 +1496802893 +1497880703 +1498169039 +1498638385 +1498763148 +1499592728 +1499958859 +1499978592 +1501116906 +1501539837 +1501746466 +1502558983 +1503377612 +1504197198 +1504705970 +1504888727 +1505186102 +1505192909 +1505357019 +1505407750 +1505535844 +1505584438 +1506136229 +1506741006 +1506798494 +1507265993 +1507432220 +1507576039 +1507982243 +1507998605 +1508794265 +1509326433 +1509456908 +1509788539 +1510540667 +1510901413 +1510935564 +1511591429 +1511628496 +1512565327 +1512891952 +1512893137 +1513111130 +1513627752 +1513924698 +1514254186 +1515198539 +1515373071 +1515720562 +1516323429 +1516386075 +1516832989 +1516836759 +1517243869 +1517560482 +1518765810 +1518917213 +1519120990 +1519230632 +1519242819 +1520643860 +1521515886 +1521798744 +1522776731 +1523192135 +1523702398 +1523983212 +1524167060 +1525910734 +1526355306 +1526407714 +1526749762 +1527055385 +1527513410 +1527721152 +1528127203 +1528676364 +1529103621 +1529137258 +1529511531 +1530146545 +1530538153 +1530778530 +1530825696 +1531065178 +1531140785 +1531300205 +1531690195 +1532870096 +1534785624 +1535072535 +1535205850 +1535599017 +1535805837 +1535886522 +1535978814 +1536840979 +1536869171 +1536924687 +1537043402 +1537100560 +1537438547 +1537466787 +1537694182 +1537797196 +1538366486 +1538495616 +1538650793 +1538801176 +1539292941 +1539301063 +1540087409 +1540276429 +1541014123 +1541024888 +1542797931 +1542852843 +1543471177 +1543780329 +1544172912 +1544482367 +1544599419 +1545555465 +1545845073 +1545984828 +1546235409 +1546341379 +1546396679 +1547527037 +1547842251 +1547854560 +1547938484 +1549863714 +1550212889 +1550723081 +1551181379 +1551370404 +1551423265 +1551593013 +1551626554 +1551632057 +1552058012 +1552815573 +1552846681 +1552904913 +1553549698 +1553573544 +1553889428 +1554026987 +1554641872 +1555121736 +1555631031 +1556417693 +1556618805 +1556768774 +1557018545 +1557647802 +1558573986 +1558668493 +1559579870 +1560504250 +1561735863 +1562241747 +1563087987 +1563247615 +1563629658 +1564290179 +1564312926 +1564755980 +1565935715 +1566618440 +1567097324 +1567440617 +1568263540 +1568683983 +1568780792 +1569097303 +1569814457 +1570220251 +1570671967 +1570920398 +1571637137 +1571699424 +1572238090 +1572504782 +1572725893 +1572781709 +1574045922 +1574860358 +1574908424 +1575015675 +1575023651 +1575281521 +1575664258 +1575805720 +1576554383 +1577115072 +1577163781 +1577573646 +1577606869 +1578142834 +1578358314 +1579080981 +1579195031 +1581570940 +1581922754 +1581998436 +1582014656 +1582234260 +1582568210 +1583894162 +1584145174 +1584319950 +1584341886 +1584348415 +1584894927 +1586087359 +1586109049 +1586843560 +1586962666 +1587338496 +1588540135 +1588631256 +1588881797 +1589283262 +1589606185 +1590135090 +1590269840 +1590589920 +1590663369 +1590860456 +1591459424 +1591816266 +1592307243 +1592328711 +1592638623 +1592818251 +1592873536 +1593002574 +1593388194 +1594028069 +1594583050 +1595514692 +1595604540 +1595637731 +1595705804 +1596144795 +1596306958 +1596337474 +1596834032 +1596908475 +1596968093 +1598034969 +1598108858 +1598771536 +1599404058 +1600135964 +1600181613 +1600405392 +1600567935 +1600773106 +1600868639 +1602193118 +1602322466 +1602541485 +1602547920 +1603030280 +1603908979 +1604467203 +1604551714 +1605165857 +1605372440 +1605596555 +1606809216 +1607394414 +1607854694 +1608335037 +1608539488 +1608576321 +1608694584 +1609002587 +1609565949 +1610623829 +1611356689 +1611470578 +1611604321 +1611895381 +1612113021 +1612332863 +1612460176 +1612551724 +1612590622 +1612693220 +1612712622 +1612834752 +1612873490 +1613896793 +1614939758 +1616724268 +1616786890 +1617161908 +1617659078 +1617756582 +1618130077 +1618516046 +1619190622 +1619572763 +1619741172 +1620341688 +1620353783 +1620634926 +1620724463 +1620803340 +1621616696 +1621946347 +1623567119 +1623593674 +1623671144 +1623889705 +1624110006 +1624274069 +1624301679 +1624753025 +1626063580 +1626101908 +1626451265 +1626463906 +1627142890 +1627323955 +1627640595 +1627983286 +1628223772 +1628382710 +1628556129 +1629619660 +1630127407 +1630379872 +1630662260 +1630783695 +1630931315 +1631494740 +1631902777 +1632676582 +1633902426 +1634012574 +1634429878 +1634780894 +1635041528 +1635373919 +1635496363 +1636145525 +1636217193 +1637021092 +1637028496 +1637115833 +1637239551 +1638157506 +1638793323 +1640000256 +1641870026 +1642100642 +1642127250 +1642395127 +1643291909 +1643409872 +1643984950 +1644414370 +1644615960 +1645646365 +1645777941 +1646090347 +1646230055 +1647369489 +1647625400 +1648305631 +1648971726 +1649000449 +1649158283 +1649191940 +1649318205 +1650868392 +1651457986 +1651802090 +1651829418 +1652136993 +1652372516 +1652901880 +1652932382 +1653667042 +1653805359 +1654263781 +1654373918 +1654446914 +1656574434 +1656939345 +1657352740 +1657727392 +1658664869 +1659089265 +1659481299 +1659720136 +1659990508 +1660338533 +1660533656 +1660551800 +1660824120 +1661088937 +1661923173 +1662002045 +1662214004 +1662302665 +1662868264 +1663279028 +1663604694 +1664194771 +1664340394 +1665149845 +1665178026 +1665256799 +1665704958 +1666623380 +1668788694 +1669498478 +1669576848 +1669635618 +1669834294 +1669935226 +1670709291 +1671401800 +1671777461 +1672135092 +1673037663 +1673383931 +1674412826 +1674560008 +1675751097 +1676466936 +1677006932 +1677870164 +1678534257 +1678619483 +1679901783 +1680097533 +1681324257 +1682007638 +1682240266 +1683227263 +1683334028 +1683923859 +1684126882 +1684240151 +1684388395 +1684817289 +1684936439 +1685203490 +1685685181 +1685702246 +1686392028 +1686408734 +1686696666 +1686807778 +1687323110 +1687378877 +1687476447 +1687880747 +1688168999 +1688241912 +1688912903 +1688934150 +1689693976 +1690836407 +1691061313 +1691692369 +1693341759 +1693460543 +1695102498 +1695207771 +1695396003 +1696232021 +1696467038 +1696632838 +1696935651 +1696949651 +1697405265 +1697638537 +1698098279 +1698545515 +1699174284 +1699965264 +1700304247 +1700702571 +1701588577 +1701683410 +1702257992 +1702834439 +1703379607 +1704129334 +1704161084 +1704264827 +1704412342 +1704737220 +1704906633 +1705364514 +1705610894 +1705754161 +1706247387 +1706502365 +1706965169 +1707575989 +1708164079 +1708390353 +1708409944 +1709107003 +1709341008 +1709729117 +1709809057 +1710642485 +1710730159 +1710914139 +1711225639 +1711643278 +1711825554 +1711978862 +1712284623 +1715597754 +1716064418 +1716437145 +1716641134 +1716798367 +1716828437 +1717152948 +1717683690 +1717711077 +1717768715 +1718019788 +1718571470 +1718938252 +1719081194 +1719089635 +1719846912 +1720161814 +1720252477 +1720719227 +1720834222 +1721002595 +1721499612 +1722108594 +1722312204 +1723158726 +1724688133 +1724889669 +1725027922 +1725050296 +1725325312 +1725337180 +1725355363 +1725453560 +1725664389 +1727128294 +1727208682 +1727703248 +1728440583 +1728502367 +1728567862 +1728868594 +1729402342 +1729639073 +1729894787 +1730226641 +1730241048 +1731589255 +1731818097 +1732129941 +1732629507 +1732688637 +1733248286 +1733462069 +1734272368 +1734387297 +1734789517 +1735274200 +1735624520 +1736612656 +1736679923 +1738088206 +1738175380 +1738255026 +1739519924 +1740513945 +1741554487 +1741931142 +1742375146 +1742986429 +1743032821 +1743041946 +1743765993 +1743836175 +1744431894 +1744985141 +1745809824 +1745879823 +1745901051 +1746167635 +1746417620 +1746624522 +1746647939 +1747373111 +1747922247 +1748773631 +1748916216 +1748993990 +1749012941 +1749104111 +1749317927 +1749717606 +1749997108 +1750165938 +1750774742 +1751045033 +1751165354 +1751236381 +1752243179 +1752586702 +1752597621 +1752687582 +1753111210 +1753327792 +1753396920 +1753922393 +1754101135 +1754857528 +1755703458 +1755975637 +1756190539 +1756455167 +1757509364 +1757626418 +1758631894 +1758791480 +1759034081 +1759229145 +1759571373 +1760007510 +1760864746 +1761681799 +1761951946 +1762683313 +1763620284 +1763762761 +1764331347 +1764888346 +1766085994 +1767064304 +1767159461 +1767685428 +1769417296 +1770931517 +1771900306 +1772045440 +1772597348 +1772727918 +1773513941 +1773526253 +1773949115 +1774061477 +1774480966 +1775244710 +1775529420 +1775944437 +1776226277 +1776391876 +1776567664 +1777715094 +1777924895 +1778615001 +1778809705 +1778830818 +1778919550 +1779459683 +1779537213 +1781208899 +1781335352 +1781351110 +1781395876 +1781446334 +1782127014 +1784121240 +1784282684 +1784916965 +1785138067 +1785388994 +1786541545 +1787045425 +1788551313 +1788665163 +1788834531 +1789660092 +1790605567 +1791057037 +1791088246 +1792961290 +1793307347 +1794723799 +1795731457 +1795773340 +1797029698 +1797100993 +1797682042 +1797828708 +1798528968 +1798767278 +1798935995 +1799355357 +1799896845 +1800802470 +1800849949 +1800863221 +1800879860 +1801752479 +1801954032 +1802275421 +1802466824 +1803300144 +1804116843 +1804157463 +1805218600 +1805994780 +1806007358 +1806523075 +1807555369 +1807686818 +1807887055 +1808006892 +1810261170 +1810323910 +1810596231 +1810919018 +1810971726 +1811124055 +1811415996 +1811918110 +1812634444 +1813962891 +1814048630 +1814082785 +1814093336 +1815135670 +1815256668 +1815580636 +1816638318 +1816771322 +1816775657 +1817933655 +1818081479 +1818229704 +1818317463 +1818638085 +1819226445 +1819423087 +1820085247 +1820350762 +1820877172 +1821432646 +1822325418 +1822536107 +1823280620 +1823398903 +1823472138 +1823936711 +1824121814 +1824901733 +1825160034 +1825640681 +1826112086 +1827170163 +1827806698 +1828338147 +1828547002 +1828621903 +1829306368 +1830657919 +1831643681 +1831935473 +1832050562 +1832386924 +1832599954 +1833174445 +1834106329 +1834545821 +1834778407 +1835458566 +1835489754 +1836033971 +1836677283 +1836930404 +1837137851 +1837521720 +1837536996 +1837669697 +1839012927 +1839444197 +1839611683 +1839650078 +1839956690 +1840419705 +1841431014 +1841616958 +1842375832 +1842739318 +1844044190 +1844773464 +1845239366 +1846573893 +1846763371 +1847864126 +1848047596 +1848096803 +1848217981 +1848558317 +1848625039 +1849333307 +1849615328 +1849869217 +1849981288 +1850045932 +1850869067 +1851670726 +1852483786 +1852556590 +1852729910 +1853198262 +1853316265 +1854513839 +1854698979 +1854995384 +1855107352 +1855128349 +1855246903 +1855738220 +1856252668 +1856402347 +1856577411 +1856701876 +1856981677 +1857007665 +1857151008 +1857209396 +1858368270 +1859132925 +1859234592 +1859350294 +1859942324 +1860470936 +1861516178 +1862196333 +1862825926 +1864383148 +1864749417 +1864854610 +1865534362 +1865625473 +1865629204 +1865752810 +1866886737 +1866969175 +1867021345 +1867087103 +1867487650 +1868509258 +1869617438 +1869757747 +1869852469 +1869930895 +1870294130 +1870606082 +1870999599 +1871195387 +1871473990 +1871513263 +1871555915 +1871888689 +1872251280 +1872303241 +1872367804 +1872435882 +1872748264 +1873484371 +1873735508 +1874779212 +1875030845 +1875151449 +1875618429 +1875641874 +1876054171 +1876273980 +1876302413 +1876708948 +1876972791 +1876986684 +1877466557 +1877476927 +1877776572 +1877973246 +1878763167 +1878916444 +1879714622 +1879830123 +1879840594 +1880083573 +1880219374 +1880266963 +1880684834 +1881437976 +1881659223 +1881824776 +1882334564 +1882449900 +1882519922 +1882883369 +1883594027 +1884194055 +1885107717 +1885564264 +1886163717 +1886291045 +1887593674 +1887625971 +1887962137 +1888169935 +1890202799 +1890434496 +1890458434 +1890471759 +1891450393 +1891938606 +1892620627 +1892773090 +1892851789 +1893320027 +1893551626 +1893938798 +1894437051 +1894467632 +1895234336 +1896655972 +1896703948 +1897416004 +1897461174 +1897841752 +1899179563 +1899911472 +1900422749 +1901150293 +1901286142 +1901684521 +1901693311 +1902443967 +1902530673 +1902610000 +1903268197 +1903334240 +1903947086 +1904680578 +1905003776 +1906091441 +1906744988 +1906948295 +1907674805 +1909025608 +1909105418 +1909259407 +1910729254 +1911352385 +1911668953 +1911883266 +1911996237 +1912312715 +1912392043 +1912402376 +1914173006 +1914805462 +1915183833 +1916499941 +1917270253 +1917868716 +1917983393 +1918145896 +1919334842 +1919368667 +1919822464 +1920949997 +1921073078 +1921860512 +1923633613 +1923651111 +1923867247 +1924049382 +1924219276 +1924263329 +1925550230 +1926126931 +1926271814 +1926276680 +1926834437 +1926952218 +1927643609 +1927982601 +1929568454 +1929716765 +1930006688 +1930067868 +1930263240 +1930670634 +1931507109 +1932097224 +1932172492 +1932558144 +1933025753 +1933029716 +1933610590 +1934328973 +1934979130 +1935690843 +1935926871 +1936388777 +1936683478 +1937793412 +1938068202 +1938559259 +1938769923 +1938871710 +1939121164 +1939660146 +1939677768 +1939908905 +1940240573 +1940355734 +1940818215 +1941089184 +1941253883 +1941326484 +1941375512 +1941755594 +1941857108 +1942006667 +1942514719 +1942817138 +1943019248 +1943080542 +1943285835 +1943786272 +1944684256 +1945010622 +1945653101 +1947343185 +1947644704 +1947645472 +1948397781 +1948508721 +1950080621 +1951003530 +1951171027 +1951298678 +1951731705 +1952071051 +1952585257 +1952834829 +1953148262 +1953253608 +1953678351 +1953862402 +1954215477 +1954497823 +1954621588 +1954940165 +1955158468 +1955486133 +1955998995 +1956027451 +1956150956 +1956189497 +1957695439 +1958074840 +1958304952 +1959016920 +1960031356 +1960619049 +1960792137 +1960834730 +1961413336 +1963047118 +1963062986 +1963313242 +1963496437 +1963542893 +1964218348 +1964400524 +1964576345 +1964642700 +1964696712 +1965312373 +1965621783 +1965686759 +1965731647 +1965765228 +1965857171 +1965973366 +1966026196 +1966939893 +1967510716 +1968289133 +1969700784 +1969900169 +1970534629 +1970701833 +1971659915 +1971989529 +1972881499 +1973396698 +1973506044 +1973932127 +1974483868 +1974694965 +1975437862 +1975905157 +1976219853 +1976558490 +1977302178 +1977450980 +1977536497 +1977937289 +1978301021 +1979087899 +1979578388 +1980016926 +1980337716 +1980646841 +1981183621 +1981371417 +1981545726 +1981736399 +1982132657 +1982143363 +1982990460 +1984593536 +1985353482 +1985526824 +1985576688 +1985860015 +1985923345 +1986983089 +1987224441 +1987492160 +1987893091 +1988026234 +1988082137 +1988395998 +1988599279 +1989002542 +1989406352 +1989588155 +1989660589 +1989903811 +1990214760 +1990512899 +1990561405 +1990601164 +1990750921 +1991182647 +1991223063 +1991900462 +1992224317 +1993029903 +1993409649 +1993551282 +1994020764 +1994111724 +1994616623 +1994832932 +1994849863 +1994895626 +1995053959 +1995209800 +1995575278 +1995912201 +1996017795 +1996273425 +1996293750 +1996482029 +1996724087 +1997150307 +1997711537 +1999417565 +1999514133 +1999617424 +1999989815 +2000264629 +2000852430 +2000905749 +2002317406 +2003052244 +2004427868 +2004521549 +2004674567 +2004717576 +2004755396 +2005662739 +2006234231 +2006542113 +2006664436 +2006859613 +2007129388 +2008135513 +2008231519 +2008297479 +2008705671 +2009093715 +2009144307 +2009542731 +2009594229 +2010157945 +2010613532 +2011830442 +2011836742 +2012561271 +2013818334 +2015480617 +2015508916 +2017147612 +2018004996 +2018082929 +2018221524 +2018411764 +2019015922 +2019381958 +2019850827 +2019881485 +2019889308 +2019922243 +2020104881 +2020344194 +2020566329 +2020964960 +2021375080 +2021654536 +2023512802 +2023584641 +2023650210 +2023667872 +2023786299 +2024335466 +2024789406 +2025138268 +2025468355 +2026053206 +2026631457 +2026696306 +2028067575 +2028083884 +2028186066 +2029008132 +2029062541 +2029135631 +2029394106 +2029682499 +2030538201 +2030546557 +2030693176 +2030721780 +2030755560 +2030967060 +2031868276 +2032785202 +2034429255 +2034760697 +2035793199 +2036213583 +2036368600 +2036720739 +2036729565 +2036800561 +2036931328 +2037023728 +2037047289 +2037434701 +2037692237 +2038678523 +2039075257 +2039187049 +2040071777 +2040085812 +2040538575 +2040661960 +2041434739 +2042590892 +2043029705 +2043370500 +2044657436 +2044912977 +2045613084 +2045947851 +2045981532 +2046782416 +2047316079 +2047349771 +2047556080 +2047596899 +2048771848 +2049034201 +2050822168 +2051016130 +2051618702 +2051888047 +2052310884 +2053373807 +2053539319 +2054022934 +2054454711 +2054531193 +2054813429 +2054942583 +2055508928 +2055687936 +2055961208 +2056078309 +2056133789 +2056482448 +2057247340 +2058697835 +2058733066 +2059222632 +2059301627 +2059314113 +2060215561 +2060222195 +2061586266 +2062238406 +2062267530 +2062581293 +2063077839 +2063484160 +2064314127 +2064412886 +2064677140 +2064939658 +2065321903 +2065865598 +2066324166 +2067333631 +2067989078 +2068103720 +2068211350 +2068838966 +2069255121 +2069514737 +2069612028 +2070013519 +2070793361 +2070910709 +2071372250 +2072228968 +2072361357 +2072463153 +2072685330 +2072845735 +2073143486 +2073234604 +2073838780 +2074186680 +2074924868 +2075121332 +2076327327 +2077530401 +2077673429 +2077767062 +2077973382 +2077992558 +2078463623 +2079390297 +2081246494 +2081455933 +2083231247 +2083567021 +2083667949 +2083840400 +2083901477 +2084914505 +2085186814 +2085351227 +2085359463 +2085559236 +2086364211 +2086600101 +2086686071 +2086759949 +2086902125 +2087011478 +2087437620 +2088002948 +2088232093 +2089032361 +2089037301 +2089045838 +2089509928 +2090135076 +2090646522 +2091430104 +2091731653 +2092786502 +2093355845 +2093415285 +2093485019 +2093679262 +2093953144 +2094552525 +2094838163 +2094972873 +2095130820 +2095933459 +2096452685 +2096943684 +2096981306 +2097021356 +2097069470 +2097092655 +2097324486 +2097543312 +2097661337 +2098515604 +2098883054 +2099505211 +2100586234 +2100680390 +2101728267 +2101786958 +2101813227 +2101959098 +2102620348 +2103350686 +2103358773 +2105538380 +2105643910 +2105740111 +2105876470 +2105939593 +2106231904 +2106284126 +2106605258 +2107430649 +2107487959 +2107574368 +2108003703 +2108589845 +2108637057 +2109039432 +2109200040 +2109439608 +2109898746 +2110231133 +2110421432 +2110431767 +2110555493 +2110963014 +2112175814 +2112230825 +2113048214 +2113742463 +2114216213 +2115475454 +2116237109 +2116380534 +2116580646 +2116698199 +2117065428 +2117413385 +2117897021 +2117968956 +2118011971 +2118245840 +2118423299 +2118630673 +2118915013 +2119242313 +2119720030 +2120188945 +2120267309 +2120362440 +2120902325 +2121338287 +2121583717 +2121683104 +2122043835 +2122383591 +2122546831 +2122643455 +2122959929 +2123941399 +2124365775 +2124811600 +2125160248 +2125976646 +2126114860 +2126434841 +2127064051 +2127190965 +2127489821 +2127576942 +2127630486 +2128181621 +2128300159 +2129191953 +2130865065 +2131425304 +2131482918 +2132276589 +2132457051 +2132524920 +2133450108 +2134330556 +2134640504 +2134642942 +2135237221 +2135558165 +2135590337 +2135957319 +2137428859 +2138134161 +2139177213 +2139458518 +2139467983 +2139596187 +2140121919 +2140273489 +2140677150 +2140703928 +2141089035 +2141625512 +2141881298 +2142352763 +2143138053 +2143839853 +2144093591 +2145324751 +2146615346 +2147023368 +2147096847 diff --git a/src/main.cu b/src/main.cu index aa205d9..c222bb8 100644 --- a/src/main.cu +++ b/src/main.cu @@ -1,26 +1,208 @@ #include <stdio.h> #include <stdlib.h> +#include <stdint.h> #include <math.h> +#include <chrono> -void rng(int *arr, int n) +// 2 bucket radix search + +void rng(uint64_t *arr, int n) { int seed = 13516032; srand(seed); for (int i = 0; i < n; i++) { - arr[i] = (int)rand(); + arr[i] = (uint64_t)rand(); } } +__global__ +void flag_array(uint64_t *arr, int n, int *flag, int idx) { + int index = blockIdx.x * blockDim.x + threadIdx.x; + int stride = blockDim.x * gridDim.x; + + for(uint64_t i = index; i < n; i += stride) { + // flag[i] = (arr[i] & (1 << idx)); + flag[i] = (arr[i] >> idx) & 1; + } +} + +__global__ +void count_hist(int *flag, int n, int* count) { + int index = blockIdx.x * blockDim.x + threadIdx.x; + int stride = blockDim.x * gridDim.x; + + for(int i = index; i < n; i += stride) { + if(flag[i]) { + atomicAdd(count + 1, 1); + } else { + atomicAdd(count, 1); + } + } +} + +__global__ +void inc_prefix_sum(int *inc_prefix, int n, int step, int *result_inc_prefix) { + int dist = 1 << step; + + int index = blockIdx.x * blockDim.x + threadIdx.x; + int stride = blockDim.x * gridDim.x; + + for(int i = index; i < n; i += stride) { + result_inc_prefix[i] = inc_prefix[i]; + if(i - dist >= 0) { + result_inc_prefix[i] += inc_prefix[i - dist]; + } + } +} + +__global__ +void reverse_bit(int *dist, int *source, int size) { + int index = blockIdx.x * blockDim.x + threadIdx.x; + int stride = blockDim.x * gridDim.x; + + for(int i = index; i < size; i += stride) + dist[i] = source[i] == 1 ? 0 : 1; +} + +__global__ +void calc_res_index(uint64_t *arr, int *flag, int *inc_prefix, int *rev_inc_prefix, int size, int *count, uint64_t *res_arr) { + int index = blockIdx.x * blockDim.x + threadIdx.x; + int stride = blockDim.x * gridDim.x; + + for(int i = index; i < size; i += stride) { + int pref = 0; + if(i > 0) + if(flag[i] == 1) { + pref = inc_prefix[i - 1]; + } else { + pref = rev_inc_prefix[i - 1]; + } + + int c = flag[i] == 0 ? 0 : count[0]; + + int res_index = c + pref; + res_arr[res_index] = arr[i]; + } +} + +__global__ +void simple_copy(uint64_t *dist, uint64_t *source, int size) { + int index = blockIdx.x * blockDim.x + threadIdx.x; + int stride = blockDim.x * gridDim.x; + + for(int i = index; i < size; i += stride) + dist[i] = source[i]; +} + +void radix_sort(uint64_t *arr, int n) { + int block_size = 256; + int num_block = (n + block_size - 1) / block_size; + // int block_size = 1; + // int num_block = 1; + + // determine largest item + uint64_t max = arr[0]; + for(uint64_t i = 0; i < n; i++) + if(arr[i] > max) + max = arr[i]; + + uint64_t* d_arr; + cudaMallocManaged(&d_arr, n * sizeof(uint64_t)); + cudaMemcpy(d_arr, arr, n * sizeof(uint64_t), cudaMemcpyHostToHost); + + int* flag; + cudaMallocManaged(&flag, n * sizeof(int)); + + int* count; + cudaMallocManaged(&count, 2 * sizeof(int)); + + int* inc_prefix, *result_inc_prefix; + cudaMallocManaged(&inc_prefix, n * sizeof(int)); + cudaMallocManaged(&result_inc_prefix, n * sizeof(int)); + + int* rev_inc_prefix, *result_rev_inc_prefix; + cudaMallocManaged(&rev_inc_prefix, n * sizeof(int)); + cudaMallocManaged(&result_rev_inc_prefix, n * sizeof(int)); + + uint64_t* res_arr; + cudaMallocManaged(&res_arr, n *sizeof(uint64_t)); + + for(uint64_t idx = 0; ((1 << idx) <= max) && (idx < 64); idx += 1) { + // computer flag and reverse flag + flag_array<<<num_block, block_size>>>(d_arr, n, flag, idx); + cudaDeviceSynchronize(); + + cudaMemcpy(inc_prefix, flag, n * sizeof(int), cudaMemcpyDeviceToDevice); + reverse_bit<<<num_block, block_size>>>(rev_inc_prefix, flag, n); + cudaDeviceSynchronize(); + + // count histogram from flag + cudaMemset(count, 0, 2 * sizeof(int)); + count_hist<<<num_block, block_size>>>(flag, n, count); + cudaDeviceSynchronize(); + + + // inclusive prefix sum + // inc_prefix -> 1 + // rev_inc_prefix -> 0 + + for(int step = 0; (1 << step) < n; step++) { + inc_prefix_sum<<<num_block, block_size>>>(inc_prefix, n, step, result_inc_prefix); + cudaDeviceSynchronize(); + + inc_prefix_sum<<<num_block, block_size>>>(rev_inc_prefix, n, step, result_rev_inc_prefix); + cudaDeviceSynchronize(); + + cudaMemcpy(inc_prefix, result_inc_prefix, n * sizeof(int), cudaMemcpyDeviceToDevice); + cudaMemcpy(rev_inc_prefix, result_rev_inc_prefix, n * sizeof(int), cudaMemcpyDeviceToDevice); + } + + // for(int i = 0; i < n; i++) + // printf("i %d f %d %d\n", i, inc_prefix[i], rev_inc_prefix[i]); + + calc_res_index<<<num_block, block_size>>>(d_arr, flag, inc_prefix, rev_inc_prefix, n, count, res_arr); + cudaDeviceSynchronize(); + // for(int i = 0; i < n; i++) { + // printf("i %d darr %d res %d\n", i, d_arr[i], res_arr[i]); + // } + simple_copy<<<num_block, block_size>>>(d_arr, res_arr, n); + cudaDeviceSynchronize(); + // printf("===\n"); + } + + cudaMemcpy(arr, d_arr, n * sizeof(uint64_t), cudaMemcpyHostToHost); + cudaFree(inc_prefix); + cudaFree(res_arr); + cudaFree(result_inc_prefix); + cudaFree(rev_inc_prefix); + cudaFree(result_rev_inc_prefix); + cudaFree(d_arr); + cudaFree(flag); + cudaFree(count); +} + int main(void) { - int N = 8; - int *arr; - cudaMallocManaged(&arr, N * sizeof(int)); + int N = 5000; + uint64_t *arr; + + arr = (uint64_t*)malloc(N * sizeof(uint64_t)); rng(arr, N); - cudaFree(arr); + auto start_time = std::chrono::high_resolution_clock::now(); + radix_sort(arr, N); + auto elapsed = std::chrono::high_resolution_clock::now() -start_time; + auto microsecs = std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count(); + + for(int i = 0; i < N; i++) { + printf("%d\n", arr[i]); + } + + fprintf(stderr, "time: %lld us\n", microsecs); + + free(arr); return 0; } \ No newline at end of file -- GitLab