mkl_vsl_omp_offload.f90 111 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387
  1. !===============================================================================
  2. ! Copyright 2020-2022 Intel Corporation.
  3. !
  4. ! This software and the related documents are Intel copyrighted materials, and
  5. ! your use of them is governed by the express license under which they were
  6. ! provided to you (License). Unless the License provides otherwise, you may not
  7. ! use, modify, copy, publish, distribute, disclose or transmit this software or
  8. ! the related documents without Intel's prior written permission.
  9. !
  10. ! This software and the related documents are provided as is, with no express
  11. ! or implied warranties, other than those that are expressly stated in the
  12. ! License.
  13. !===============================================================================
  14. ! Content:
  15. ! oneMKL Library FORTRAN interface for VSL OpenMP offload
  16. !*******************************************************************************
  17. include "mkl_vsl_omp_variant.f90"
  18. module onemkl_vsl_omp_offload
  19. use onemkl_vsl_omp_variant
  20. !++
  21. ! VSL CONTINUOUS DISTRIBUTION GENERATOR FUNCTION INTERFACES.
  22. !--
  23. ! Uniform distribution
  24. interface
  25. integer function vsrnguniform(method, stream, n, r, a, b)
  26. import :: VSL_STREAM_STATE
  27. integer,intent(in) :: method
  28. type(VSL_STREAM_STATE) :: stream
  29. integer,intent(in) :: n
  30. real(kind=4),intent(out) :: r(n)
  31. real(kind=4),intent(in) :: a
  32. real(kind=4),intent(in) :: b
  33. !$omp declare variant( vsrnguniform:mkl_vsl_vsrnguniform_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  34. !$omp declare variant( vsrnguniform:mkl_vsl_vsrnguniform_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  35. end function vsrnguniform
  36. end interface
  37. interface
  38. integer function vdrnguniform (method, stream, n, r, a, b)
  39. import :: VSL_STREAM_STATE
  40. integer,intent(in) :: method
  41. type(VSL_STREAM_STATE) :: stream
  42. integer,intent(in) :: n
  43. real(kind=8),intent(out) :: r(n)
  44. real(kind=8),intent(in) :: a
  45. real(kind=8),intent(in) :: b
  46. !$omp declare variant( vdrnguniform:mkl_vsl_vdrnguniform_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  47. !$omp declare variant( vdrnguniform:mkl_vsl_vdrnguniform_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  48. end function vdrnguniform
  49. end interface
  50. ! Gaussian distribution
  51. interface
  52. integer function vsrnggaussian (method, stream, n, r, a, sigma)
  53. import :: VSL_STREAM_STATE
  54. integer,intent(in) :: method
  55. type(VSL_STREAM_STATE) :: stream
  56. integer,intent(in) :: n
  57. real(kind=4),intent(out) :: r(n)
  58. real(kind=4),intent(in) :: a
  59. real(kind=4),intent(in) :: sigma
  60. !$omp declare variant( vsrnggaussian:mkl_vsl_vsrnggaussian_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  61. !$omp declare variant( vsrnggaussian:mkl_vsl_vsrnggaussian_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  62. end function vsrnggaussian
  63. end interface
  64. interface
  65. integer function vdrnggaussian (method, stream, n, r, a, sigma)
  66. import :: VSL_STREAM_STATE
  67. integer,intent(in) :: method
  68. type(VSL_STREAM_STATE) :: stream
  69. integer,intent(in) :: n
  70. real(kind=8),intent(out) :: r(n)
  71. real(kind=8),intent(in) :: a
  72. real(kind=8),intent(in) :: sigma
  73. !$omp declare variant( vdrnggaussian:mkl_vsl_vdrnggaussian_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  74. !$omp declare variant( vdrnggaussian:mkl_vsl_vdrnggaussian_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  75. end function vdrnggaussian
  76. end interface
  77. ! GaussianMV distribution
  78. interface
  79. integer function vsrnggaussianmv (method, stream, n, r, dimen, mstorage, a, t)
  80. import :: VSL_STREAM_STATE
  81. integer,intent(in) :: method
  82. type(VSL_STREAM_STATE) :: stream
  83. integer,intent(in) :: n
  84. integer, intent(in) :: dimen
  85. real(kind=4),intent(out) :: r(dimen,n)
  86. integer, intent(in) :: mstorage
  87. real(kind=4),intent(in) :: a(dimen)
  88. real(kind=4),intent(in) :: t(dimen,dimen)
  89. !$omp declare variant( vsrnggaussianmv:mkl_vsl_vsrnggaussianmv_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  90. !$omp declare variant( vsrnggaussianmv:mkl_vsl_vsrnggaussianmv_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  91. end function vsrnggaussianmv
  92. end interface
  93. interface
  94. integer function vdrnggaussianmv (method, stream, n, r, dimen, mstorage, a, t)
  95. import :: VSL_STREAM_STATE
  96. integer,intent(in) :: method
  97. type(VSL_STREAM_STATE) :: stream
  98. integer,intent(in) :: n
  99. integer, intent(in) :: dimen
  100. real(kind=8),intent(out) :: r(dimen,n)
  101. integer, intent(in) :: mstorage
  102. real(kind=8),intent(in) :: a(dimen)
  103. real(kind=8),intent(in) :: t(dimen,dimen)
  104. !$omp declare variant( vdrnggaussianmv:mkl_vsl_vdrnggaussianmv_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  105. !$omp declare variant( vdrnggaussianmv:mkl_vsl_vdrnggaussianmv_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  106. end function vdrnggaussianmv
  107. end interface
  108. ! Multinomial distribution
  109. interface
  110. integer function virngmultinomial (method, stream, n, r, ntrial, k, p)
  111. import :: VSL_STREAM_STATE
  112. integer,intent(in) :: method
  113. type(VSL_STREAM_STATE) :: stream
  114. integer,intent(in) :: n
  115. integer(kind=4),intent(out) :: r(n)
  116. integer, intent(in) :: ntrial
  117. integer, intent(in) :: k
  118. real(kind=8),intent(in) :: p(k)
  119. !$omp declare variant( virngmultinomial:mkl_vsl_virngmultinomial_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  120. !$omp declare variant( virngmultinomial:mkl_vsl_virngmultinomial_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  121. end function virngmultinomial
  122. end interface
  123. ! PoissonV distribution
  124. interface
  125. integer function virngpoissonv (method, stream, n, r, ntrial, k, lambda)
  126. import :: VSL_STREAM_STATE
  127. integer,intent(in) :: method
  128. type(VSL_STREAM_STATE) :: stream
  129. integer,intent(in) :: n
  130. integer(kind=4),intent(out) :: r(n)
  131. real(kind=8),intent(in) :: lambda(n)
  132. !$omp declare variant( virngpoissonv:mkl_vsl_virngpoissonv_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  133. !$omp declare variant( virngpoissonv:mkl_vsl_virngpoissonv_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  134. end function virngpoissonv
  135. end interface
  136. ! Exponential distribution
  137. interface
  138. integer function vsrngexponential (method, stream, n, r, a, beta)
  139. import :: VSL_STREAM_STATE
  140. integer,intent(in) :: method
  141. type(VSL_STREAM_STATE) :: stream
  142. integer,intent(in) :: n
  143. real(kind=4),intent(out) :: r(n)
  144. real(kind=4),intent(in) :: a
  145. real(kind=4),intent(in) :: beta
  146. !$omp declare variant( vsrngexponential:mkl_vsl_vsrngexponential_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  147. !$omp declare variant( vsrngexponential:mkl_vsl_vsrngexponential_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  148. end function vsrngexponential
  149. end interface
  150. interface
  151. integer function vdrngexponential (method, stream, n, r, a, beta)
  152. import :: VSL_STREAM_STATE
  153. integer,intent(in) :: method
  154. type(VSL_STREAM_STATE) :: stream
  155. integer,intent(in) :: n
  156. real(kind=8),intent(out) :: r(n)
  157. real(kind=8),intent(in) :: a
  158. real(kind=8),intent(in) :: beta
  159. !$omp declare variant( vdrngexponential:mkl_vsl_vdrngexponential_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  160. !$omp declare variant( vdrngexponential:mkl_vsl_vdrngexponential_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  161. end function vdrngexponential
  162. end interface
  163. ! Laplace distribution
  164. interface
  165. integer function vsrnglaplace (method, stream, n, r, a, beta)
  166. import :: VSL_STREAM_STATE
  167. integer,intent(in) :: method
  168. type(VSL_STREAM_STATE) :: stream
  169. integer,intent(in) :: n
  170. real(kind=4),intent(out) :: r(n)
  171. real(kind=4),intent(in) :: a
  172. real(kind=4),intent(in) :: beta
  173. !$omp declare variant( vsrnglaplace:mkl_vsl_vsrnglaplace_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  174. !$omp declare variant( vsrnglaplace:mkl_vsl_vsrnglaplace_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  175. end function vsrnglaplace
  176. end interface
  177. interface
  178. integer function vdrnglaplace (method, stream, n, r, a, beta)
  179. import :: VSL_STREAM_STATE
  180. integer,intent(in) :: method
  181. type(VSL_STREAM_STATE) :: stream
  182. integer,intent(in) :: n
  183. real(kind=8),intent(out) :: r(n)
  184. real(kind=8),intent(in) :: a
  185. real(kind=8),intent(in) :: beta
  186. !$omp declare variant( vdrnglaplace:mkl_vsl_vdrnglaplace_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  187. !$omp declare variant( vdrnglaplace:mkl_vsl_vdrnglaplace_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  188. end function vdrnglaplace
  189. end interface
  190. ! Weibull distribution
  191. interface
  192. integer function vsrngweibull (method, stream, n, r, alpha, a, beta)
  193. import :: VSL_STREAM_STATE
  194. integer,intent(in) :: method
  195. type(VSL_STREAM_STATE) :: stream
  196. integer,intent(in) :: n
  197. real(kind=4),intent(out) :: r(n)
  198. real(kind=4),intent(in) :: alpha
  199. real(kind=4),intent(in) :: a
  200. real(kind=4),intent(in) :: beta
  201. !$omp declare variant( vsrngweibull:mkl_vsl_vsrngweibull_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  202. !$omp declare variant( vsrngweibull:mkl_vsl_vsrngweibull_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  203. end function vsrngweibull
  204. end interface
  205. interface
  206. integer function vdrngweibull (method, stream, n, r, alpha, a, beta)
  207. import :: VSL_STREAM_STATE
  208. integer,intent(in) :: method
  209. type(VSL_STREAM_STATE) :: stream
  210. integer,intent(in) :: n
  211. real(kind=8),intent(out) :: r(n)
  212. real(kind=8),intent(in) :: alpha
  213. real(kind=8),intent(in) :: a
  214. real(kind=8),intent(in) :: beta
  215. !$omp declare variant( vdrngweibull:mkl_vsl_vdrngweibull_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  216. !$omp declare variant( vdrngweibull:mkl_vsl_vdrngweibull_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  217. end function vdrngweibull
  218. end interface
  219. ! Cauchy distribution
  220. interface
  221. integer function vsrngcauchy (method, stream, n, r, a, beta)
  222. import :: VSL_STREAM_STATE
  223. integer,intent(in) :: method
  224. type(VSL_STREAM_STATE) :: stream
  225. integer,intent(in) :: n
  226. real(kind=4),intent(out) :: r(n)
  227. real(kind=4),intent(in) :: a
  228. real(kind=4),intent(in) :: beta
  229. !$omp declare variant( vsrngcauchy:mkl_vsl_vsrngcauchy_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  230. !$omp declare variant( vsrngcauchy:mkl_vsl_vsrngcauchy_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  231. end function vsrngcauchy
  232. end interface
  233. interface
  234. integer function vdrngcauchy (method, stream, n, r, a, beta)
  235. import :: VSL_STREAM_STATE
  236. integer,intent(in) :: method
  237. type(VSL_STREAM_STATE) :: stream
  238. integer,intent(in) :: n
  239. real(kind=8),intent(out) :: r(n)
  240. real(kind=8),intent(in) :: a
  241. real(kind=8),intent(in) :: beta
  242. !$omp declare variant( vdrngcauchy:mkl_vsl_vdrngcauchy_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  243. !$omp declare variant( vdrngcauchy:mkl_vsl_vdrngcauchy_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  244. end function vdrngcauchy
  245. end interface
  246. ! Rayleigh distribution
  247. interface
  248. integer function vsrngrayleigh (method, stream, n, r, a, beta)
  249. import :: VSL_STREAM_STATE
  250. integer,intent(in) :: method
  251. type(VSL_STREAM_STATE) :: stream
  252. integer,intent(in) :: n
  253. real(kind=4),intent(out) :: r(n)
  254. real(kind=4),intent(in) :: a
  255. real(kind=4),intent(in) :: beta
  256. !$omp declare variant( vsrngrayleigh:mkl_vsl_vsrngrayleigh_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  257. !$omp declare variant( vsrngrayleigh:mkl_vsl_vsrngrayleigh_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  258. end function vsrngrayleigh
  259. end interface
  260. interface
  261. integer function vdrngrayleigh (method, stream, n, r, a, beta)
  262. import :: VSL_STREAM_STATE
  263. integer,intent(in) :: method
  264. type(VSL_STREAM_STATE) :: stream
  265. integer,intent(in) :: n
  266. real(kind=8),intent(out) :: r(n)
  267. real(kind=8),intent(in) :: a
  268. real(kind=8),intent(in) :: beta
  269. !$omp declare variant( vdrngrayleigh:mkl_vsl_vdrngrayleigh_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  270. !$omp declare variant( vdrngrayleigh:mkl_vsl_vdrngrayleigh_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  271. end function vdrngrayleigh
  272. end interface
  273. ! Lognormal distribution
  274. interface
  275. integer function vsrnglognormal (method, stream, n, r, a, sigma, b, beta)
  276. import :: VSL_STREAM_STATE
  277. integer,intent(in) :: method
  278. type(VSL_STREAM_STATE) :: stream
  279. integer,intent(in) :: n
  280. real(kind=4),intent(out) :: r(n)
  281. real(kind=4),intent(in) :: a
  282. real(kind=4),intent(in) :: sigma
  283. real(kind=4),intent(in) :: b
  284. real(kind=4),intent(in) :: beta
  285. !$omp declare variant( vsrnglognormal:mkl_vsl_vsrnglognormal_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  286. !$omp declare variant( vsrnglognormal:mkl_vsl_vsrnglognormal_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  287. end function vsrnglognormal
  288. end interface
  289. interface
  290. integer function vdrnglognormal (method, stream, n, r, a, sigma, b, beta)
  291. import :: VSL_STREAM_STATE
  292. integer,intent(in) :: method
  293. type(VSL_STREAM_STATE) :: stream
  294. integer,intent(in) :: n
  295. real(kind=8),intent(out) :: r(n)
  296. real(kind=8),intent(in) :: a
  297. real(kind=8),intent(in) :: sigma
  298. real(kind=8),intent(in) :: b
  299. real(kind=8),intent(in) :: beta
  300. !$omp declare variant( vdrnglognormal:mkl_vsl_vdrnglognormal_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  301. !$omp declare variant( vdrnglognormal:mkl_vsl_vdrnglognormal_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  302. end function vdrnglognormal
  303. end interface
  304. ! Gumbel distribution
  305. interface
  306. integer function vsrnggumbel (method, stream, n, r, a, beta)
  307. import :: VSL_STREAM_STATE
  308. integer,intent(in) :: method
  309. type(VSL_STREAM_STATE) :: stream
  310. integer,intent(in) :: n
  311. real(kind=4),intent(out) :: r(n)
  312. real(kind=4),intent(in) :: a
  313. real(kind=4),intent(in) :: beta
  314. !$omp declare variant( vsrnggumbel:mkl_vsl_vsrnggumbel_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  315. !$omp declare variant( vsrnggumbel:mkl_vsl_vsrnggumbel_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  316. end function vsrnggumbel
  317. end interface
  318. interface
  319. integer function vdrnggumbel (method, stream, n, r, a, beta)
  320. import :: VSL_STREAM_STATE
  321. integer,intent(in) :: method
  322. type(VSL_STREAM_STATE) :: stream
  323. integer,intent(in) :: n
  324. real(kind=8),intent(out) :: r(n)
  325. real(kind=8),intent(in) :: a
  326. real(kind=8),intent(in) :: beta
  327. !$omp declare variant( vdrnggumbel:mkl_vsl_vdrnggumbel_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  328. !$omp declare variant( vdrnggumbel:mkl_vsl_vdrnggumbel_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  329. end function vdrnggumbel
  330. end interface
  331. ! Beta distribution
  332. interface
  333. integer function vsrngbeta (method, stream, n, r, p, q, a, beta)
  334. import :: VSL_STREAM_STATE
  335. integer,intent(in) :: method
  336. type(VSL_STREAM_STATE) :: stream
  337. integer,intent(in) :: n
  338. real(kind=4),intent(out) :: r(n)
  339. real(kind=4),intent(in) :: p
  340. real(kind=4),intent(in) :: q
  341. real(kind=4),intent(in) :: a
  342. real(kind=4),intent(in) :: beta
  343. !$omp declare variant( vsrngbeta:mkl_vsl_vsrngbeta_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  344. !$omp declare variant( vsrngbeta:mkl_vsl_vsrngbeta_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  345. end function vsrngbeta
  346. end interface
  347. interface
  348. integer function vdrngbeta (method, stream, n, r, p, q, a, beta)
  349. import :: VSL_STREAM_STATE
  350. integer,intent(in) :: method
  351. type(VSL_STREAM_STATE) :: stream
  352. integer,intent(in) :: n
  353. real(kind=8),intent(out) :: r(n)
  354. real(kind=8),intent(in) :: p
  355. real(kind=8),intent(in) :: q
  356. real(kind=8),intent(in) :: a
  357. real(kind=8),intent(in) :: beta
  358. !$omp declare variant( vdrngbeta:mkl_vsl_vdrngbeta_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  359. !$omp declare variant( vdrngbeta:mkl_vsl_vdrngbeta_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  360. end function vdrngbeta
  361. end interface
  362. ! Gamma distribution
  363. interface
  364. integer function vsrnggamma (method, stream, n, r, alpha, a, beta)
  365. import :: VSL_STREAM_STATE
  366. integer,intent(in) :: method
  367. type(VSL_STREAM_STATE) :: stream
  368. integer,intent(in) :: n
  369. real(kind=4),intent(out) :: r(n)
  370. real(kind=4),intent(in) :: alpha
  371. real(kind=4),intent(in) :: a
  372. real(kind=4),intent(in) :: beta
  373. !$omp declare variant( vsrnggamma:mkl_vsl_vsrnggamma_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  374. !$omp declare variant( vsrnggamma:mkl_vsl_vsrnggamma_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  375. end function vsrnggamma
  376. end interface
  377. interface
  378. integer function vdrnggamma (method, stream, n, r, alpha, a, beta)
  379. import :: VSL_STREAM_STATE
  380. integer,intent(in) :: method
  381. type(VSL_STREAM_STATE) :: stream
  382. integer,intent(in) :: n
  383. real(kind=8),intent(out) :: r(n)
  384. real(kind=8),intent(in) :: alpha
  385. real(kind=8),intent(in) :: a
  386. real(kind=8),intent(in) :: beta
  387. !$omp declare variant( vdrnggamma:mkl_vsl_vdrnggamma_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  388. !$omp declare variant( vdrnggamma:mkl_vsl_vdrnggamma_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  389. end function vdrnggamma
  390. end interface
  391. ! ChiSquare distribution
  392. interface
  393. integer function vsrngchisquare (method, stream, n, r,v)
  394. import :: VSL_STREAM_STATE
  395. integer,intent(in) :: method
  396. type(VSL_STREAM_STATE) :: stream
  397. integer,intent(in) :: n
  398. real(kind=4),intent(out) :: r(n)
  399. integer,intent(in) :: v
  400. !$omp declare variant( vsrngchisquare:mkl_vsl_vsrngchisquare_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  401. !$omp declare variant( vsrngchisquare:mkl_vsl_vsrngchisquare_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  402. end function vsrngchisquare
  403. end interface
  404. interface
  405. integer function vdrngchisquare (method, stream, n, r, v)
  406. import :: VSL_STREAM_STATE
  407. integer,intent(in) :: method
  408. type(VSL_STREAM_STATE) :: stream
  409. integer,intent(in) :: n
  410. real(kind=8),intent(out) :: r(n)
  411. integer,intent(in) :: v
  412. !$omp declare variant( vdrngchisquare:mkl_vsl_vdrngchisquare_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  413. !$omp declare variant( vdrngchisquare:mkl_vsl_vdrngchisquare_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  414. end function vdrngchisquare
  415. end interface
  416. !++
  417. ! VSL DISCRETE DISTRIBUTION GENERATOR FUNCTION INTERFACES.
  418. !--
  419. ! Uniform distribution
  420. interface
  421. integer function virnguniform (method, stream, n, r, a, b)
  422. import :: VSL_STREAM_STATE
  423. integer,intent(in) :: method
  424. type(VSL_STREAM_STATE) :: stream
  425. integer,intent(in) :: n
  426. integer(kind=4),intent(out) :: r(n)
  427. integer(kind=4),intent(in) :: a
  428. integer(kind=4),intent(in) :: b
  429. !$omp declare variant( virnguniform:mkl_vsl_virnguniform_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  430. !$omp declare variant( virnguniform:mkl_vsl_virnguniform_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  431. end function virnguniform
  432. end interface
  433. ! UniformBits distribution
  434. interface
  435. integer function virnguniformbits (method, stream, n, r)
  436. import :: VSL_STREAM_STATE
  437. integer,intent(in) :: method
  438. type(VSL_STREAM_STATE) :: stream
  439. integer,intent(in) :: n
  440. integer(kind=4),intent(out) :: r(n)
  441. !$omp declare variant( virnguniformbits:mkl_vsl_virnguniformbits_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  442. !$omp declare variant( virnguniformbits:mkl_vsl_virnguniformbits_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  443. end function virnguniformbits
  444. end interface
  445. ! UniformBits32 distribution
  446. interface
  447. integer function virnguniformbits32 (method, stream, n, r)
  448. import :: VSL_STREAM_STATE
  449. integer,intent(in) :: method
  450. type(VSL_STREAM_STATE) :: stream
  451. integer,intent(in) :: n
  452. integer(kind=4),intent(out) :: r(n)
  453. !$omp declare variant( virnguniformbits32:mkl_vsl_virnguniformbits32_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  454. !$omp declare variant( virnguniformbits32:mkl_vsl_virnguniformbits32_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  455. end function virnguniformbits32
  456. end interface
  457. ! UniformBits64 distribution
  458. interface
  459. integer function virnguniformbits64 (method, stream, n, r)
  460. import :: VSL_STREAM_STATE
  461. integer,intent(in) :: method
  462. type(VSL_STREAM_STATE) :: stream
  463. integer,intent(in) :: n
  464. integer(kind=8),intent(out) :: r(n)
  465. !$omp declare variant( virnguniformbits64:mkl_vsl_virnguniformbits64_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  466. !$omp declare variant( virnguniformbits64:mkl_vsl_virnguniformbits64_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  467. end function virnguniformbits64
  468. end interface
  469. ! Bernoulli distribution
  470. interface
  471. integer function virngbernoulli (method, stream, n, r, p)
  472. import :: VSL_STREAM_STATE
  473. integer,intent(in) :: method
  474. type(VSL_STREAM_STATE) :: stream
  475. integer,intent(in) :: n
  476. integer(kind=4),intent(out) :: r(n)
  477. real(kind=8),intent(in) :: p
  478. !$omp declare variant( virngbernoulli:mkl_vsl_virngbernoulli_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  479. !$omp declare variant( virngbernoulli:mkl_vsl_virngbernoulli_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  480. end function virngbernoulli
  481. end interface
  482. ! Geometric distribution
  483. interface
  484. integer function virnggeometric (method, stream, n, r, p)
  485. import :: VSL_STREAM_STATE
  486. integer,intent(in) :: method
  487. type(VSL_STREAM_STATE) :: stream
  488. integer,intent(in) :: n
  489. integer(kind=4),intent(out) :: r(n)
  490. real(kind=8),intent(in) :: p
  491. !$omp declare variant( virnggeometric:mkl_vsl_virnggeometric_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  492. !$omp declare variant( virnggeometric:mkl_vsl_virnggeometric_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  493. end function virnggeometric
  494. end interface
  495. ! Hypergeometric distribution
  496. interface
  497. integer function virnghypergeometric (method, stream, n, r, l, s, m)
  498. import :: VSL_STREAM_STATE
  499. integer,intent(in) :: method
  500. type(VSL_STREAM_STATE) :: stream
  501. integer,intent(in) :: n
  502. integer(kind=4),intent(out) :: r(n)
  503. integer(kind=4),intent(in) :: l
  504. integer(kind=4),intent(in) :: s
  505. integer(kind=4),intent(in) :: m
  506. !$omp declare variant( virnghypergeometric:mkl_vsl_virnghypergeometric_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  507. !$omp declare variant( virnghypergeometric:mkl_vsl_virnghypergeometric_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  508. end function virnghypergeometric
  509. end interface
  510. ! Binomial distribution
  511. interface
  512. integer function virngbinomial (method, stream, n, r, ntrial, p)
  513. import :: VSL_STREAM_STATE
  514. integer,intent(in) :: method
  515. type(VSL_STREAM_STATE) :: stream
  516. integer,intent(in) :: n
  517. integer(kind=4),intent(out) :: r(n)
  518. integer(kind=4),intent(in) :: ntrial
  519. real(kind=8),intent(in) :: p
  520. !$omp declare variant( virngbinomial:mkl_vsl_virngbinomial_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  521. !$omp declare variant( virngbinomial:mkl_vsl_virngbinomial_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  522. end function virngbinomial
  523. end interface
  524. ! Negbinomial distribution
  525. interface
  526. integer function virngnegbinomial (method, stream, n, r, a, p)
  527. import :: VSL_STREAM_STATE
  528. integer,intent(in) :: method
  529. type(VSL_STREAM_STATE) :: stream
  530. integer,intent(in) :: n
  531. integer(kind=4),intent(out) :: r(n)
  532. real(kind=8),intent(in) :: a
  533. real(kind=8),intent(in) :: p
  534. !$omp declare variant( virngnegbinomial:mkl_vsl_virngnegbinomial_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  535. !$omp declare variant( virngnegbinomial:mkl_vsl_virngnegbinomial_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  536. end function virngnegbinomial
  537. end interface
  538. ! Poisson distribution
  539. interface
  540. integer function virngpoisson (method, stream, n, r, lambda)
  541. import :: VSL_STREAM_STATE
  542. integer,intent(in) :: method
  543. type(VSL_STREAM_STATE) :: stream
  544. integer,intent(in) :: n
  545. integer(kind=4),intent(out) :: r(n)
  546. real(kind=8),intent(in) :: lambda
  547. !$omp declare variant( virngpoisson:mkl_vsl_virngpoisson_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  548. !$omp declare variant( virngpoisson:mkl_vsl_virngpoisson_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  549. end function virngpoisson
  550. end interface
  551. !++
  552. ! VSL SERVICE FUNCTION INTERFACES.
  553. !--
  554. ! NewStream - stream creation/initialization
  555. interface
  556. integer function vslnewstream( stream, brng, seed )
  557. import :: VSL_STREAM_STATE
  558. type(VSL_STREAM_STATE) :: stream
  559. integer,intent(in) :: brng
  560. integer,intent(in) :: seed
  561. end function
  562. end interface
  563. ! NewStreamEx - advanced stream creation/initialization
  564. interface
  565. integer function vslnewstreamex( stream, brng, n, params )
  566. import :: VSL_STREAM_STATE
  567. type(VSL_STREAM_STATE) :: stream
  568. integer,intent(in) :: brng
  569. integer,intent(in) :: n
  570. integer(kind=4),intent(in) :: params(n)
  571. end function
  572. end interface
  573. ! DeleteStream - delete stream
  574. interface
  575. integer function vsldeletestream( stream )
  576. import :: VSL_STREAM_STATE
  577. type(VSL_STREAM_STATE) :: stream
  578. end function
  579. end interface
  580. ! CopyStream - copy all stream information
  581. interface
  582. integer function vslcopystream( newstream, srcstream )
  583. import :: VSL_STREAM_STATE
  584. type(VSL_STREAM_STATE) :: newstream
  585. type(VSL_STREAM_STATE) :: srcstream
  586. end function
  587. end interface
  588. ! CopyStreamState - copy stream state only
  589. interface
  590. integer function vslcopystreamstate( deststream, srcstream )
  591. import :: VSL_STREAM_STATE
  592. type(VSL_STREAM_STATE) :: deststream
  593. type(VSL_STREAM_STATE) :: srcstream
  594. end function
  595. end interface
  596. ! LeapfrogStream - leapfrog method
  597. interface
  598. integer function vslleapfrogstream( stream, k, nstreams )
  599. import :: VSL_STREAM_STATE
  600. type(VSL_STREAM_STATE) :: stream
  601. integer,intent(in) :: k
  602. integer,intent(in) :: nstreams
  603. end function
  604. end interface
  605. ! SkipAheadStream - skip-ahead method
  606. interface
  607. integer function vslskipaheadstream( stream, nskip )
  608. import :: VSL_STREAM_STATE
  609. type(VSL_STREAM_STATE) :: stream
  610. integer(kind=8),intent(in) :: nskip
  611. end function
  612. end interface
  613. ! SkipAheadStreamEx - skip-ahead extended method
  614. interface
  615. integer function vslskipaheadstreamex( stream, n, params )
  616. import :: VSL_STREAM_STATE
  617. type(VSL_STREAM_STATE) :: stream
  618. integer,intent(in) :: n
  619. integer(kind=8),intent(in) :: params(n)
  620. end function
  621. end interface
  622. ! GetBrngProperties - get BRNG properties
  623. interface
  624. integer function vslgetbrngproperties( brng, properties )
  625. import :: VSL_BRNG_PROPERTIES
  626. integer(kind=4),intent(in) :: brng
  627. type(VSL_BRNG_PROPERTIES),intent(out) :: properties
  628. end function
  629. end interface
  630. ! GetStreamStateBrng - get BRNG associated with given stream
  631. interface
  632. integer function vslgetstreamstatebrng( stream )
  633. import :: VSL_STREAM_STATE
  634. type(VSL_STREAM_STATE) :: stream
  635. end function
  636. end interface
  637. ! SaveStreamF - save stream to file
  638. interface
  639. integer function vslsavestreamf( stream, fname )
  640. import :: VSL_STREAM_STATE
  641. character(*) :: fname
  642. type(VSL_STREAM_STATE) :: stream
  643. end function
  644. end interface
  645. ! LoadStreamF - save stream to file
  646. interface
  647. integer function vslloadstreamf( stream, fname )
  648. import :: VSL_STREAM_STATE
  649. character(*) :: fname
  650. type(VSL_STREAM_STATE) :: stream
  651. end function
  652. end interface
  653. ! SaveStreamM - save stream to memory
  654. interface
  655. integer function vslsavestreamm( stream, memptr )
  656. import :: VSL_STREAM_STATE
  657. integer(kind=1),dimension(*),intent(out)::memptr
  658. type(VSL_STREAM_STATE),intent(in) :: stream
  659. end function
  660. end interface
  661. ! LoadStreamM - load stream from memory
  662. interface
  663. integer function vslloadstreamm( stream, memptr )
  664. import :: VSL_STREAM_STATE
  665. integer(kind=1),dimension(*),intent(in)::memptr
  666. type(VSL_STREAM_STATE),intent(out) ::stream
  667. end function
  668. end interface
  669. ! GetStreamSize - get size of random stream
  670. interface
  671. integer function vslgetstreamsize( stream )
  672. import :: VSL_STREAM_STATE
  673. type(VSL_STREAM_STATE),intent(in) :: stream
  674. end function
  675. end interface
  676. !++
  677. ! SUMMARY STATISTICS LIBRARY ROUTINES
  678. !--
  679. ! Compute routines
  680. interface
  681. integer function vsldsscompute(task, estimates, method)
  682. import :: VSL_SS_TASK
  683. type(VSL_SS_TASK) :: task
  684. integer(kind=8),intent(in) :: estimates
  685. integer,intent(in) :: method
  686. !$omp declare variant( vsldsscompute:mkl_vsl_dsscompute_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  687. !$omp declare variant( vsldsscompute:mkl_vsl_dsscompute_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync))
  688. end function
  689. end interface
  690. interface
  691. integer function vslssscompute(task, estimates, method)
  692. import :: VSL_SS_TASK
  693. type(VSL_SS_TASK) :: task
  694. integer(kind=8),intent(in) :: estimates
  695. integer,intent(in) :: method
  696. !$omp declare variant( vslssscompute:mkl_vsl_ssscompute_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  697. !$omp declare variant( vslssscompute:mkl_vsl_ssscompute_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync))
  698. end function
  699. end interface
  700. ! Task constructors
  701. INTERFACE
  702. INTEGER FUNCTION vsldssnewtask(task,p,n,x_storage,x,w,indices)
  703. IMPORT :: VSL_SS_TASK
  704. TYPE(VSL_SS_TASK) :: task
  705. INTEGER,INTENT(IN) :: p
  706. INTEGER,INTENT(IN) :: n
  707. INTEGER,INTENT(IN) :: x_storage
  708. REAL(KIND=8),INTENT(IN) :: x(n,p)
  709. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL:: w
  710. INTEGER,DIMENSION(*),INTENT(IN),OPTIONAL:: indices
  711. end function
  712. END INTERFACE
  713. INTERFACE
  714. INTEGER FUNCTION vslsssnewtask(task,p,n,x_storage,x,w,indices)
  715. IMPORT :: VSL_SS_TASK
  716. TYPE(VSL_SS_TASK) :: task
  717. INTEGER,INTENT(IN) :: p
  718. INTEGER,INTENT(IN) :: n
  719. INTEGER,INTENT(IN) :: x_storage
  720. REAL(KIND=4),INTENT(IN) :: x(n,p)
  721. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL:: w
  722. INTEGER,DIMENSION(*),INTENT(IN),OPTIONAL:: indices
  723. end function
  724. END INTERFACE
  725. ! Task editors
  726. ! Editor to modify a task parameter
  727. INTERFACE
  728. INTEGER FUNCTION vsldssedittask(task,parameter,par_addr)
  729. IMPORT :: VSL_SS_TASK
  730. TYPE(VSL_SS_TASK) :: task
  731. INTEGER,INTENT(IN) :: parameter
  732. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: par_addr
  733. end function
  734. END INTERFACE
  735. INTERFACE
  736. INTEGER FUNCTION vslsssedittask(task,parameter,par_addr)
  737. IMPORT :: VSL_SS_TASK
  738. TYPE(VSL_SS_TASK) :: task
  739. INTEGER,INTENT(IN) :: parameter
  740. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: par_addr
  741. end function
  742. END INTERFACE
  743. INTERFACE
  744. INTEGER FUNCTION vslissedittask(task,parameter,par_addr)
  745. IMPORT :: VSL_SS_TASK
  746. TYPE(VSL_SS_TASK) :: task
  747. INTEGER,INTENT(IN) :: parameter
  748. INTEGER,INTENT(IN) :: par_addr
  749. end function
  750. END INTERFACE
  751. ! Task specific editors
  752. ! Editors to modify moments related parameters
  753. INTERFACE
  754. INTEGER FUNCTION vsldsseditmoments(task, mean, r2m, r3m, r4m, &
  755. & c2m, c3m, c4m)
  756. IMPORT :: VSL_SS_TASK
  757. TYPE(VSL_SS_TASK) :: task
  758. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: mean
  759. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r2m
  760. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r3m
  761. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r4m
  762. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c2m
  763. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c3m
  764. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c4m
  765. end function
  766. END INTERFACE
  767. INTERFACE
  768. INTEGER FUNCTION vslssseditmoments(task, mean, r2m, r3m, r4m, &
  769. & c2m, c3m, c4m)
  770. IMPORT :: VSL_SS_TASK
  771. TYPE(VSL_SS_TASK) :: task
  772. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: mean
  773. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r2m
  774. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r3m
  775. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r4m
  776. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c2m
  777. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c3m
  778. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c4m
  779. end function
  780. END INTERFACE
  781. ! Editors to modify sums related parameters
  782. INTERFACE
  783. INTEGER FUNCTION vsldsseditsums(task, sum, r2s, r3s, r4s, &
  784. & c2s, c3s, c4s)
  785. IMPORT :: VSL_SS_TASK
  786. TYPE(VSL_SS_TASK) :: task
  787. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: sum
  788. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r2s
  789. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r3s
  790. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r4s
  791. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c2s
  792. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c3s
  793. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c4s
  794. end function
  795. END INTERFACE
  796. INTERFACE
  797. INTEGER FUNCTION vslssseditsums(task, sum, r2s, r3s, r4s, &
  798. & c2s, c3s, c4s)
  799. IMPORT :: VSL_SS_TASK
  800. TYPE(VSL_SS_TASK) :: task
  801. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: sum
  802. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r2s
  803. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r3s
  804. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r4s
  805. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c2s
  806. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c3s
  807. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c4s
  808. end function
  809. END INTERFACE
  810. ! Editors to modify variance-covariance/correlation matrix
  811. ! related parameters
  812. INTERFACE
  813. INTEGER FUNCTION vsldsseditcovcor(task, mean,cov, cov_storage, &
  814. & cor, cor_storage)
  815. IMPORT :: VSL_SS_TASK
  816. TYPE(VSL_SS_TASK) :: task
  817. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: mean
  818. REAL(KIND=8),DIMENSION(*),INTENT(IN), OPTIONAL :: cov
  819. INTEGER,INTENT(IN), OPTIONAL :: cov_storage
  820. REAL(KIND=8),DIMENSION(*),INTENT(IN), OPTIONAL :: cor
  821. INTEGER,INTENT(IN), OPTIONAL :: cor_storage
  822. end function
  823. END INTERFACE
  824. INTERFACE
  825. INTEGER FUNCTION vslssseditcovcor(task, mean,cov, cov_storage, &
  826. & cor, cor_storage)
  827. IMPORT :: VSL_SS_TASK
  828. TYPE(VSL_SS_TASK) :: task
  829. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: mean
  830. REAL(KIND=4),DIMENSION(*),INTENT(IN), OPTIONAL :: cov
  831. INTEGER,INTENT(IN), OPTIONAL :: cov_storage
  832. REAL(KIND=4),DIMENSION(*),INTENT(IN), OPTIONAL :: cor
  833. INTEGER,INTENT(IN), OPTIONAL :: cor_storage
  834. end function
  835. END INTERFACE
  836. ! Editors to modify cross-product matrix
  837. ! related parameters
  838. INTERFACE
  839. INTEGER FUNCTION vsldsseditcp(task, mean, sum, &
  840. & cp, cp_storage)
  841. IMPORT :: VSL_SS_TASK
  842. TYPE(VSL_SS_TASK) :: task
  843. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: mean
  844. REAL(KIND=8),DIMENSION(*),INTENT(IN), OPTIONAL :: sum
  845. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: cp
  846. INTEGER,INTENT(IN) :: cp_storage
  847. end function
  848. END INTERFACE
  849. INTERFACE
  850. INTEGER FUNCTION vslssseditcp(task, mean, sum, &
  851. & cp, cp_storage)
  852. IMPORT :: VSL_SS_TASK
  853. TYPE(VSL_SS_TASK) :: task
  854. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: mean
  855. REAL(KIND=4),DIMENSION(*),INTENT(IN), OPTIONAL :: sum
  856. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: cp
  857. INTEGER,INTENT(IN) :: cp_storage
  858. end function
  859. END INTERFACE
  860. ! Editors to modify partial variance-covariance matrix
  861. ! related parameters
  862. INTERFACE
  863. INTEGER FUNCTION vsldsseditpartialcovcor(task, p_idx_array, &
  864. & cov, cov_storage, cor, cor_storage, &
  865. & p_cov, p_cov_storage, p_cor, p_cor_storage)
  866. IMPORT :: VSL_SS_TASK
  867. TYPE(VSL_SS_TASK) :: task
  868. INTEGER,DIMENSION(*),INTENT(IN) :: p_idx_array
  869. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: cov
  870. INTEGER,INTENT(IN),OPTIONAL :: cov_storage
  871. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: cor
  872. INTEGER,INTENT(IN),OPTIONAL :: cor_storage
  873. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: p_cov
  874. INTEGER,INTENT(IN),OPTIONAL :: p_cov_storage
  875. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: p_cor
  876. INTEGER,INTENT(IN),OPTIONAL :: p_cor_storage
  877. end function
  878. END INTERFACE
  879. INTERFACE
  880. INTEGER FUNCTION vslssseditpartialcovcor(task, p_idx_array, &
  881. & cov, cov_storage, cor, cor_storage, &
  882. & p_cov, p_cov_storage, p_cor, p_cor_storage)
  883. IMPORT :: VSL_SS_TASK
  884. TYPE(VSL_SS_TASK) :: task
  885. INTEGER,DIMENSION(*),INTENT(IN) :: p_idx_array
  886. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: cov
  887. INTEGER,INTENT(IN),OPTIONAL :: cov_storage
  888. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: cor
  889. INTEGER,INTENT(IN),OPTIONAL :: cor_storage
  890. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: p_cov
  891. INTEGER,INTENT(IN),OPTIONAL :: p_cov_storage
  892. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: p_cor
  893. INTEGER,INTENT(IN),OPTIONAL :: p_cor_storage
  894. end function
  895. END INTERFACE
  896. ! Editors to modify quantiles related parameters
  897. INTERFACE
  898. INTEGER FUNCTION vsldsseditquantiles(task, quant_order_n, &
  899. & quant_order,quants, &
  900. & order_stats, order_stats_storage)
  901. IMPORT :: VSL_SS_TASK
  902. TYPE(VSL_SS_TASK) :: task
  903. INTEGER,INTENT(IN),OPTIONAL :: quant_order_n
  904. REAL(KIND=8),INTENT(IN),dimension(*),OPTIONAL::quant_order
  905. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL::quants
  906. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: &
  907. & order_stats
  908. INTEGER,INTENT(IN),OPTIONAL :: order_stats_storage
  909. end function
  910. END INTERFACE
  911. INTERFACE
  912. INTEGER FUNCTION vslssseditquantiles(task, quant_order_n, &
  913. & quant_order,quants, &
  914. & order_stats, order_stats_storage)
  915. IMPORT :: VSL_SS_TASK
  916. TYPE(VSL_SS_TASK) :: task
  917. INTEGER,INTENT(IN),OPTIONAL :: quant_order_n
  918. REAL(KIND=4),INTENT(IN),dimension(*),OPTIONAL::quant_order
  919. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL::quants
  920. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: &
  921. & order_stats
  922. INTEGER,INTENT(IN),OPTIONAL :: order_stats_storage
  923. end function
  924. END INTERFACE
  925. ! Editors to modify stream data quantiles related parameters
  926. INTERFACE
  927. INTEGER FUNCTION vsldsseditstreamquantiles(task, &
  928. & quant_order_n, quant_order, quants, nparams, params)
  929. IMPORT :: VSL_SS_TASK
  930. TYPE(VSL_SS_TASK) :: task
  931. INTEGER,INTENT(IN) :: quant_order_n
  932. REAL(KIND=8),INTENT(IN),dimension(*) :: quant_order
  933. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: quants
  934. INTEGER,INTENT(IN) :: nparams
  935. REAL(KIND=8),INTENT(IN), DIMENSION(*) :: params
  936. end function
  937. END INTERFACE
  938. INTERFACE
  939. INTEGER FUNCTION vslssseditstreamquantiles(task, &
  940. & quant_order_n, quant_order, quants, nparams, params)
  941. IMPORT :: VSL_SS_TASK
  942. TYPE(VSL_SS_TASK) :: task
  943. INTEGER,INTENT(IN) :: quant_order_n
  944. REAL(KIND=4),INTENT(IN),dimension(*) :: quant_order
  945. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: quants
  946. INTEGER,INTENT(IN) :: nparams
  947. REAL(KIND=4),INTENT(IN), DIMENSION(*) :: params
  948. end function
  949. END INTERFACE
  950. ! Editors to modify pooled/group variance-covariance matrix
  951. ! related parameters
  952. INTERFACE
  953. INTEGER FUNCTION vsldsseditpooledcovariance(task, grp_indices, &
  954. & pld_mean, pld_cov, grp_cov_indices, grp_means, grp_cov)
  955. IMPORT :: VSL_SS_TASK
  956. TYPE(VSL_SS_TASK) :: task
  957. INTEGER,DIMENSION(*),INTENT(IN) :: grp_indices
  958. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: pld_mean
  959. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: pld_cov
  960. INTEGER,DIMENSION(*),INTENT(IN),OPTIONAL ::grp_cov_indices
  961. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: grp_means
  962. REAL(KIND=8),DIMENSION(*),INTENT(IN), OPTIONAL :: grp_cov
  963. end function
  964. END INTERFACE
  965. INTERFACE
  966. INTEGER FUNCTION vslssseditpooledcovariance(task, grp_indices, &
  967. & pld_mean, pld_cov, grp_cov_indices, grp_means, grp_cov)
  968. IMPORT :: VSL_SS_TASK
  969. TYPE(VSL_SS_TASK) :: task
  970. INTEGER,DIMENSION(*),INTENT(IN) :: grp_indices
  971. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: pld_mean
  972. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: pld_cov
  973. INTEGER,DIMENSION(*),INTENT(IN),OPTIONAL ::grp_cov_indices
  974. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: grp_means
  975. REAL(KIND=4),DIMENSION(*),INTENT(IN), OPTIONAL :: grp_cov
  976. end function
  977. END INTERFACE
  978. ! Editors to modify robust variance-covariance matrix
  979. ! related parameters
  980. INTERFACE
  981. INTEGER FUNCTION vsldsseditrobustcovariance(task,rcov_storage, &
  982. & nparams, params,rmean, rcov)
  983. IMPORT :: VSL_SS_TASK
  984. TYPE(VSL_SS_TASK) :: task
  985. INTEGER,INTENT(IN) :: rcov_storage
  986. INTEGER,INTENT(IN) :: nparams
  987. REAL(KIND=8),INTENT(IN) :: params(nparams)
  988. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: rmean
  989. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: rcov
  990. end function
  991. END INTERFACE
  992. INTERFACE
  993. INTEGER FUNCTION vslssseditrobustcovariance(task,rcov_storage, &
  994. & nparams, params,rmean, rcov)
  995. IMPORT :: VSL_SS_TASK
  996. TYPE(VSL_SS_TASK) :: task
  997. INTEGER,INTENT(IN) :: rcov_storage
  998. INTEGER,INTENT(IN) :: nparams
  999. REAL(KIND=4),INTENT(IN) :: params(nparams)
  1000. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: rmean
  1001. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: rcov
  1002. end function
  1003. END INTERFACE
  1004. ! Editors to modify outliers detection parameters
  1005. INTERFACE
  1006. INTEGER FUNCTION vsldsseditoutliersdetection(task, &
  1007. & nparams, params, w)
  1008. IMPORT :: VSL_SS_TASK
  1009. TYPE(VSL_SS_TASK) :: task
  1010. INTEGER,INTENT(IN) :: nparams
  1011. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: params(nparams)
  1012. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: w
  1013. end function
  1014. END INTERFACE
  1015. INTERFACE
  1016. INTEGER FUNCTION vslssseditoutliersdetection(task, &
  1017. & nparams, params, w)
  1018. IMPORT :: VSL_SS_TASK
  1019. TYPE(VSL_SS_TASK) :: task
  1020. INTEGER,INTENT(IN) :: nparams
  1021. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: params(nparams)
  1022. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: w
  1023. end function
  1024. END INTERFACE
  1025. ! Editors to modify missing values parameters
  1026. INTERFACE
  1027. INTEGER FUNCTION vsldsseditmissingvalues(task, nparams, params, &
  1028. & init_estimates_n, init_estimates, prior_n, prior, &
  1029. & simul_missing_vals_n,simul_missing_vals, &
  1030. & estimates_n, estimates)
  1031. IMPORT :: VSL_SS_TASK
  1032. TYPE(VSL_SS_TASK) :: task
  1033. INTEGER,INTENT(IN) :: nparams
  1034. REAL(KIND=8),INTENT(IN) :: params(nparams)
  1035. INTEGER,INTENT(IN),OPTIONAL :: init_estimates_n
  1036. REAL(KIND=8),INTENT(IN), DIMENSION(*),OPTIONAL:: &
  1037. & init_estimates
  1038. INTEGER,INTENT(IN),OPTIONAL :: prior_n
  1039. REAL(KIND=8),INTENT(IN),DIMENSION(*),OPTIONAL :: prior
  1040. INTEGER,INTENT(IN),OPTIONAL :: simul_missing_vals_n
  1041. REAL(KIND=8),INTENT(IN),DIMENSION(*),OPTIONAL :: &
  1042. & simul_missing_vals
  1043. INTEGER,INTENT(IN),OPTIONAL :: estimates_n
  1044. REAL(KIND=8),INTENT(IN), DIMENSION(*), OPTIONAL :: &
  1045. & estimates
  1046. end function
  1047. END INTERFACE
  1048. INTERFACE
  1049. INTEGER FUNCTION vslssseditmissingvalues(task, nparams, params, &
  1050. & init_estimates_n, init_estimates, prior_n, prior, &
  1051. & simul_missing_vals_n,simul_missing_vals, &
  1052. & estimates_n, estimates)
  1053. IMPORT :: VSL_SS_TASK
  1054. TYPE(VSL_SS_TASK) :: task
  1055. INTEGER,INTENT(IN) :: nparams
  1056. REAL(KIND=4),INTENT(IN) :: params(nparams)
  1057. INTEGER,INTENT(IN),OPTIONAL :: init_estimates_n
  1058. REAL(KIND=4),INTENT(IN), DIMENSION(*),OPTIONAL:: &
  1059. & init_estimates
  1060. INTEGER,INTENT(IN),OPTIONAL :: prior_n
  1061. REAL(KIND=4),INTENT(IN),DIMENSION(*),OPTIONAL :: prior
  1062. INTEGER,INTENT(IN),OPTIONAL :: simul_missing_vals_n
  1063. REAL(KIND=4),INTENT(IN),DIMENSION(*),OPTIONAL :: &
  1064. & simul_missing_vals
  1065. INTEGER,INTENT(IN),OPTIONAL :: estimates_n
  1066. REAL(KIND=4),INTENT(IN), DIMENSION(*), OPTIONAL :: &
  1067. & estimates
  1068. end function
  1069. END INTERFACE
  1070. ! Editors to modify matrix parameterization
  1071. ! related parameters
  1072. INTERFACE
  1073. INTEGER FUNCTION vsldsseditcorparameterization (task, &
  1074. & cor, cor_storage, pcor, pcor_storage)
  1075. IMPORT :: VSL_SS_TASK
  1076. TYPE(VSL_SS_TASK) :: task
  1077. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: cor
  1078. INTEGER,INTENT(IN) :: cor_storage
  1079. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: pcor
  1080. INTEGER,INTENT(IN) :: pcor_storage
  1081. end function
  1082. END INTERFACE
  1083. INTERFACE
  1084. INTEGER FUNCTION vslssseditcorparameterization (task, &
  1085. & cor, cor_storage, pcor, pcor_storage)
  1086. IMPORT :: VSL_SS_TASK
  1087. TYPE(VSL_SS_TASK) :: task
  1088. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: cor
  1089. INTEGER,INTENT(IN) :: cor_storage
  1090. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: pcor
  1091. INTEGER,INTENT(IN) :: pcor_storage
  1092. end function
  1093. END INTERFACE
  1094. ! Task destructor
  1095. INTERFACE
  1096. INTEGER FUNCTION vslssdeletetask(task)
  1097. IMPORT :: VSL_SS_TASK
  1098. TYPE(VSL_SS_TASK) :: task
  1099. end function
  1100. END INTERFACE
  1101. end module onemkl_vsl_omp_offload
  1102. module onemkl_vsl_omp_offload_ilp64
  1103. use onemkl_vsl_omp_offload
  1104. end module onemkl_vsl_omp_offload_ilp64
  1105. module onemkl_vsl_omp_offload_lp64
  1106. use onemkl_vsl_omp_variant_lp64
  1107. !++
  1108. ! VSL CONTINUOUS DISTRIBUTION GENERATOR FUNCTION INTERFACES.
  1109. !--
  1110. ! Uniform distribution
  1111. interface
  1112. integer function vsrnguniform(method, stream, n, r, a, b)
  1113. import :: VSL_STREAM_STATE
  1114. integer,intent(in) :: method
  1115. type(VSL_STREAM_STATE) :: stream
  1116. integer,intent(in) :: n
  1117. real(kind=4),intent(out) :: r(n)
  1118. real(kind=4),intent(in) :: a
  1119. real(kind=4),intent(in) :: b
  1120. !$omp declare variant( vsrnguniform:mkl_vsl_vsrnguniform_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1121. !$omp declare variant( vsrnguniform:mkl_vsl_vsrnguniform_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1122. end function vsrnguniform
  1123. end interface
  1124. interface
  1125. integer function vdrnguniform (method, stream, n, r, a, b)
  1126. import :: VSL_STREAM_STATE
  1127. integer,intent(in) :: method
  1128. type(VSL_STREAM_STATE) :: stream
  1129. integer,intent(in) :: n
  1130. real(kind=8),intent(out) :: r(n)
  1131. real(kind=8),intent(in) :: a
  1132. real(kind=8),intent(in) :: b
  1133. !$omp declare variant( vdrnguniform:mkl_vsl_vdrnguniform_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1134. !$omp declare variant( vdrnguniform:mkl_vsl_vdrnguniform_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1135. end function vdrnguniform
  1136. end interface
  1137. ! Gaussian distribution
  1138. interface
  1139. integer function vsrnggaussian (method, stream, n, r, a, sigma)
  1140. import :: VSL_STREAM_STATE
  1141. integer,intent(in) :: method
  1142. type(VSL_STREAM_STATE) :: stream
  1143. integer,intent(in) :: n
  1144. real(kind=4),intent(out) :: r(n)
  1145. real(kind=4),intent(in) :: a
  1146. real(kind=4),intent(in) :: sigma
  1147. !$omp declare variant( vsrnggaussian:mkl_vsl_vsrnggaussian_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1148. !$omp declare variant( vsrnggaussian:mkl_vsl_vsrnggaussian_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1149. end function vsrnggaussian
  1150. end interface
  1151. interface
  1152. integer function vdrnggaussian (method, stream, n, r, a, sigma)
  1153. import :: VSL_STREAM_STATE
  1154. integer,intent(in) :: method
  1155. type(VSL_STREAM_STATE) :: stream
  1156. integer,intent(in) :: n
  1157. real(kind=8),intent(out) :: r(n)
  1158. real(kind=8),intent(in) :: a
  1159. real(kind=8),intent(in) :: sigma
  1160. !$omp declare variant( vdrnggaussian:mkl_vsl_vdrnggaussian_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1161. !$omp declare variant( vdrnggaussian:mkl_vsl_vdrnggaussian_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1162. end function vdrnggaussian
  1163. end interface
  1164. ! GaussianMV distribution
  1165. interface
  1166. integer function vsrnggaussianmv (method, stream, n, r, dimen, mstorage, a, t)
  1167. import :: VSL_STREAM_STATE
  1168. integer,intent(in) :: method
  1169. type(VSL_STREAM_STATE) :: stream
  1170. integer,intent(in) :: n
  1171. integer, intent(in) :: dimen
  1172. real(kind=4),intent(out) :: r(dimen,n)
  1173. integer, intent(in) :: mstorage
  1174. real(kind=4),intent(in) :: a(dimen)
  1175. real(kind=4),intent(in) :: t(dimen,dimen)
  1176. !$omp declare variant( vsrnggaussianmv:mkl_vsl_vsrnggaussianmv_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1177. !$omp declare variant( vsrnggaussianmv:mkl_vsl_vsrnggaussianmv_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1178. end function vsrnggaussianmv
  1179. end interface
  1180. interface
  1181. integer function vdrnggaussianmv (method, stream, n, r, dimen, mstorage, a, t)
  1182. import :: VSL_STREAM_STATE
  1183. integer,intent(in) :: method
  1184. type(VSL_STREAM_STATE) :: stream
  1185. integer,intent(in) :: n
  1186. integer, intent(in) :: dimen
  1187. real(kind=8),intent(out) :: r(dimen,n)
  1188. integer, intent(in) :: mstorage
  1189. real(kind=8),intent(in) :: a(dimen)
  1190. real(kind=8),intent(in) :: t(dimen,dimen)
  1191. !$omp declare variant( vdrnggaussianmv:mkl_vsl_vdrnggaussianmv_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1192. !$omp declare variant( vdrnggaussianmv:mkl_vsl_vdrnggaussianmv_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1193. end function vdrnggaussianmv
  1194. end interface
  1195. ! Multinomial distribution
  1196. interface
  1197. integer function virngmultinomial (method, stream, n, r, ntrial, k, p)
  1198. import :: VSL_STREAM_STATE
  1199. integer,intent(in) :: method
  1200. type(VSL_STREAM_STATE) :: stream
  1201. integer,intent(in) :: n
  1202. integer(kind=4),intent(out) :: r(n)
  1203. integer, intent(in) :: ntrial
  1204. integer, intent(in) :: k
  1205. real(kind=8),intent(in) :: p(k)
  1206. !$omp declare variant( virngmultinomial:mkl_vsl_virngmultinomial_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1207. !$omp declare variant( virngmultinomial:mkl_vsl_virngmultinomial_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1208. end function virngmultinomial
  1209. end interface
  1210. ! PoissonV distribution
  1211. interface
  1212. integer function virngpoissonv (method, stream, n, r, lambda)
  1213. import :: VSL_STREAM_STATE
  1214. integer,intent(in) :: method
  1215. type(VSL_STREAM_STATE) :: stream
  1216. integer,intent(in) :: n
  1217. integer(kind=4),intent(out) :: r(n)
  1218. real(kind=8),intent(in) :: lambda(n)
  1219. !$omp declare variant( virngpoissonv:mkl_vsl_virngpoissonv_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1220. !$omp declare variant( virngpoissonv:mkl_vsl_virngpoissonv_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1221. end function virngpoissonv
  1222. end interface
  1223. ! Exponential distribution
  1224. interface
  1225. integer function vsrngexponential (method, stream, n, r, a, beta)
  1226. import :: VSL_STREAM_STATE
  1227. integer,intent(in) :: method
  1228. type(VSL_STREAM_STATE) :: stream
  1229. integer,intent(in) :: n
  1230. real(kind=4),intent(out) :: r(n)
  1231. real(kind=4),intent(in) :: a
  1232. real(kind=4),intent(in) :: beta
  1233. !$omp declare variant( vsrngexponential:mkl_vsl_vsrngexponential_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1234. !$omp declare variant( vsrngexponential:mkl_vsl_vsrngexponential_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1235. end function vsrngexponential
  1236. end interface
  1237. interface
  1238. integer function vdrngexponential (method, stream, n, r, a, beta)
  1239. import :: VSL_STREAM_STATE
  1240. integer,intent(in) :: method
  1241. type(VSL_STREAM_STATE) :: stream
  1242. integer,intent(in) :: n
  1243. real(kind=8),intent(out) :: r(n)
  1244. real(kind=8),intent(in) :: a
  1245. real(kind=8),intent(in) :: beta
  1246. !$omp declare variant( vdrngexponential:mkl_vsl_vdrngexponential_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1247. !$omp declare variant( vdrngexponential:mkl_vsl_vdrngexponential_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1248. end function vdrngexponential
  1249. end interface
  1250. ! Laplace distribution
  1251. interface
  1252. integer function vsrnglaplace (method, stream, n, r, a, beta)
  1253. import :: VSL_STREAM_STATE
  1254. integer,intent(in) :: method
  1255. type(VSL_STREAM_STATE) :: stream
  1256. integer,intent(in) :: n
  1257. real(kind=4),intent(out) :: r(n)
  1258. real(kind=4),intent(in) :: a
  1259. real(kind=4),intent(in) :: beta
  1260. !$omp declare variant( vsrnglaplace:mkl_vsl_vsrnglaplace_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1261. !$omp declare variant( vsrnglaplace:mkl_vsl_vsrnglaplace_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1262. end function vsrnglaplace
  1263. end interface
  1264. interface
  1265. integer function vdrnglaplace (method, stream, n, r, a, beta)
  1266. import :: VSL_STREAM_STATE
  1267. integer,intent(in) :: method
  1268. type(VSL_STREAM_STATE) :: stream
  1269. integer,intent(in) :: n
  1270. real(kind=8),intent(out) :: r(n)
  1271. real(kind=8),intent(in) :: a
  1272. real(kind=8),intent(in) :: beta
  1273. !$omp declare variant( vdrnglaplace:mkl_vsl_vdrnglaplace_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1274. !$omp declare variant( vdrnglaplace:mkl_vsl_vdrnglaplace_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1275. end function vdrnglaplace
  1276. end interface
  1277. ! Weibull distribution
  1278. interface
  1279. integer function vsrngweibull (method, stream, n, r, alpha, a, beta)
  1280. import :: VSL_STREAM_STATE
  1281. integer,intent(in) :: method
  1282. type(VSL_STREAM_STATE) :: stream
  1283. integer,intent(in) :: n
  1284. real(kind=4),intent(out) :: r(n)
  1285. real(kind=4),intent(in) :: alpha
  1286. real(kind=4),intent(in) :: a
  1287. real(kind=4),intent(in) :: beta
  1288. !$omp declare variant( vsrngweibull:mkl_vsl_vsrngweibull_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1289. !$omp declare variant( vsrngweibull:mkl_vsl_vsrngweibull_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1290. end function vsrngweibull
  1291. end interface
  1292. interface
  1293. integer function vdrngweibull (method, stream, n, r, alpha, a, beta)
  1294. import :: VSL_STREAM_STATE
  1295. integer,intent(in) :: method
  1296. type(VSL_STREAM_STATE) :: stream
  1297. integer,intent(in) :: n
  1298. real(kind=8),intent(out) :: r(n)
  1299. real(kind=8),intent(in) :: alpha
  1300. real(kind=8),intent(in) :: a
  1301. real(kind=8),intent(in) :: beta
  1302. !$omp declare variant( vdrngweibull:mkl_vsl_vdrngweibull_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1303. !$omp declare variant( vdrngweibull:mkl_vsl_vdrngweibull_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1304. end function vdrngweibull
  1305. end interface
  1306. ! Cauchy distribution
  1307. interface
  1308. integer function vsrngcauchy (method, stream, n, r, a, beta)
  1309. import :: VSL_STREAM_STATE
  1310. integer,intent(in) :: method
  1311. type(VSL_STREAM_STATE) :: stream
  1312. integer,intent(in) :: n
  1313. real(kind=4),intent(out) :: r(n)
  1314. real(kind=4),intent(in) :: a
  1315. real(kind=4),intent(in) :: beta
  1316. !$omp declare variant( vsrngcauchy:mkl_vsl_vsrngcauchy_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1317. !$omp declare variant( vsrngcauchy:mkl_vsl_vsrngcauchy_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1318. end function vsrngcauchy
  1319. end interface
  1320. interface
  1321. integer function vdrngcauchy (method, stream, n, r, a, beta)
  1322. import :: VSL_STREAM_STATE
  1323. integer,intent(in) :: method
  1324. type(VSL_STREAM_STATE) :: stream
  1325. integer,intent(in) :: n
  1326. real(kind=8),intent(out) :: r(n)
  1327. real(kind=8),intent(in) :: a
  1328. real(kind=8),intent(in) :: beta
  1329. !$omp declare variant( vdrngcauchy:mkl_vsl_vdrngcauchy_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1330. !$omp declare variant( vdrngcauchy:mkl_vsl_vdrngcauchy_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1331. end function vdrngcauchy
  1332. end interface
  1333. ! Rayleigh distribution
  1334. interface
  1335. integer function vsrngrayleigh (method, stream, n, r, a, beta)
  1336. import :: VSL_STREAM_STATE
  1337. integer,intent(in) :: method
  1338. type(VSL_STREAM_STATE) :: stream
  1339. integer,intent(in) :: n
  1340. real(kind=4),intent(out) :: r(n)
  1341. real(kind=4),intent(in) :: a
  1342. real(kind=4),intent(in) :: beta
  1343. !$omp declare variant( vsrngrayleigh:mkl_vsl_vsrngrayleigh_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1344. !$omp declare variant( vsrngrayleigh:mkl_vsl_vsrngrayleigh_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1345. end function vsrngrayleigh
  1346. end interface
  1347. interface
  1348. integer function vdrngrayleigh (method, stream, n, r, a, beta)
  1349. import :: VSL_STREAM_STATE
  1350. integer,intent(in) :: method
  1351. type(VSL_STREAM_STATE) :: stream
  1352. integer,intent(in) :: n
  1353. real(kind=8),intent(out) :: r(n)
  1354. real(kind=8),intent(in) :: a
  1355. real(kind=8),intent(in) :: beta
  1356. !$omp declare variant( vdrngrayleigh:mkl_vsl_vdrngrayleigh_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1357. !$omp declare variant( vdrngrayleigh:mkl_vsl_vdrngrayleigh_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1358. end function vdrngrayleigh
  1359. end interface
  1360. ! Lognormal distribution
  1361. interface
  1362. integer function vsrnglognormal (method, stream, n, r, a, sigma, b, beta)
  1363. import :: VSL_STREAM_STATE
  1364. integer,intent(in) :: method
  1365. type(VSL_STREAM_STATE) :: stream
  1366. integer,intent(in) :: n
  1367. real(kind=4),intent(out) :: r(n)
  1368. real(kind=4),intent(in) :: a
  1369. real(kind=4),intent(in) :: sigma
  1370. real(kind=4),intent(in) :: b
  1371. real(kind=4),intent(in) :: beta
  1372. !$omp declare variant( vsrnglognormal:mkl_vsl_vsrnglognormal_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1373. !$omp declare variant( vsrnglognormal:mkl_vsl_vsrnglognormal_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1374. end function vsrnglognormal
  1375. end interface
  1376. interface
  1377. integer function vdrnglognormal (method, stream, n, r, a, sigma, b, beta)
  1378. import :: VSL_STREAM_STATE
  1379. integer,intent(in) :: method
  1380. type(VSL_STREAM_STATE) :: stream
  1381. integer,intent(in) :: n
  1382. real(kind=8),intent(out) :: r(n)
  1383. real(kind=8),intent(in) :: a
  1384. real(kind=8),intent(in) :: sigma
  1385. real(kind=8),intent(in) :: b
  1386. real(kind=8),intent(in) :: beta
  1387. !$omp declare variant( vdrnglognormal:mkl_vsl_vdrnglognormal_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1388. !$omp declare variant( vdrnglognormal:mkl_vsl_vdrnglognormal_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1389. end function vdrnglognormal
  1390. end interface
  1391. ! Gumbel distribution
  1392. interface
  1393. integer function vsrnggumbel (method, stream, n, r, a, beta)
  1394. import :: VSL_STREAM_STATE
  1395. integer,intent(in) :: method
  1396. type(VSL_STREAM_STATE) :: stream
  1397. integer,intent(in) :: n
  1398. real(kind=4),intent(out) :: r(n)
  1399. real(kind=4),intent(in) :: a
  1400. real(kind=4),intent(in) :: beta
  1401. !$omp declare variant( vsrnggumbel:mkl_vsl_vsrnggumbel_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1402. !$omp declare variant( vsrnggumbel:mkl_vsl_vsrnggumbel_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1403. end function vsrnggumbel
  1404. end interface
  1405. interface
  1406. integer function vdrnggumbel (method, stream, n, r, a, beta)
  1407. import :: VSL_STREAM_STATE
  1408. integer,intent(in) :: method
  1409. type(VSL_STREAM_STATE) :: stream
  1410. integer,intent(in) :: n
  1411. real(kind=8),intent(out) :: r(n)
  1412. real(kind=8),intent(in) :: a
  1413. real(kind=8),intent(in) :: beta
  1414. !$omp declare variant( vdrnggumbel:mkl_vsl_vdrnggumbel_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1415. !$omp declare variant( vdrnggumbel:mkl_vsl_vdrnggumbel_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1416. end function vdrnggumbel
  1417. end interface
  1418. ! Beta distribution
  1419. interface
  1420. integer function vsrngbeta (method, stream, n, r, p, q, a, beta)
  1421. import :: VSL_STREAM_STATE
  1422. integer,intent(in) :: method
  1423. type(VSL_STREAM_STATE) :: stream
  1424. integer,intent(in) :: n
  1425. real(kind=4),intent(out) :: r(n)
  1426. real(kind=4),intent(in) :: p
  1427. real(kind=4),intent(in) :: q
  1428. real(kind=4),intent(in) :: a
  1429. real(kind=4),intent(in) :: beta
  1430. !$omp declare variant( vsrngbeta:mkl_vsl_vsrngbeta_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1431. !$omp declare variant( vsrngbeta:mkl_vsl_vsrngbeta_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1432. end function vsrngbeta
  1433. end interface
  1434. interface
  1435. integer function vdrngbeta (method, stream, n, r, p, q, a, beta)
  1436. import :: VSL_STREAM_STATE
  1437. integer,intent(in) :: method
  1438. type(VSL_STREAM_STATE) :: stream
  1439. integer,intent(in) :: n
  1440. real(kind=8),intent(out) :: r(n)
  1441. real(kind=8),intent(in) :: p
  1442. real(kind=8),intent(in) :: q
  1443. real(kind=8),intent(in) :: a
  1444. real(kind=8),intent(in) :: beta
  1445. !$omp declare variant( vdrngbeta:mkl_vsl_vdrngbeta_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1446. !$omp declare variant( vdrngbeta:mkl_vsl_vdrngbeta_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1447. end function vdrngbeta
  1448. end interface
  1449. ! Gamma distribution
  1450. interface
  1451. integer function vsrnggamma (method, stream, n, r, alpha, a, beta)
  1452. import :: VSL_STREAM_STATE
  1453. integer,intent(in) :: method
  1454. type(VSL_STREAM_STATE) :: stream
  1455. integer,intent(in) :: n
  1456. real(kind=4),intent(out) :: r(n)
  1457. real(kind=4),intent(in) :: alpha
  1458. real(kind=4),intent(in) :: a
  1459. real(kind=4),intent(in) :: beta
  1460. !$omp declare variant( vsrnggamma:mkl_vsl_vsrnggamma_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1461. !$omp declare variant( vsrnggamma:mkl_vsl_vsrnggamma_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1462. end function vsrnggamma
  1463. end interface
  1464. interface
  1465. integer function vdrnggamma (method, stream, n, r, alpha, a, beta)
  1466. import :: VSL_STREAM_STATE
  1467. integer,intent(in) :: method
  1468. type(VSL_STREAM_STATE) :: stream
  1469. integer,intent(in) :: n
  1470. real(kind=8),intent(out) :: r(n)
  1471. real(kind=8),intent(in) :: alpha
  1472. real(kind=8),intent(in) :: a
  1473. real(kind=8),intent(in) :: beta
  1474. !$omp declare variant( vdrnggamma:mkl_vsl_vdrnggamma_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1475. !$omp declare variant( vdrnggamma:mkl_vsl_vdrnggamma_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1476. end function vdrnggamma
  1477. end interface
  1478. ! ChiSquare distribution
  1479. interface
  1480. integer function vsrngchisquare (method, stream, n, r, v)
  1481. import :: VSL_STREAM_STATE
  1482. integer,intent(in) :: method
  1483. type(VSL_STREAM_STATE) :: stream
  1484. integer,intent(in) :: n
  1485. real(kind=4),intent(out) :: r(n)
  1486. integer,intent(in) :: v
  1487. !$omp declare variant( vsrngchisquare:mkl_vsl_vsrngchisquare_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1488. !$omp declare variant( vsrngchisquare:mkl_vsl_vsrngchisquare_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1489. end function vsrngchisquare
  1490. end interface
  1491. interface
  1492. integer function vdrngchisquare (method, stream, n, r, v)
  1493. import :: VSL_STREAM_STATE
  1494. integer,intent(in) :: method
  1495. type(VSL_STREAM_STATE) :: stream
  1496. integer,intent(in) :: n
  1497. real(kind=8),intent(out) :: r(n)
  1498. integer,intent(in) :: v
  1499. !$omp declare variant( vdrngchisquare:mkl_vsl_vdrngchisquare_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1500. !$omp declare variant( vdrngchisquare:mkl_vsl_vdrngchisquare_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1501. end function vdrngchisquare
  1502. end interface
  1503. !++
  1504. ! VSL DISCRETE DISTRIBUTION GENERATOR FUNCTION INTERFACES.
  1505. !--
  1506. ! Uniform distribution
  1507. interface
  1508. integer function virnguniform (method, stream, n, r, a, b)
  1509. import :: VSL_STREAM_STATE
  1510. integer,intent(in) :: method
  1511. type(VSL_STREAM_STATE) :: stream
  1512. integer,intent(in) :: n
  1513. integer(kind=4),intent(out) :: r(n)
  1514. integer(kind=4),intent(in) :: a
  1515. integer(kind=4),intent(in) :: b
  1516. !$omp declare variant( virnguniform:mkl_vsl_virnguniform_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1517. !$omp declare variant( virnguniform:mkl_vsl_virnguniform_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1518. end function virnguniform
  1519. end interface
  1520. ! UniformBits distribution
  1521. interface
  1522. integer function virnguniformbits (method, stream, n, r)
  1523. import :: VSL_STREAM_STATE
  1524. integer,intent(in) :: method
  1525. type(VSL_STREAM_STATE) :: stream
  1526. integer,intent(in) :: n
  1527. integer(kind=4),intent(out) :: r(n)
  1528. !$omp declare variant( virnguniformbits:mkl_vsl_virnguniformbits_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1529. !$omp declare variant( virnguniformbits:mkl_vsl_virnguniformbits_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1530. end function virnguniformbits
  1531. end interface
  1532. ! UniformBits32 distribution
  1533. interface
  1534. integer function virnguniformbits32 (method, stream, n, r)
  1535. import :: VSL_STREAM_STATE
  1536. integer,intent(in) :: method
  1537. type(VSL_STREAM_STATE) :: stream
  1538. integer,intent(in) :: n
  1539. integer(kind=4),intent(out) :: r(n)
  1540. !$omp declare variant( virnguniformbits32:mkl_vsl_virnguniformbits32_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1541. !$omp declare variant( virnguniformbits32:mkl_vsl_virnguniformbits32_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1542. end function virnguniformbits32
  1543. end interface
  1544. ! UniformBits64 distribution
  1545. interface
  1546. integer function virnguniformbits64 (method, stream, n, r)
  1547. import :: VSL_STREAM_STATE
  1548. integer,intent(in) :: method
  1549. type(VSL_STREAM_STATE) :: stream
  1550. integer,intent(in) :: n
  1551. integer(kind=8),intent(out) :: r(n)
  1552. !$omp declare variant( virnguniformbits64:mkl_vsl_virnguniformbits64_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1553. !$omp declare variant( virnguniformbits64:mkl_vsl_virnguniformbits64_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1554. end function virnguniformbits64
  1555. end interface
  1556. ! Bernoulli distribution
  1557. interface
  1558. integer function virngbernoulli (method, stream, n, r, p)
  1559. import :: VSL_STREAM_STATE
  1560. integer,intent(in) :: method
  1561. type(VSL_STREAM_STATE) :: stream
  1562. integer,intent(in) :: n
  1563. integer(kind=4),intent(out) :: r(n)
  1564. real(kind=8),intent(in) :: p
  1565. !$omp declare variant( virngbernoulli:mkl_vsl_virngbernoulli_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1566. !$omp declare variant( virngbernoulli:mkl_vsl_virngbernoulli_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1567. end function virngbernoulli
  1568. end interface
  1569. ! Geometric distribution
  1570. interface
  1571. integer function virnggeometric (method, stream, n, r, p)
  1572. import :: VSL_STREAM_STATE
  1573. integer,intent(in) :: method
  1574. type(VSL_STREAM_STATE) :: stream
  1575. integer,intent(in) :: n
  1576. integer(kind=4),intent(out) :: r(n)
  1577. real(kind=8),intent(in) :: p
  1578. !$omp declare variant( virnggeometric:mkl_vsl_virnggeometric_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1579. !$omp declare variant( virnggeometric:mkl_vsl_virnggeometric_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1580. end function virnggeometric
  1581. end interface
  1582. ! Hypergeometric distribution
  1583. interface
  1584. integer function virnghypergeometric (method, stream, n, r, l, s, m)
  1585. import :: VSL_STREAM_STATE
  1586. integer,intent(in) :: method
  1587. type(VSL_STREAM_STATE) :: stream
  1588. integer,intent(in) :: n
  1589. integer(kind=4),intent(out) :: r(n)
  1590. integer(kind=4),intent(in) :: l
  1591. integer(kind=4),intent(in) :: s
  1592. integer(kind=4),intent(in) :: m
  1593. !$omp declare variant( virnghypergeometric:mkl_vsl_virnghypergeometric_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1594. !$omp declare variant( virnghypergeometric:mkl_vsl_virnghypergeometric_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1595. end function virnghypergeometric
  1596. end interface
  1597. ! Binomial distribution
  1598. interface
  1599. integer function virngbinomial (method, stream, n, r, ntrial, p)
  1600. import :: VSL_STREAM_STATE
  1601. integer,intent(in) :: method
  1602. type(VSL_STREAM_STATE) :: stream
  1603. integer,intent(in) :: n
  1604. integer(kind=4),intent(out) :: r(n)
  1605. integer(kind=4),intent(in) :: ntrial
  1606. real(kind=8),intent(in) :: p
  1607. !$omp declare variant( virngbinomial:mkl_vsl_virngbinomial_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1608. !$omp declare variant( virngbinomial:mkl_vsl_virngbinomial_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1609. end function virngbinomial
  1610. end interface
  1611. ! Negbinomial distribution
  1612. interface
  1613. integer function virngnegbinomial (method, stream, n, r, a, p)
  1614. import :: VSL_STREAM_STATE
  1615. integer,intent(in) :: method
  1616. type(VSL_STREAM_STATE) :: stream
  1617. integer,intent(in) :: n
  1618. integer(kind=4),intent(out) :: r(n)
  1619. real(kind=8),intent(in) :: a
  1620. real(kind=8),intent(in) :: p
  1621. !$omp declare variant( virngnegbinomial:mkl_vsl_virngnegbinomial_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1622. !$omp declare variant( virngnegbinomial:mkl_vsl_virngnegbinomial_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1623. end function virngnegbinomial
  1624. end interface
  1625. ! Poisson distribution
  1626. interface
  1627. integer function virngpoisson (method, stream, n, r, lambda)
  1628. import :: VSL_STREAM_STATE
  1629. integer,intent(in) :: method
  1630. type(VSL_STREAM_STATE) :: stream
  1631. integer,intent(in) :: n
  1632. integer(kind=4),intent(out) :: r(n)
  1633. real(kind=8),intent(in) :: lambda
  1634. !$omp declare variant( virngpoisson:mkl_vsl_virngpoisson_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1635. !$omp declare variant( virngpoisson:mkl_vsl_virngpoisson_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync)) adjust_args(need_device_ptr:r)
  1636. end function virngpoisson
  1637. end interface
  1638. !++
  1639. ! VSL SERVICE FUNCTION INTERFACES.
  1640. !--
  1641. ! NewStream - stream creation/initialization
  1642. interface
  1643. integer function vslnewstream( stream, brng, seed )
  1644. import :: VSL_STREAM_STATE
  1645. type(VSL_STREAM_STATE) :: stream
  1646. integer,intent(in) :: brng
  1647. integer,intent(in) :: seed
  1648. end function
  1649. end interface
  1650. ! NewStreamEx - advanced stream creation/initialization
  1651. interface
  1652. integer function vslnewstreamex( stream, brng, n, params )
  1653. import :: VSL_STREAM_STATE
  1654. type(VSL_STREAM_STATE) :: stream
  1655. integer,intent(in) :: brng
  1656. integer,intent(in) :: n
  1657. integer(kind=4),intent(in) :: params(n)
  1658. end function
  1659. end interface
  1660. ! DeleteStream - delete stream
  1661. interface
  1662. integer function vsldeletestream( stream )
  1663. import :: VSL_STREAM_STATE
  1664. type(VSL_STREAM_STATE) :: stream
  1665. end function
  1666. end interface
  1667. ! CopyStream - copy all stream information
  1668. interface
  1669. integer function vslcopystream( newstream, srcstream )
  1670. import :: VSL_STREAM_STATE
  1671. type(VSL_STREAM_STATE) :: newstream
  1672. type(VSL_STREAM_STATE) :: srcstream
  1673. end function
  1674. end interface
  1675. ! CopyStreamState - copy stream state only
  1676. interface
  1677. integer function vslcopystreamstate( deststream, srcstream )
  1678. import :: VSL_STREAM_STATE
  1679. type(VSL_STREAM_STATE) :: deststream
  1680. type(VSL_STREAM_STATE) :: srcstream
  1681. end function
  1682. end interface
  1683. ! LeapfrogStream - leapfrog method
  1684. interface
  1685. integer function vslleapfrogstream( stream, k, nstreams )
  1686. import :: VSL_STREAM_STATE
  1687. type(VSL_STREAM_STATE) :: stream
  1688. integer,intent(in) :: k
  1689. integer,intent(in) :: nstreams
  1690. end function
  1691. end interface
  1692. ! SkipAheadStream - skip-ahead method
  1693. interface
  1694. integer function vslskipaheadstream( stream, nskip )
  1695. import :: VSL_STREAM_STATE
  1696. type(VSL_STREAM_STATE) :: stream
  1697. integer(kind=8),intent(in) :: nskip
  1698. end function
  1699. end interface
  1700. ! SkipAheadStreamEx - skip-ahead extended method
  1701. interface
  1702. integer function vslskipaheadstreamex( stream, n, params )
  1703. import :: VSL_STREAM_STATE
  1704. type(VSL_STREAM_STATE) :: stream
  1705. integer,intent(in) :: n
  1706. integer(kind=8),intent(in) :: params(n)
  1707. end function
  1708. end interface
  1709. ! GetBrngProperties - get BRNG properties
  1710. interface
  1711. integer function vslgetbrngproperties( brng, properties )
  1712. import :: VSL_BRNG_PROPERTIES
  1713. integer(kind=4),intent(in) :: brng
  1714. type(VSL_BRNG_PROPERTIES),intent(out) :: properties
  1715. end function
  1716. end interface
  1717. ! GetStreamStateBrng - get BRNG associated with given stream
  1718. interface
  1719. integer function vslgetstreamstatebrng( stream )
  1720. import :: VSL_STREAM_STATE
  1721. type(VSL_STREAM_STATE) :: stream
  1722. end function
  1723. end interface
  1724. ! SaveStreamF - save stream to file
  1725. interface
  1726. integer function vslsavestreamf( stream, fname )
  1727. import :: VSL_STREAM_STATE
  1728. character(*) :: fname
  1729. type(VSL_STREAM_STATE) :: stream
  1730. end function
  1731. end interface
  1732. ! LoadStreamF - save stream to file
  1733. interface
  1734. integer function vslloadstreamf( stream, fname )
  1735. import :: VSL_STREAM_STATE
  1736. character(*) :: fname
  1737. type(VSL_STREAM_STATE) :: stream
  1738. end function
  1739. end interface
  1740. ! SaveStreamM - save stream to memory
  1741. interface
  1742. integer function vslsavestreamm( stream, memptr )
  1743. import :: VSL_STREAM_STATE
  1744. integer(kind=1),dimension(*),intent(out)::memptr
  1745. type(VSL_STREAM_STATE),intent(in) :: stream
  1746. end function
  1747. end interface
  1748. ! LoadStreamM - load stream from memory
  1749. interface
  1750. integer function vslloadstreamm( stream, memptr )
  1751. import :: VSL_STREAM_STATE
  1752. integer(kind=1),dimension(*),intent(in)::memptr
  1753. type(VSL_STREAM_STATE),intent(out) ::stream
  1754. end function
  1755. end interface
  1756. ! GetStreamSize - get size of random stream
  1757. interface
  1758. integer function vslgetstreamsize( stream )
  1759. import :: VSL_STREAM_STATE
  1760. type(VSL_STREAM_STATE),intent(in) :: stream
  1761. end function
  1762. end interface
  1763. !++
  1764. ! SUMMARY STATISTICS LIBRARY ROUTINES
  1765. !--
  1766. ! Compute routines
  1767. interface
  1768. integer function vsldsscompute(task, estimates, method)
  1769. import :: VSL_SS_TASK
  1770. type(VSL_SS_TASK) :: task
  1771. integer(kind=8),intent(in) :: estimates
  1772. integer,intent(in) :: method
  1773. !$omp declare variant( vsldsscompute:mkl_vsl_dsscompute_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1774. !$omp declare variant( vsldsscompute:mkl_vsl_dsscompute_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync))
  1775. end function
  1776. end interface
  1777. interface
  1778. integer function vslssscompute(task, estimates, method)
  1779. import :: VSL_SS_TASK
  1780. type(VSL_SS_TASK) :: task
  1781. integer(kind=8),intent(in) :: estimates
  1782. integer,intent(in) :: method
  1783. !$omp declare variant( vslssscompute:mkl_vsl_ssscompute_omp_offload_lp64 ) match( construct={target variant dispatch}, device={arch(gen)} )
  1784. !$omp declare variant( vslssscompute:mkl_vsl_ssscompute_omp_offload_lp64 ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(targetsync))
  1785. end function
  1786. end interface
  1787. ! Task constructors
  1788. INTERFACE
  1789. INTEGER FUNCTION vsldssnewtask(task,p,n,x_storage,x,w,indices)
  1790. IMPORT :: VSL_SS_TASK
  1791. TYPE(VSL_SS_TASK) :: task
  1792. INTEGER,INTENT(IN) :: p
  1793. INTEGER,INTENT(IN) :: n
  1794. INTEGER,INTENT(IN) :: x_storage
  1795. REAL(KIND=8),INTENT(IN) :: x(n,p)
  1796. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL:: w
  1797. INTEGER,DIMENSION(*),INTENT(IN),OPTIONAL:: indices
  1798. end function
  1799. END INTERFACE
  1800. INTERFACE
  1801. INTEGER FUNCTION vslsssnewtask(task,p,n,x_storage,x,w,indices)
  1802. IMPORT :: VSL_SS_TASK
  1803. TYPE(VSL_SS_TASK) :: task
  1804. INTEGER,INTENT(IN) :: p
  1805. INTEGER,INTENT(IN) :: n
  1806. INTEGER,INTENT(IN) :: x_storage
  1807. REAL(KIND=4),INTENT(IN) :: x(n,p)
  1808. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL:: w
  1809. INTEGER,DIMENSION(*),INTENT(IN),OPTIONAL:: indices
  1810. end function
  1811. END INTERFACE
  1812. ! Task editors
  1813. ! Editor to modify a task parameter
  1814. INTERFACE
  1815. INTEGER FUNCTION vsldssedittask(task,parameter,par_addr)
  1816. IMPORT :: VSL_SS_TASK
  1817. TYPE(VSL_SS_TASK) :: task
  1818. INTEGER,INTENT(IN) :: parameter
  1819. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: par_addr
  1820. end function
  1821. END INTERFACE
  1822. INTERFACE
  1823. INTEGER FUNCTION vslsssedittask(task,parameter,par_addr)
  1824. IMPORT :: VSL_SS_TASK
  1825. TYPE(VSL_SS_TASK) :: task
  1826. INTEGER,INTENT(IN) :: parameter
  1827. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: par_addr
  1828. end function
  1829. END INTERFACE
  1830. INTERFACE
  1831. INTEGER FUNCTION vslissedittask(task,parameter,par_addr)
  1832. IMPORT :: VSL_SS_TASK
  1833. TYPE(VSL_SS_TASK) :: task
  1834. INTEGER,INTENT(IN) :: parameter
  1835. INTEGER,INTENT(IN) :: par_addr
  1836. end function
  1837. END INTERFACE
  1838. ! Task specific editors
  1839. ! Editors to modify moments related parameters
  1840. INTERFACE
  1841. INTEGER FUNCTION vsldsseditmoments(task, mean, r2m, r3m, r4m, &
  1842. & c2m, c3m, c4m)
  1843. IMPORT :: VSL_SS_TASK
  1844. TYPE(VSL_SS_TASK) :: task
  1845. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: mean
  1846. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r2m
  1847. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r3m
  1848. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r4m
  1849. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c2m
  1850. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c3m
  1851. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c4m
  1852. end function
  1853. END INTERFACE
  1854. INTERFACE
  1855. INTEGER FUNCTION vslssseditmoments(task, mean, r2m, r3m, r4m, &
  1856. & c2m, c3m, c4m)
  1857. IMPORT :: VSL_SS_TASK
  1858. TYPE(VSL_SS_TASK) :: task
  1859. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: mean
  1860. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r2m
  1861. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r3m
  1862. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r4m
  1863. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c2m
  1864. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c3m
  1865. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c4m
  1866. end function
  1867. END INTERFACE
  1868. ! Editors to modify sums related parameters
  1869. INTERFACE
  1870. INTEGER FUNCTION vsldsseditsums(task, sum, r2s, r3s, r4s, &
  1871. & c2s, c3s, c4s)
  1872. IMPORT :: VSL_SS_TASK
  1873. TYPE(VSL_SS_TASK) :: task
  1874. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: sum
  1875. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r2s
  1876. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r3s
  1877. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: r4s
  1878. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c2s
  1879. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c3s
  1880. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: c4s
  1881. end function
  1882. END INTERFACE
  1883. INTERFACE
  1884. INTEGER FUNCTION vslssseditsums(task, sum, r2s, r3s, r4s, &
  1885. & c2s, c3s, c4s)
  1886. IMPORT :: VSL_SS_TASK
  1887. TYPE(VSL_SS_TASK) :: task
  1888. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: sum
  1889. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r2s
  1890. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r3s
  1891. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: r4s
  1892. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c2s
  1893. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c3s
  1894. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: c4s
  1895. end function
  1896. END INTERFACE
  1897. ! Editors to modify variance-covariance/correlation matrix
  1898. ! related parameters
  1899. INTERFACE
  1900. INTEGER FUNCTION vsldsseditcovcor(task, mean,cov, cov_storage, &
  1901. & cor, cor_storage)
  1902. IMPORT :: VSL_SS_TASK
  1903. TYPE(VSL_SS_TASK) :: task
  1904. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: mean
  1905. REAL(KIND=8),DIMENSION(*),INTENT(IN), OPTIONAL :: cov
  1906. INTEGER,INTENT(IN), OPTIONAL :: cov_storage
  1907. REAL(KIND=8),DIMENSION(*),INTENT(IN), OPTIONAL :: cor
  1908. INTEGER,INTENT(IN), OPTIONAL :: cor_storage
  1909. end function
  1910. END INTERFACE
  1911. INTERFACE
  1912. INTEGER FUNCTION vslssseditcovcor(task, mean,cov, cov_storage, &
  1913. & cor, cor_storage)
  1914. IMPORT :: VSL_SS_TASK
  1915. TYPE(VSL_SS_TASK) :: task
  1916. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: mean
  1917. REAL(KIND=4),DIMENSION(*),INTENT(IN), OPTIONAL :: cov
  1918. INTEGER,INTENT(IN), OPTIONAL :: cov_storage
  1919. REAL(KIND=4),DIMENSION(*),INTENT(IN), OPTIONAL :: cor
  1920. INTEGER,INTENT(IN), OPTIONAL :: cor_storage
  1921. end function
  1922. END INTERFACE
  1923. ! Editors to modify cross-product matrix
  1924. ! related parameters
  1925. INTERFACE
  1926. INTEGER FUNCTION vsldsseditcp(task, mean, sum, &
  1927. & cp, cp_storage)
  1928. IMPORT :: VSL_SS_TASK
  1929. TYPE(VSL_SS_TASK) :: task
  1930. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: mean
  1931. REAL(KIND=8),DIMENSION(*),INTENT(IN), OPTIONAL :: sum
  1932. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: cp
  1933. INTEGER,INTENT(IN) :: cp_storage
  1934. end function
  1935. END INTERFACE
  1936. INTERFACE
  1937. INTEGER FUNCTION vslssseditcp(task, mean, sum, &
  1938. & cp, cp_storage)
  1939. IMPORT :: VSL_SS_TASK
  1940. TYPE(VSL_SS_TASK) :: task
  1941. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: mean
  1942. REAL(KIND=4),DIMENSION(*),INTENT(IN), OPTIONAL :: sum
  1943. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: cp
  1944. INTEGER,INTENT(IN) :: cp_storage
  1945. end function
  1946. END INTERFACE
  1947. ! Editors to modify partial variance-covariance matrix
  1948. ! related parameters
  1949. INTERFACE
  1950. INTEGER FUNCTION vsldsseditpartialcovcor(task, p_idx_array, &
  1951. & cov, cov_storage, cor, cor_storage, &
  1952. & p_cov, p_cov_storage, p_cor, p_cor_storage)
  1953. IMPORT :: VSL_SS_TASK
  1954. TYPE(VSL_SS_TASK) :: task
  1955. INTEGER,DIMENSION(*),INTENT(IN) :: p_idx_array
  1956. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: cov
  1957. INTEGER,INTENT(IN),OPTIONAL :: cov_storage
  1958. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: cor
  1959. INTEGER,INTENT(IN),OPTIONAL :: cor_storage
  1960. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: p_cov
  1961. INTEGER,INTENT(IN),OPTIONAL :: p_cov_storage
  1962. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: p_cor
  1963. INTEGER,INTENT(IN),OPTIONAL :: p_cor_storage
  1964. end function
  1965. END INTERFACE
  1966. INTERFACE
  1967. INTEGER FUNCTION vslssseditpartialcovcor(task, p_idx_array, &
  1968. & cov, cov_storage, cor, cor_storage, &
  1969. & p_cov, p_cov_storage, p_cor, p_cor_storage)
  1970. IMPORT :: VSL_SS_TASK
  1971. TYPE(VSL_SS_TASK) :: task
  1972. INTEGER,DIMENSION(*),INTENT(IN) :: p_idx_array
  1973. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: cov
  1974. INTEGER,INTENT(IN),OPTIONAL :: cov_storage
  1975. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: cor
  1976. INTEGER,INTENT(IN),OPTIONAL :: cor_storage
  1977. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: p_cov
  1978. INTEGER,INTENT(IN),OPTIONAL :: p_cov_storage
  1979. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: p_cor
  1980. INTEGER,INTENT(IN),OPTIONAL :: p_cor_storage
  1981. end function
  1982. END INTERFACE
  1983. ! Editors to modify quantiles related parameters
  1984. INTERFACE
  1985. INTEGER FUNCTION vsldsseditquantiles(task, quant_order_n, &
  1986. & quant_order,quants, &
  1987. & order_stats, order_stats_storage)
  1988. IMPORT :: VSL_SS_TASK
  1989. TYPE(VSL_SS_TASK) :: task
  1990. INTEGER,INTENT(IN),OPTIONAL :: quant_order_n
  1991. REAL(KIND=8),INTENT(IN),dimension(*),OPTIONAL::quant_order
  1992. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL::quants
  1993. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: &
  1994. & order_stats
  1995. INTEGER,INTENT(IN),OPTIONAL :: order_stats_storage
  1996. end function
  1997. END INTERFACE
  1998. INTERFACE
  1999. INTEGER FUNCTION vslssseditquantiles(task, quant_order_n, &
  2000. & quant_order,quants, &
  2001. & order_stats, order_stats_storage)
  2002. IMPORT :: VSL_SS_TASK
  2003. TYPE(VSL_SS_TASK) :: task
  2004. INTEGER,INTENT(IN),OPTIONAL :: quant_order_n
  2005. REAL(KIND=4),INTENT(IN),dimension(*),OPTIONAL::quant_order
  2006. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL::quants
  2007. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: &
  2008. & order_stats
  2009. INTEGER,INTENT(IN),OPTIONAL :: order_stats_storage
  2010. end function
  2011. END INTERFACE
  2012. ! Editors to modify stream data quantiles related parameters
  2013. INTERFACE
  2014. INTEGER FUNCTION vsldsseditstreamquantiles(task, &
  2015. & quant_order_n, quant_order, quants, nparams, params)
  2016. IMPORT :: VSL_SS_TASK
  2017. TYPE(VSL_SS_TASK) :: task
  2018. INTEGER,INTENT(IN) :: quant_order_n
  2019. REAL(KIND=8),INTENT(IN),dimension(*) :: quant_order
  2020. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: quants
  2021. INTEGER,INTENT(IN) :: nparams
  2022. REAL(KIND=8),INTENT(IN), DIMENSION(*) :: params
  2023. end function
  2024. END INTERFACE
  2025. INTERFACE
  2026. INTEGER FUNCTION vslssseditstreamquantiles(task, &
  2027. & quant_order_n, quant_order, quants, nparams, params)
  2028. IMPORT :: VSL_SS_TASK
  2029. TYPE(VSL_SS_TASK) :: task
  2030. INTEGER,INTENT(IN) :: quant_order_n
  2031. REAL(KIND=4),INTENT(IN),dimension(*) :: quant_order
  2032. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: quants
  2033. INTEGER,INTENT(IN) :: nparams
  2034. REAL(KIND=4),INTENT(IN), DIMENSION(*) :: params
  2035. end function
  2036. END INTERFACE
  2037. ! Editors to modify pooled/group variance-covariance matrix
  2038. ! related parameters
  2039. INTERFACE
  2040. INTEGER FUNCTION vsldsseditpooledcovariance(task, grp_indices, &
  2041. & pld_mean, pld_cov, grp_cov_indices, grp_means, grp_cov)
  2042. IMPORT :: VSL_SS_TASK
  2043. TYPE(VSL_SS_TASK) :: task
  2044. INTEGER,DIMENSION(*),INTENT(IN) :: grp_indices
  2045. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: pld_mean
  2046. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: pld_cov
  2047. INTEGER,DIMENSION(*),INTENT(IN),OPTIONAL ::grp_cov_indices
  2048. REAL(KIND=8),DIMENSION(*),INTENT(IN),OPTIONAL :: grp_means
  2049. REAL(KIND=8),DIMENSION(*),INTENT(IN), OPTIONAL :: grp_cov
  2050. end function
  2051. END INTERFACE
  2052. INTERFACE
  2053. INTEGER FUNCTION vslssseditpooledcovariance(task, grp_indices, &
  2054. & pld_mean, pld_cov, grp_cov_indices, grp_means, grp_cov)
  2055. IMPORT :: VSL_SS_TASK
  2056. TYPE(VSL_SS_TASK) :: task
  2057. INTEGER,DIMENSION(*),INTENT(IN) :: grp_indices
  2058. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: pld_mean
  2059. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: pld_cov
  2060. INTEGER,DIMENSION(*),INTENT(IN),OPTIONAL ::grp_cov_indices
  2061. REAL(KIND=4),DIMENSION(*),INTENT(IN),OPTIONAL :: grp_means
  2062. REAL(KIND=4),DIMENSION(*),INTENT(IN), OPTIONAL :: grp_cov
  2063. end function
  2064. END INTERFACE
  2065. ! Editors to modify robust variance-covariance matrix
  2066. ! related parameters
  2067. INTERFACE
  2068. INTEGER FUNCTION vsldsseditrobustcovariance(task,rcov_storage, &
  2069. & nparams, params,rmean, rcov)
  2070. IMPORT :: VSL_SS_TASK
  2071. TYPE(VSL_SS_TASK) :: task
  2072. INTEGER,INTENT(IN) :: rcov_storage
  2073. INTEGER,INTENT(IN) :: nparams
  2074. REAL(KIND=8),INTENT(IN) :: params(nparams)
  2075. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: rmean
  2076. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: rcov
  2077. end function
  2078. END INTERFACE
  2079. INTERFACE
  2080. INTEGER FUNCTION vslssseditrobustcovariance(task,rcov_storage, &
  2081. & nparams, params,rmean, rcov)
  2082. IMPORT :: VSL_SS_TASK
  2083. TYPE(VSL_SS_TASK) :: task
  2084. INTEGER,INTENT(IN) :: rcov_storage
  2085. INTEGER,INTENT(IN) :: nparams
  2086. REAL(KIND=4),INTENT(IN) :: params(nparams)
  2087. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: rmean
  2088. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: rcov
  2089. end function
  2090. END INTERFACE
  2091. ! Editors to modify outliers detection parameters
  2092. INTERFACE
  2093. INTEGER FUNCTION vsldsseditoutliersdetection(task, &
  2094. & nparams, params, w)
  2095. IMPORT :: VSL_SS_TASK
  2096. TYPE(VSL_SS_TASK) :: task
  2097. INTEGER,INTENT(IN) :: nparams
  2098. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: params(nparams)
  2099. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: w
  2100. end function
  2101. END INTERFACE
  2102. INTERFACE
  2103. INTEGER FUNCTION vslssseditoutliersdetection(task, &
  2104. & nparams, params, w)
  2105. IMPORT :: VSL_SS_TASK
  2106. TYPE(VSL_SS_TASK) :: task
  2107. INTEGER,INTENT(IN) :: nparams
  2108. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: params(nparams)
  2109. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: w
  2110. end function
  2111. END INTERFACE
  2112. ! Editors to modify missing values parameters
  2113. INTERFACE
  2114. INTEGER FUNCTION vsldsseditmissingvalues(task, nparams, params, &
  2115. & init_estimates_n, init_estimates, prior_n, prior, &
  2116. & simul_missing_vals_n,simul_missing_vals, &
  2117. & estimates_n, estimates)
  2118. IMPORT :: VSL_SS_TASK
  2119. TYPE(VSL_SS_TASK) :: task
  2120. INTEGER,INTENT(IN) :: nparams
  2121. REAL(KIND=8),INTENT(IN) :: params(nparams)
  2122. INTEGER,INTENT(IN),OPTIONAL :: init_estimates_n
  2123. REAL(KIND=8),INTENT(IN), DIMENSION(*),OPTIONAL:: &
  2124. & init_estimates
  2125. INTEGER,INTENT(IN),OPTIONAL :: prior_n
  2126. REAL(KIND=8),INTENT(IN),DIMENSION(*),OPTIONAL :: prior
  2127. INTEGER,INTENT(IN),OPTIONAL :: simul_missing_vals_n
  2128. REAL(KIND=8),INTENT(IN),DIMENSION(*),OPTIONAL :: &
  2129. & simul_missing_vals
  2130. INTEGER,INTENT(IN),OPTIONAL :: estimates_n
  2131. REAL(KIND=8),INTENT(IN), DIMENSION(*), OPTIONAL :: &
  2132. & estimates
  2133. end function
  2134. END INTERFACE
  2135. INTERFACE
  2136. INTEGER FUNCTION vslssseditmissingvalues(task, nparams, params, &
  2137. & init_estimates_n, init_estimates, prior_n, prior, &
  2138. & simul_missing_vals_n,simul_missing_vals, &
  2139. & estimates_n, estimates)
  2140. IMPORT :: VSL_SS_TASK
  2141. TYPE(VSL_SS_TASK) :: task
  2142. INTEGER,INTENT(IN) :: nparams
  2143. REAL(KIND=4),INTENT(IN) :: params(nparams)
  2144. INTEGER,INTENT(IN),OPTIONAL :: init_estimates_n
  2145. REAL(KIND=4),INTENT(IN), DIMENSION(*),OPTIONAL:: &
  2146. & init_estimates
  2147. INTEGER,INTENT(IN),OPTIONAL :: prior_n
  2148. REAL(KIND=4),INTENT(IN),DIMENSION(*),OPTIONAL :: prior
  2149. INTEGER,INTENT(IN),OPTIONAL :: simul_missing_vals_n
  2150. REAL(KIND=4),INTENT(IN),DIMENSION(*),OPTIONAL :: &
  2151. & simul_missing_vals
  2152. INTEGER,INTENT(IN),OPTIONAL :: estimates_n
  2153. REAL(KIND=4),INTENT(IN), DIMENSION(*), OPTIONAL :: &
  2154. & estimates
  2155. end function
  2156. END INTERFACE
  2157. ! Editors to modify matrix parameterization
  2158. ! related parameters
  2159. INTERFACE
  2160. INTEGER FUNCTION vsldsseditcorparameterization (task, &
  2161. & cor, cor_storage, pcor, pcor_storage)
  2162. IMPORT :: VSL_SS_TASK
  2163. TYPE(VSL_SS_TASK) :: task
  2164. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: cor
  2165. INTEGER,INTENT(IN) :: cor_storage
  2166. REAL(KIND=8),DIMENSION(*),INTENT(IN) :: pcor
  2167. INTEGER,INTENT(IN) :: pcor_storage
  2168. end function
  2169. END INTERFACE
  2170. INTERFACE
  2171. INTEGER FUNCTION vslssseditcorparameterization (task, &
  2172. & cor, cor_storage, pcor, pcor_storage)
  2173. IMPORT :: VSL_SS_TASK
  2174. TYPE(VSL_SS_TASK) :: task
  2175. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: cor
  2176. INTEGER,INTENT(IN) :: cor_storage
  2177. REAL(KIND=4),DIMENSION(*),INTENT(IN) :: pcor
  2178. INTEGER,INTENT(IN) :: pcor_storage
  2179. end function
  2180. END INTERFACE
  2181. ! Task destructor
  2182. INTERFACE
  2183. INTEGER FUNCTION vslssdeletetask(task)
  2184. IMPORT :: VSL_SS_TASK
  2185. TYPE(VSL_SS_TASK) :: task
  2186. end function
  2187. END INTERFACE
  2188. end module onemkl_vsl_omp_offload_lp64