亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                SPL 提速天體聚類(lèi)任務(wù) 2000 倍

                SPL 提速天體聚類(lèi)任務(wù) 2000 倍

                問(wèn)題描述

                國(guó)家天文臺(tái)有個(gè)聚類(lèi)任務(wù):共 11 份數(shù)據(jù),每份數(shù)據(jù)是從一張照片中提取出來(lái)的,包含 500 多萬(wàn)條記錄,每條記錄是一個(gè)天體坐標(biāo)及屬性。11 張“照片”中有些天體坐標(biāo)是重復(fù)的,但這些重復(fù)的坐標(biāo)不完全相同,他們會(huì)有一些差別但距離不會(huì)太遠(yuǎn)。任務(wù)就是把其中一張“照片”作為基礎(chǔ),從其他照片中找出重復(fù)的天體,把重復(fù)天體的坐標(biāo)及屬性均值作為該天體的最終坐標(biāo)和屬性,即把距離很近的天體聚成一類(lèi)再做聚合運(yùn)算,這樣就可以得到一張坐標(biāo)清晰且信息更加準(zhǔn)確的天體“照片”。

                問(wèn)題分析

                這個(gè)任務(wù)不算復(fù)雜,只要循環(huán)基礎(chǔ)照片中的每一個(gè)天體坐標(biāo),將其與其他照片中的每個(gè)天體坐標(biāo)計(jì)算距離,不超過(guò)某個(gè)閾值就認(rèn)為是同一個(gè)天體,視作一類(lèi),最后將每一類(lèi)中所有天體坐標(biāo)求均值就得到了該天體的坐標(biāo)。

                但是當(dāng)用計(jì)算機(jī)計(jì)算時(shí)就發(fā)現(xiàn)這個(gè)任務(wù)的計(jì)算量是驚人的,基礎(chǔ)照片需要循環(huán) 500 多萬(wàn)次,其中的每個(gè)天體坐標(biāo)又要與其他照片中的 5000 多萬(wàn)個(gè)坐標(biāo)計(jì)算距離,計(jì)算復(fù)雜度是 500 多萬(wàn) *5000 多萬(wàn),這將是個(gè)天文數(shù)字。

                事實(shí)也確實(shí)如此,在實(shí)驗(yàn)階段,把每張照片的數(shù)據(jù)量減小 10 倍,即每張照片的天體坐標(biāo)量為 50 萬(wàn),用 Python 寫(xiě)出代碼實(shí)現(xiàn)上述方法計(jì)算出 11 張照片的聚類(lèi)結(jié)果需要的時(shí)間是 6.5 天。按計(jì)算復(fù)雜度來(lái)算,500 多萬(wàn)的數(shù)據(jù)量,計(jì)算量是 50 萬(wàn)數(shù)據(jù)量的 100 倍,即需要耗時(shí) 650 天,這肯定是一個(gè)無(wú)法接受的數(shù)字。

                同樣的 50 萬(wàn)數(shù)據(jù)量,被裝入了某分布式數(shù)據(jù)庫(kù)后用 SQL 實(shí)現(xiàn),動(dòng)用了 100 顆 CPU 后,跑了 3.8 小時(shí)完成了計(jì)算??雌饋?lái)比 Python 快了很多倍,但 Python 的 6.5 天是單線程,細(xì)算下來(lái) SQL 的單核性能還不如 Python(3.8 小時(shí) *100>6.5 天)。巨大的資源消耗已經(jīng)難以容忍,而且計(jì)算 500 多萬(wàn)規(guī)模時(shí)也要 380 小時(shí)。

                解決方案

                我們來(lái)考慮哪里可以優(yōu)化以減少計(jì)算量。

                基礎(chǔ)照片中的天體坐標(biāo)是必須循環(huán)的,這樣才能保證每個(gè)天體都被用來(lái)聚類(lèi)了,其他照片中的天體坐標(biāo)不用每次都遍歷,只要找到基礎(chǔ)天體坐標(biāo)附近的坐標(biāo)就可以了。這類(lèi)查找任務(wù)很適合二分法,它可以大量減少計(jì)算量。

                具體過(guò)程是這樣的:先對(duì)每張照片中的天體坐標(biāo)排序,用二分法找到某個(gè)閾值范圍內(nèi)的天體坐標(biāo),這樣就排除了大多數(shù)天體,這是粗篩過(guò)程;用基礎(chǔ)天體與粗篩結(jié)果中的天體計(jì)算距離,找出符合條件的結(jié)果,這是細(xì)篩過(guò)程。

                來(lái)看看粗篩加細(xì)篩方法的計(jì)算量,10 張照片每張排序一次,計(jì)算量是 500 萬(wàn) *log(500 萬(wàn))*10;二分法粗篩,計(jì)算量是 500 萬(wàn) *log(500 萬(wàn))*10;細(xì)篩過(guò)程,計(jì)算量不確定,但根據(jù)經(jīng)驗(yàn),粗篩后的結(jié)果通常不超過(guò) 1 萬(wàn)個(gè),粗篩的計(jì)算量中 log(500 萬(wàn)) 還要再加 1 萬(wàn);這樣算下來(lái),總的計(jì)算量大概是 500 萬(wàn) *log(500 萬(wàn))*10+500 萬(wàn) *(log(500 萬(wàn))+1 萬(wàn) )*10,相較于原來(lái)的方法,計(jì)算量只有原來(lái)的五百分之一。

                技術(shù)選型

                方法有了,還要選擇程序工具,之前實(shí)現(xiàn)時(shí)使用 Python,不可否認(rèn) Python 很強(qiáng)大,有天文學(xué)計(jì)算的現(xiàn)成框架,比如計(jì)算距離的方法,只要調(diào)用現(xiàn)成的類(lèi)庫(kù)就可以輕松算出來(lái)。

                但 Python 也有著非常嚴(yán)重的弊端:

              1. Python中沒(méi)有原生的二分法方法,第三方的類(lèi)庫(kù)還要結(jié)合 Pandas 來(lái)完成,期間需要做一些數(shù)據(jù)轉(zhuǎn)換,這些都必然會(huì)帶來(lái)一些不必要的開(kāi)銷(xiāo)。
              2. Python的多線程是假多線程,實(shí)際上不支持多線程并行,這也是 Python 不能成為本任務(wù)工具的重要原因。
              3. 關(guān)系數(shù)據(jù)庫(kù)的 SQL 也無(wú)法高效完成。這個(gè)聚類(lèi)運(yùn)算本質(zhì)上是個(gè)非等值連接,數(shù)據(jù)庫(kù)對(duì)于等值連接還能采用 HASH JOIN 等優(yōu)化方案來(lái)減少計(jì)算量,但對(duì)于非等值連接就只能采用遍歷方案了;SQL 也無(wú)法在語(yǔ)句中實(shí)現(xiàn)上面設(shè)計(jì)的復(fù)雜過(guò)程,不能識(shí)別距離的單調(diào)性而主動(dòng)排序并采用二分法;再加上本來(lái)做這類(lèi)數(shù)學(xué)類(lèi)計(jì)算的能力不足(距離計(jì)算涉及三角函數(shù));所以發(fā)生了前面實(shí)驗(yàn)階段中 SQL 的單核性能還跑不過(guò) Python 的現(xiàn)象。

                Java等高級(jí)語(yǔ)言雖然可以實(shí)現(xiàn)二分法,也可以很好的并行,但代碼寫(xiě)起來(lái)冗長(zhǎng),開(kāi)發(fā)效率過(guò)低,會(huì)嚴(yán)重影響程序的可維護(hù)性。

                那么,還能用什么工具來(lái)完成這個(gè)任務(wù)呢?

                集算器 SPL 是個(gè)很好的選擇,它內(nèi)置了很多高性能算法(如二分法),也支持多線程并行,代碼寫(xiě)起來(lái)也簡(jiǎn)單明了,還提供了友好的可視化調(diào)試機(jī)制,能有效提高開(kāi)發(fā)效率,以及降低維護(hù)成本。

                實(shí)際效果

                相較于 Python 來(lái)說(shuō),SPL 為本任務(wù)提速 2000 倍,二分法能夠提速 500 倍,多線程并行又提速 4 倍(筆者筆記本電腦的 CPU 只有 4 核),總計(jì)提速 2000 倍,使用 SPL 完成 500 多萬(wàn)目標(biāo)規(guī)模的聚類(lèi)任務(wù)只需要數(shù)個(gè)小時(shí)。

                SPL的代碼不僅性能優(yōu)異,而且也并不復(fù)雜,關(guān)鍵計(jì)算代碼只要 23 行。

                A

                B

                C

                D

                E

                1

                =RThd

                /距離閾值

                2

                =NJob=4

                /并行線程數(shù)

                3

                =file(“BasePhoto.csv”).import@tc()

                4

                =directory@p(OtherPhotos)

                /其他照片路徑

                5

                for A4

                =file(A4).import@tc()

                /其他照片

                6

                =B5.sort@m(OnOrbitDec)

                /排序

                7

                =B6.min(DEC)

                8

                =delta_ra=F(B7,RThd)

                /根據(jù)DEC算RA閾值

                9

                =FK(B5,NJob)

                /數(shù)據(jù)索引分段

                10

                fork B9

                =B5(B10)

                /照片片段

                11

                for A3

                =C11.OnOrbitDec

                /DEC

                12

                =D11-delta_rad

                /DEC下限

                13

                =D11+delta_rad

                /DEC上限

                14

                =C11.RA

                /RA

                15

                =D14-delta_ra

                /RA下限

                16

                =D14+delta_ra

                /RA上限

                17

                =C10.select@b(between@b(OnOrbitDec,D12:D13))

                /二分查找DEC

                18

                =D17.select(RA>=D10&&RA<=D11)

                /查找RA

                19

                =D36.select(Dis(~,C11)<=A7)

                /細(xì)篩

                20

                if D19!=[]

                /合并結(jié)果

                21

                =FC(C11,D37)

                22

                =@|B10

                /匯總結(jié)果

                23

                =file(OFile).export@tc(B22)

                /寫(xiě)出結(jié)果

                B10格的 fork 是多線程并行函數(shù),允許分段執(zhí)行上述算法。

                B6格的 sort@m() 函數(shù)是并行排序方法,數(shù)據(jù)量大時(shí)可以提高效率,數(shù)據(jù)有序是二分法使用的前提條件。

                C17格的 select@b(…) 函數(shù)是二分查找方法,也是本任務(wù)提速的關(guān)鍵。

                后記

                性能優(yōu)化的問(wèn)題依賴于高性能的算法,只有把計(jì)算量降下來(lái)才能有效提高運(yùn)行效率,而高性能算法需要在工作中慢慢積累,感興趣的同學(xué)可以來(lái)這里學(xué)習(xí)常用的性能優(yōu)化算法:性能優(yōu)化課程http://www.raqsoft.com.cn/wx/course-performance-optimizing.html

                高性能算法需要高效的編程工具來(lái)實(shí)現(xiàn),之前已經(jīng)說(shuō)過(guò),Python、SQL、java 等語(yǔ)言都有其弊端,要么無(wú)法并行,要么實(shí)現(xiàn)困難、維護(hù)困難。SPL 有足夠的算法底層支持且允許高并發(fā),代碼能做到很簡(jiǎn)潔,還提供了友好的可視化調(diào)試機(jī)制,能有效提高開(kāi)發(fā)效率,以及降低維護(hù)成本。

                SPL下載地址:http://c.raqsoft.com.cn/article/1595816810031

                SPL開(kāi)源地址:https://github.com/SPLWare/esProc

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年8月17日 23:04
                下一篇 2022年8月17日 23:04

                相關(guān)推薦

                • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應(yīng)該怎么發(fā))

                  對(duì)于微商朋友來(lái)說(shuō),朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營(yíng)一個(gè)朋友圈,有的微商看起來(lái)逼格滿滿,實(shí)際效果也不錯(cuò);而有的卻動(dòng)都不動(dòng)就被屏蔽甚至拉黑…

                  2022年11月27日
                • 微信怎么添加整套表情包(微信怎么添加表情包)

                  用微信怎樣把手機(jī)上的照片添加到你的微信表情包里?然后發(fā)送給朋友,真的太好玩,太有個(gè)性了!操作還簡(jiǎn)單,和我一起去看看! 打開(kāi)微信,點(diǎn)開(kāi)與好友的聊天頁(yè)面,通常我們需要添加表情的話,我們…

                  2022年11月26日
                • 《寶可夢(mèng)朱紫》夢(mèng)特性怎么獲得?隱藏特性獲取方法推薦

                  寶可夢(mèng)朱紫里有很多寶可夢(mèng)都是擁有夢(mèng)特性會(huì)變強(qiáng)的寶可夢(mèng),很多玩家不知道夢(mèng)特性怎么獲得,下面就給大家?guī)?lái)寶可夢(mèng)朱紫隱藏特性獲取方法推薦,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 …

                  2022年11月25日
                • 《寶可夢(mèng)朱紫》奇魯莉安怎么進(jìn)化?奇魯莉安進(jìn)化方法分享

                  寶可夢(mèng)朱紫中的奇魯莉安要怎么進(jìn)化呢?很多玩家都不知道,下面就給大家?guī)?lái)寶可夢(mèng)朱紫奇魯莉安進(jìn)化方法分享,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 奇魯莉安進(jìn)化方法分享 奇魯莉安…

                  2022年11月25日
                • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

                  CPA渠道 CPA指的是按照指定的行為結(jié)算,可以是搜索,可以是注冊(cè),可以是激活,可以是搜索下載激活,可以是綁卡,實(shí)名認(rèn)證,可以是付費(fèi),可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來(lái)定…

                  2022年11月25日
                • 百度關(guān)鍵詞快速排名的4大原理解析(百度怎么刷關(guān)鍵詞)

                  近期百度公告驚雷算法2.0,升級(jí)之快還是第一次吧,看來(lái)百度對(duì)于刷點(diǎn)擊行為是零容忍了。之前尹華峰SEO技術(shù)博客介紹過(guò)一篇如何使用刷點(diǎn)擊工具,其實(shí)市面上有很多這類(lèi)SEO快速排名的軟件,…

                  2022年11月25日
                • 修瑪坐標(biāo)(瑪修 百科)

                  本文主要講的是修瑪坐標(biāo),以及和瑪修 百科相關(guān)的知識(shí),如果覺(jué)得本文對(duì)您有所幫助,不要忘了將本文分享給朋友。 LR的寶寶修馬在哪抓?具體是什么系的?技能又該怎么學(xué)? 獅王休瑪?shù)淖鴺?biāo):6…

                  2022年11月25日
                • 抖音直播帶貨有哪些方法技巧(抖音直播帶貨有哪些痛點(diǎn))

                  如今抖音這個(gè)短視頻的變現(xiàn)能力越來(lái)越突顯了,尤其是在平臺(tái)上開(kāi)通直播,更具有超強(qiáng)的帶貨屬性,已經(jīng)有越來(lái)越多的普通人加入到其中了。不過(guò)直播帶貨雖然很火,但是也不是每個(gè)人都能做好的,那么在…

                  2022年11月24日
                • OPPO Reno9 Pro+硬件規(guī)格強(qiáng) 搭載驍龍8+旗艦處理器

                  OPPO Reno9系列正式發(fā)布,Reno9 Pro+作為三款新機(jī)中定位最高的超大杯機(jī)型,整體配置較上一代有著大幅度的升級(jí),如果單看硬件配置的話,Reno9 Pro+甚至是目前OP…

                  2022年11月24日
                • 兩寸照片大小(兩寸照片大小怎么改到20kb)

                  今天小編給各位分享兩寸照片大小的知識(shí),其中也會(huì)對(duì)兩寸照片大小怎么改到20kb進(jìn)行解釋?zhuān)绻芘銮山鉀Q你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧! 兩寸照片是多大 2寸照片尺寸大小…

                  2022年11月24日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息