Annotation of OpenXM/doc/Papers/dagb-noro.tex, Revision 1.1
1.1 ! noro 1: % $OpenXM$
! 2: \setlength{\parskip}{10pt}
! 3:
! 4: \begin{slide}{}
! 5: \fbox{A computer algebra system Risa/Asir}
! 6:
! 7: \begin{itemize}
! 8: \item Old style software for polynomial computation
! 9:
! 10: \begin{itemize}
! 11: \item Domain specification is not necessary prior to computation
! 12: \item automatic conversion of inputs into internal canonical forms
! 13: \end{itemize}
! 14:
! 15: \item User language with C-like syntax
! 16:
! 17: \begin{itemize}
! 18: \item No type declaration of variables
! 19: \item Builtin debugger for user programs
! 20: \end{itemize}
! 21:
! 22: \item Open source
! 23:
! 24: \begin{itemize}
! 25: \item Whole source tree is available via CVS
! 26: \end{itemize}
! 27:
! 28: \item OpenXM interface
! 29:
! 30: \begin{itemize}
! 31: \item As a client : can call procedures on other OpenXM servers
! 32: \item As a server : offers all its functionalities to OpenXM clients
! 33: \item As a library : OpenXM functionality is available via subroutine calls
! 34: \end{itemize}
! 35: \end{itemize}
! 36: \end{slide}
! 37:
! 38: \begin{slide}{}
! 39: \fbox{Major functionalities}
! 40:
! 41: \begin{itemize}
! 42: \item Fundamental polynomial arithmetics
! 43:
! 44: \begin{itemize}
! 45: \item Internal form of a polynomial : recursive representaion or distributed
! 46: representation
! 47: \end{itemize}
! 48:
! 49: \item Polynomial factorization
! 50:
! 51: \begin{itemize}
! 52: \item Univariate factorization over the rationals, algebraic number fields and various finite fields
! 53:
! 54: \item Multivariate factorization over the rationals
! 55: \end{itemize}
! 56:
! 57: \item Groebner basis computation
! 58:
! 59: \begin{itemize}
! 60: \item Buchberger and $F_4$ algorithm
! 61:
! 62: \item Change of ordering/RUR of 0-dimensional ideals
! 63:
! 64: \item Primary ideal decomposition
! 65:
! 66: \item Computation of $b$-function
! 67: \end{itemize}
! 68:
! 69: \item PARI library interface
! 70:
! 71: \item Paralell distributed computation under OpenXM
! 72: \end{itemize}
! 73: \end{slide}
! 74:
! 75: \begin{slide}{}
! 76: \fbox{History of development : ---1994}
! 77:
! 78: \begin{itemize}
! 79: \item --1989
! 80:
! 81: Several subroutines were developed for a Prolog program.
! 82:
! 83: \item 1989--1992
! 84:
! 85: \begin{itemize}
! 86: \item Reconfigured as Risa/Asir with the parser and Boehm's conservative GC.
! 87:
! 88: \item Developed univariate and multivariate factorizers over the rationals.
! 89: \end{itemize}
! 90:
! 91: \item 1992--1994
! 92:
! 93: \begin{itemize}
! 94: \item Started implementation of Groebner basis computation
! 95:
! 96: User language $\Rightarrow$ rewritten in C (by Murao) $\Rightarrow$
! 97: trace lifting
! 98:
! 99: \item Univariate factorization over algebraic number fields
! 100:
! 101: Intensive use of successive extension, non-squarefree norms
! 102: \end{itemize}
! 103: \end{itemize}
! 104:
! 105: \end{slide}
! 106:
! 107: \begin{slide}{}
! 108: \fbox{History of development : 1994-1996}
! 109:
! 110: \begin{itemize}
! 111: \item Free distribution of binary versions
! 112:
! 113: \item Primary ideal decomposition
! 114:
! 115: \begin{itemize}
! 116: \item Shimoyama-Yokoyama algorithm
! 117: \end{itemize}
! 118:
! 119: \item Improvement of Buchberger algorithm
! 120:
! 121: \begin{itemize}
! 122: \item Trace lifting+homogenization
! 123:
! 124: \item Omitting check by compatible prime
! 125:
! 126: \item Modular change of ordering, Modular RUR
! 127:
! 128: \item Noro met Faug\`ere at RISC-Linz and he mentioned $F_4$.
! 129: \end{itemize}
! 130: \end{itemize}
! 131:
! 132: \end{slide}
! 133:
! 134: \begin{slide}{}
! 135: \fbox{History of development : 1996-1998}
! 136:
! 137: \begin{itemize}
! 138: \item Distributed compuatation
! 139:
! 140: \begin{itemize}
! 141: \item A prototype of OpenXM
! 142: \end{itemize}
! 143:
! 144: \item Improvement of Buchberger algorithm
! 145:
! 146: \begin{itemize}
! 147: \item Content reduction during nomal form computation
! 148:
! 149: \item Its parallelization by the above facility
! 150:
! 151: \item Application : computation of odd order replicable functions
! 152:
! 153: Risa/Asir : it took 5days to compute a DRL basis ({\it McKay})
! 154:
! 155: From Faug\`ere : computation of the DRL basis 53sec
! 156: \end{itemize}
! 157:
! 158:
! 159: \item Univariate factorization over large finite fields
! 160:
! 161: \begin{itemize}
! 162: \item To implement Schoof-Elkies-Atkin algorithm
! 163:
! 164: Counting rational points on elliptic curves --- not free
! 165:
! 166: But related functions are freely available
! 167: \end{itemize}
! 168: \end{itemize}
! 169:
! 170: \end{slide}
! 171:
! 172: \begin{slide}{}
! 173: \fbox{History of development : 1998-2000}
! 174: \begin{itemize}
! 175: \item OpenXM
! 176:
! 177: \begin{itemize}
! 178: \item OpenXM specification was written by Noro and Takayama
! 179:
! 180: \item Functions for distributed computation were rewritten
! 181: \end{itemize}
! 182:
! 183: \item Risa/Asir on Windows
! 184:
! 185: \begin{itemize}
! 186: \item Requirement from a company for which Noro worked
! 187:
! 188: Written in Visual C++
! 189: \end{itemize}
! 190:
! 191: \item Test implementation of $F_4$
! 192:
! 193: \begin{itemize}
! 194: \item Over $GF(p)$ : pretty good
! 195:
! 196: \item Over the rationals : not so good except for {\it McKay}
! 197: \end{itemize}
! 198: \end{itemize}
! 199: \end{slide}
! 200:
! 201: \begin{slide}{}
! 202: \fbox{History of development : 2000-current}
! 203: \begin{itemize}
! 204: \item The source code is freely available
! 205:
! 206: \begin{itemize}
! 207: \item Noro moved from Fujitsu to Kobe university.
! 208:
! 209: \item Fujitsu kindly permitted to make Risa/Asir open source.
! 210: \end{itemize}
! 211:
! 212: \item OpenXM
! 213:
! 214: \begin{itemize}
! 215: \item Revising the specification : OX-RFC100, 101, (102)
! 216:
! 217: \item OX-RFC102 : ommunications between servers via MPI
! 218: \end{itemize}
! 219:
! 220: \item Rings of differential operators
! 221:
! 222: \begin{itemize}
! 223: \item Buchberger algorithm
! 224:
! 225: \item $b$-function computation
! 226:
! 227: Minimal polynomial computation by modular method
! 228: \end{itemize}
! 229: \end{itemize}
! 230:
! 231: \end{slide}
! 232:
! 233: \begin{slide}{}
! 234: \fbox{Status of each component --- Factorizer}
! 235:
! 236: \begin{itemize}
! 237: \item 10 years ago
! 238:
! 239: its performace was fine compared with existing software
! 240: like REDUCE, Maple, Mathematica.
! 241:
! 242: \item 4 years ago
! 243:
! 244: Univarate factorization over algebraic number fields was
! 245: still fine because of some tricks on factoring polynomials
! 246: derived from norms.
! 247:
! 248: \item Current
! 249:
! 250: Multivariate : not so bad
! 251:
! 252: Univariate : completely obsolete by M. van Hoeij's new algorithm
! 253: \end{itemize}
! 254:
! 255: \end{slide}
! 256:
! 257: \begin{slide}{}
! 258: \fbox{Status of each component --- Groebner basis related functions}
! 259:
! 260: \begin{itemize}
! 261: \item 8 years ago
! 262:
! 263: The performace was poor with only the sugar strategy.
! 264:
! 265: \item 7 years ago
! 266:
! 267: Rather fine with trace lifting but Faug\`ere's (old)Gb was more
! 268: efficient.
! 269:
! 270: Homogenization+trace lifting made it possible to compute
! 271: wider range of Groebner bases.
! 272:
! 273: \item 4 years ago
! 274:
! 275: Modular RUR was comparable with Rouillier's implementation.
! 276:
! 277: \item Current
! 278:
! 279: FGb seems much more efficient than our $F_4$ implementation.
! 280:
! 281: Singular's Groebner basis computation is also several times
! 282: faster than Risa/Asir, because Singular seems to have efficient
! 283: monomial and polynomial representation.
! 284:
! 285: \end{itemize}
! 286: \end{slide}
! 287:
! 288: \begin{slide}{}
! 289: \fbox{Ground fields}
! 290:
! 291: \begin{itemize}
! 292: \item The rational number field
! 293: \item Algebraic number fields
! 294:
! 295: represented by successive extensions
! 296: \item Finite fields
! 297: \begin{itemize}
! 298: \item $GF(p)$ ($p<2^{30}$); represented by a single word
! 299: \item $GF(p^n)$ ($p^n < 2^{20}$); represented by a primitive root
! 300: \item $GF(2^n)$; represented by a bit string
! 301: \item $GF(p)$ ($p$ : arbitrary prime)
! 302: \item $GF(p^n)$ ($p$ : arbitrary odd prime)
! 303: \end{itemize}
! 304:
! 305: \item Real and complex number fields
! 306:
! 307: \begin{itemize}
! 308: \item Double float
! 309: \item PARI bigfloat
! 310: \end{itemize}
! 311:
! 312: \end{itemize}
! 313: \end{slide}
! 314:
! 315: \begin{slide}{}
! 316: \fbox{Polynomial factorization}
! 317: \begin{itemize}
! 318: \item Univariate factorization
! 319:
! 320: \begin{itemize}
! 321: \item Over the rationals
! 322:
! 323: Berlekamp-Zassenhaus
! 324:
! 325: (classical; knapsack has not yet implemented)
! 326:
! 327: \item Over algebraic number fields
! 328:
! 329: Trager's algorithm + some improvement
! 330:
! 331: \item Over finite fieds
! 332:
! 333: DDF + Cantor-Zassenhaus; FFT for large finite fields
! 334: \end{itemize}
! 335:
! 336: \item Multivariate factorization
! 337:
! 338: \begin{itemize}
! 339: \item Over the rationals
! 340:
! 341: Classical EZ algorithm
! 342:
! 343: \item Over finite fieds
! 344:
! 345: Modified Bernardin square free, bivariate Hensel
! 346: \end{itemize}
! 347:
! 348: \end{itemize}
! 349: \end{slide}
! 350:
! 351: \begin{slide}{}
! 352: \fbox{Groebner basis computation --- Buchberger algorithm}
! 353: \begin{itemize}
! 354: \item Polynomial rings
! 355: \begin{itemize}
! 356: \item Over finite fields
! 357:
! 358: Any finite field is available as a ground field
! 359:
! 360: \item Over the rationals
! 361:
! 362: Guess of a groebner basis by detecting zero reduction by modular computation
! 363: + check (trace lifting)
! 364:
! 365: Homogenization+guess+dehomogenization+check
! 366: \end{itemize}
! 367:
! 368: \item Rings of differential operators
! 369:
! 370: \begin{itemize}
! 371: \item Groebner basis of a left ideal
! 372:
! 373: An efficient implementation of Leibniz rule
! 374: \end{itemize}
! 375:
! 376: \end{itemize}
! 377: \end{slide}
! 378:
! 379: \begin{slide}{}
! 380: \fbox{$F_4$ algorithm}
! 381: \begin{itemize}
! 382: \item Over small finite fields ($GF(p)$, $p < 2^{30}$)
! 383: \begin{itemize}
! 384: \item More efficient than Buchberger algorithm
! 385:
! 386: but less efficient than FGb by Faugere
! 387: \end{itemize}
! 388:
! 389: \item Over the rationals
! 390:
! 391: \begin{itemize}
! 392: \item Very naive implementation
! 393:
! 394: \item Less efficient than Buchberger algorithm
! 395:
! 396: except for one example
! 397: \end{itemize}
! 398:
! 399: \end{itemize}
! 400: \end{slide}
! 401:
! 402: \begin{slide}{}
! 403: \fbox{Change of ordering for zero-dimimensional ideals}
! 404:
! 405: \begin{itemize}
! 406: \item Any ordering to lex ordering
! 407:
! 408: \begin{itemize}
! 409: \item Modular change of ordering
! 410:
! 411: Guess of the support by modular FGLM
! 412:
! 413: + solving linear systems by Hensel lifting
! 414:
! 415: \end{itemize}
! 416:
! 417: \item RUR (generalized shape lemma)
! 418:
! 419: \begin{itemize}
! 420: \item Modular RUR (only implemented on the shape base case)
! 421:
! 422: Almost the same as modular change of ordering
! 423: \end{itemize}
! 424:
! 425: \end{itemize}
! 426: \end{slide}
! 427:
! 428: \begin{slide}{}
! 429: \fbox{Primary decomposition --- Shimoyama-Yokoyama algorithm}
! 430:
! 431: \begin{itemize}
! 432: \item Only implemented over the rationals
! 433:
! 434: Finite field version will soon be available
! 435:
! 436: \item Pseudo primary ideal
! 437:
! 438: An ideal whose radical is prime
! 439:
! 440: \item Prime decomp. of the radical $\Rightarrow$ pseudo primary decomp.
! 441:
! 442: \item Extraction of embedded components
! 443:
! 444: \end{itemize}
! 445:
! 446: \end{slide}
! 447:
! 448: \begin{slide}{}
! 449: \fbox{Computation of $b$-function}
! 450:
! 451: $D$ : the ring of differential operators
! 452:
! 453: $b(s)$ : a polynomial of the smallest degree s.t.
! 454: there exists $P(s) \in D[s]$, $P(s)f^{s+1}=b(s)f^s$
! 455:
! 456: $b(s)$ : $b$-function of a polynomial $f$
! 457:
! 458: $\Rightarrow$ $b(s)$ can be computed by Oaku's algorithm
! 459:
! 460: On Risa/Asir : $b(s)$ is computed by
! 461:
! 462: A groebner basis $\Rightarrow$ guess of $\deg(b(s))$ by modular
! 463: computation $\Rightarrow$ solving a linear system
! 464: \end{slide}
! 465:
! 466: \begin{slide}{}
! 467: \fbox{Interface to PARI library}
! 468:
! 469: \begin{itemize}
! 470: \item Data conversion
! 471:
! 472: \begin{itemize}
! 473:
! 474: \item Only primitive data can be passed to PARI
! 475:
! 476: Rational number, bignum, bigfloat, polynomial,
! 477: vector, matrix
! 478:
! 479: \item Results are converted to Risa objects
! 480:
! 481: \end{itemize}
! 482:
! 483: \item Evaluation of transcendental functions
! 484:
! 485: \begin{itemize}
! 486: \item Most of univariate functions in PARI can be
! 487: evaluated by {\tt eval()}
! 488: \end{itemize}
! 489:
! 490: \item Calling PARI functions
! 491:
! 492: \begin{itemize}
! 493: \item One can call PARI functions by {\tt pari({\it parifunction},{\it args})}
! 494:
! 495: The knapsack factorization is available via {\tt pari(factor,{\it poly})}
! 496: \end{itemize}
! 497:
! 498:
! 499: \end{itemize}
! 500: \end{slide}
! 501:
! 502: \begin{slide}{}
! 503: \fbox{OpenXM}
! 504:
! 505: \begin{itemize}
! 506: \item An environment for parallel distributed computation
! 507:
! 508: Both for interactive, non-interactive environment
! 509:
! 510: \item Message passing
! 511:
! 512: OX (OpenXM) message : command and data
! 513:
! 514: \item Hybrid command execution
! 515:
! 516: \begin{itemize}
! 517: \item Stack machine command
! 518:
! 519: push, pop, function execution, $\ldots$
! 520:
! 521: \item accepts its own command sequences
! 522:
! 523: {\tt execute\_string} --- easy to use
! 524: \end{itemize}
! 525:
! 526: \item Data is represented as CMO
! 527:
! 528: CMO --- Common Mathematical Object format
! 529: \end{itemize}
! 530: \end{slide}
! 531:
! 532: \begin{slide}{}
! 533: \fbox{OpenXM server interface in Risa/Asir}
! 534:
! 535: \begin{itemize}
! 536: \item TCP/IP stream
! 537:
! 538: \begin{itemize}
! 539: \item Launcher
! 540:
! 541: A client executes a launcher on a host.
! 542:
! 543: The launcher launches a server on the same host.
! 544:
! 545: \item Server
! 546:
! 547: A server reads from the descriptor 3, write to the descriptor 4.
! 548:
! 549: \end{itemize}
! 550:
! 551: \item Subroutine call
! 552:
! 553: Risa/Asir subroutine library provides interfaces corresponding to
! 554: pushing and popping data and executing stack commands.
! 555: \end{itemize}
! 556: \end{slide}
! 557:
! 558: \begin{slide}{}
! 559: \fbox{OpenXM client interface in Risa/Asir}
! 560:
! 561: \begin{itemize}
! 562: \item Primitive interface functions
! 563:
! 564: Pushing and popping data, sending commands etc.
! 565:
! 566: \item Convenient functions
! 567:
! 568: Launching servers, calling remote functions,
! 569: interrupting remote executions etc.
! 570:
! 571: \item Parallel distributed computation is easy
! 572:
! 573: Simple parallelization is practically important
! 574:
! 575: Competitive computation is easily realized
! 576: \end{itemize}
! 577: \end{slide}
! 578:
! 579:
! 580: \begin{slide}{}
! 581: \fbox{CMO = Serialized representation of mathematical object}
! 582:
! 583: \begin{itemize}
! 584: \item primitive data
! 585: \begin{eqnarray*}
! 586: \mbox{Integer32} &:& ({\tt CMO\_INT32}, {\sl int32}\ \mbox{n}) \\
! 587: \mbox{Cstring}&:& ({\tt CMO\_STRING},{\sl int32}\, \mbox{ n}, {\sl string}\, \mbox{s}) \\
! 588: \mbox{List} &:& ({\tt CMO\_LIST}, {\sl int32}\, len, ob[0], \ldots,ob[m-1])
! 589: \end{eqnarray*}
! 590:
! 591: \item numbers and polynomials
! 592: \begin{eqnarray*}
! 593: \mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots
! 594: {\sl byte}\, \mbox{a[$|$f$|$]} ) \\
! 595: \mbox{Monomial32}&:& ({\tt CMO\_MONOMIAL32}, n, \mbox{e[1]}, \ldots, \mbox{e[n]}, \mbox{Coef}) \\
! 596: \mbox{Coef}&:& \mbox{ZZ} | \mbox{Integer32} \\
! 597: \mbox{Dpolynomial}&:& ({\tt CMO\_DISTRIBUTED\_POLYNOMIAL},\\
! 598: & & m, \mbox{DringDefinition}, \mbox{Monomial32}, \ldots)\\
! 599: \mbox{DringDefinition}
! 600: &:& \mbox{DMS of N variables} \\
! 601: & & ({\tt CMO\_RING\_BY\_NAME}, name) \\
! 602: & & ({\tt CMO\_DMS\_GENERIC}) \\
! 603: \end{eqnarray*}
! 604: \end{itemize}
! 605: \end{slide}
! 606:
! 607: \begin{slide}{}
! 608: \fbox{Stack based communication}
! 609:
! 610: \begin{itemize}
! 611: \item Data arrived a client
! 612:
! 613: Pushed to the stack
! 614:
! 615: \item Result
! 616:
! 617: Pushd to the stack
! 618:
! 619: Written to the stream when requested by a command
! 620:
! 621: \item The reason why we use the stack
! 622:
! 623: \begin{itemize}
! 624: \item Stack = I/O buffer for (possibly large) objects
! 625:
! 626: Multiple requests can be sent before their exection
! 627:
! 628: A server does not get stuck in sending results
! 629: \end{itemize}
! 630: \end{itemize}
! 631: \end{slide}
! 632:
! 633: \begin{slide}{}
! 634: \fbox{Executing functions on a server (I) --- {\tt SM\_executeFunction}}
! 635:
! 636: \begin{enumerate}
! 637: \item (C $\rightarrow$ S) Arguments are sent in binary encoded form.
! 638: \item (C $\rightarrow$ S) The number of aruments is sent as {\sl Integer32}.
! 639: \item (C $\rightarrow$ S) A function name is sent as {\sl Cstring}.
! 640: \item (C $\rightarrow$ S) A command {\tt SM\_executeFunction} is sent.
! 641: \item The result is pushed to the stack.
! 642: \item (C $\rightarrow$ S) A command {\tt SM\_popCMO} is sent.
! 643: \item (S $\rightarrow$ C) The result is sent in binary encoded form.
! 644: \end{enumerate}
! 645:
! 646: $\Rightarrow$ Communication is fast, but functions for binary data
! 647: conversion are necessary.
! 648: \end{slide}
! 649:
! 650: \begin{slide}{}
! 651: \fbox{Executing functions on a server (II) --- {\tt SM\_executeString}}
! 652:
! 653: \begin{enumerate}
! 654: \item (C $\rightarrow$ S) A character string represeting a request in a server's
! 655: user language is sent as {\sl Cstring}.
! 656: \item (C $\rightarrow$ S) A command {\tt SM\_executeString} is sent.
! 657: \item The result is pushed to the stack.
! 658: \item (C $\rightarrow$ S) A command {\tt SM\_popString} is sent.
! 659: \item (S $\rightarrow$ C) The result is sent in readable form.
! 660: \end{enumerate}
! 661:
! 662: $\Rightarrow$ Communication may be slow, but the client parser may be
! 663: enough to read the result.
! 664: \end{slide}
! 665:
! 666: \begin{slide}{}
! 667: \fbox{Example of distributed computation --- $F_4$ vs. $Buchberger$ }
! 668:
! 669: \begin{verbatim}
! 670: /* competitive Gbase computation over GF(M) */
! 671: /* Cf. A.28 in SINGULAR Manual */
! 672: /* Process list is specified as an option : grvsf4(...|proc=P) */
! 673: def grvsf4(G,V,M,O)
! 674: {
! 675: P = getopt(proc);
! 676: if ( type(P) == -1 ) return dp_f4_mod_main(G,V,M,O);
! 677: P0 = P[0]; P1 = P[1]; P = [P0,P1];
! 678: map(ox_reset,P);
! 679: ox_cmo_rpc(P0,"dp_f4_mod_main",G,V,M,O);
! 680: ox_cmo_rpc(P1,"dp_gr_mod_main",G,V,0,M,O);
! 681: map(ox_push_cmd,P,262); /* 262 = OX_popCMO */
! 682: F = ox_select(P); R = ox_get(F[0]);
! 683: if ( F[0] == P0 ) { Win = "F4"; Lose = P1;}
! 684: else { Win = "Buchberger"; Lose = P0; }
! 685: ox_reset(Lose); /* simply resets the loser */
! 686: return [Win,R];
! 687: }
! 688: \end{verbatim}
! 689:
! 690: \end{slide}
! 691:
! 692: \begin{slide}{}
! 693: \end{slide}
! 694:
! 695: \begin{slide}{}
! 696: \end{slide}
! 697:
! 698: \begin{slide}{}
! 699: \end{slide}
! 700:
! 701: \begin{slide}{}
! 702: \end{slide}
! 703:
! 704: \begin{slide}{}
! 705: \end{slide}
! 706:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>