| ( 1 of 1 ) |
| United States Patent | 6,996,470 |
| Kamps | February 7, 2006 |
Various systems and methods of the present invention provide amorphous computing systems and methods for use thereof. In some cases, the amorphous computing systems include one or more amorphous hardware elements that are programmed under control of a computer processor such as, for example, an AMD™ or INTEL™ based personal computer. Portions of an algorithm can then be computed by the individual amorphous hardware elements that can be, as one example, an FPGA or some subset of hardware gates available on an FPGA. Methods can include a variety of computations including Wave Equations and Kirchhoff algorithms. Thus, in particular cases, the amorphous computing systems and methods for using such are applied to seismic imaging problems, as well as other problems.
| Inventors: | Kamps; Bill (Houston, TX) |
| Assignee: | MOAC LLC (Denver, CO) |
| Appl. No.: | 687371 |
| Filed: | October 15, 2003 |
| Current U.S. Class: | 702/17; 703/5 |
| Current Intern'l Class: | G06F 19/00 (20060101) |
| Field of Search: | 702/17,14,1,12,2 324/158.1 716/12 712/11 367/43 327/551 703/5,10 |
| 4286319 | Aug., 1981 | Membrino et al. | |
| 4351025 | Sep., 1982 | Hall, Jr. | |
| 4414624 | Nov., 1983 | Summer, Jr. et al. | |
| 4816993 | Mar., 1989 | Takahashi et al. | |
| 4843540 | Jun., 1989 | Stolfo. | |
| 5025369 | Jun., 1991 | Schwartz. | |
| 5198979 | Mar., 1993 | Moorhead et al. | |
| 5307496 | Apr., 1994 | Ichinose et al. | |
| 5361373 | Nov., 1994 | Gilson. | |
| 5404296 | Apr., 1995 | Moorhead. | |
| 5428783 | Jun., 1995 | Lake. | |
| 5430734 | Jul., 1995 | Gilson. | |
| 5537319 | Jul., 1996 | Schoen. | |
| 5550787 | Aug., 1996 | Rialan et al. | |
| 5600845 | Feb., 1997 | Gilson. | |
| 5657223 | Aug., 1997 | Juszczak et al. | |
| 5734829 | Mar., 1998 | Robinson. | |
| 5944779 | Aug., 1999 | Blum. | |
| 5991695 | Nov., 1999 | Wang et al. | |
| 5995904 | Nov., 1999 | Willen et al. | |
| 6049759 | Apr., 2000 | Etgen. | |
| 6057679 | May., 2000 | Slizynski et al. | |
| 6061730 | May., 2000 | Billings. | |
| 6112225 | Aug., 2000 | Kraft et al. | |
| 6115764 | Sep., 2000 | Chisholm et al. | |
| 6134599 | Oct., 2000 | Chiu et al. | |
| 6304916 | Oct., 2001 | Iwatsuki et al. | |
| 6330583 | Dec., 2001 | Reiffin. | |
| 6446007 | Sep., 2002 | Finn et al. | |
| 6496969 | Dec., 2002 | Roy et al. | |
| 6535940 | Mar., 2003 | Liu et al. | |
| 2003/0023576 | Jan., 2003 | Gilson. | |
| 2003/0028590 | Feb., 2003 | Gonzalez et al. | |
| 2003/0115096 | Jun., 2003 | Gilson. | |
| 2004/0225443 | Nov., 2004 | Kamps. | |
| 2005/0027455 | Feb., 2005 | Kamps. |
Announcement entitled: "PGS Debuts Seismic Processing System for UNIX/LINUX", (Cube Manager 2.50 Product Announcement), Communications of the ACM, Oct. 2000, vol. 43, No. 10, p. 55. Article entitled "NASA Langley Installs Next Generation Star Bridge Hypercomputer", Wasatch Digital IQ, Mar. 26, 2003, 1 page. Ashida, Yuzuru Abstract of "Data Processing of Reflection Seismic Data by Use of Neural Network", Journal of Applied Geophysics, Oct. 1996, vol. 35, No. 2-3, pp. 89-98. Barraez, D. et al., Abstract of "Modular Neural Networks for Seismic Tomography", Proceedings 16th International Conference on Pattern Recognition, IEEE Comput. Soc., Part vol. 3, 2003, pp. 407-410. Bohlen, T., Abstract of "Parallel 3D Viscoelastic Finite Difference Seismic Modeling.", Computers and Geosciences, Oct. 2002, vol. 28, No. 8, pp. 887-899., Publisher: Elsevier, UK. Ewing, R.E. et al, Abstract of "Distributed Computation of Wave Propagation Models Using PVM.", IEEE Parallel & Distributed Technology, vol. 2, no.1, Spring 1994, pp. 26-31, USA. Fithian, W. et al. "Iterative Matrix Equation Solver for a Reconfigurable FPGA-Based Hypercomputer®" Star Bridge Systems, Inc., Sep. 5, 2002, 14 pages. Gazdag. Jeno and Wang, Hsuan-Heng; Abstract of "Concurrent Computing by Sequential Staging of Tasks", IBM Systems Journal, Dec. 1989, vol. 28, No. 4, p. 646 (15). Gilson, Kent et al. "New Methodology For FPGA Based Designs Offers Significant Benefits over HDL Based Methods", Jan. 2002, 5 pages. Hoogerbrugge, P. et al., Abstract of "Experiences With Networked Parallel Computing", Concurrency Practice & Experience, vol. 7, No. 1, Feb. 1995 pp. 1-16. UK. Hunter, P "Oiling the Wheels", Computer Weekly, Jun. 7, 2001, p. 31 (Full Text: 2001 Reed Elsevier Business Publishing, Ltd., UK,) (6 pages). Jian, Lu et al. "A Hierarchical Framework for Parallel Seismic Applications", Association for Computing Machinery, Inc., Communications of the ACM, Oct. 2000, vol. 43, (6 pages). Kofakis, P. & Louis, J., "Distributed Parallel Implementation of Seismic Algorithms.", Mathematical Methods in Geophysical Imaging III, Proceedings of Spie- The International Society for Optical Engineering, vol. 2571, 1995, pp. 229-238, USA. Kolbasuk McGee, Marianne, "Mobil Leaves Cray for Parallel Universe.", InformationWeek, Oct. 11, 1993, No. 446, p. 62. Lyons, Daniel, "Super-Cheap Supercomputing?" Forbes.com website, Mar. 25, 2003, 4 pages. Niccanna, C. & Bean, CJ, Abstract of "Larger Grids and Shorter Wall-clock Times on a Parallel Virtual Machine (PVM)—an Example Using a Finite Difference Wave Simulation Algorithm", GeoComputation 96—1st International Conference on GeoComputation, 1996, Univ. Leeds, Part vol. 2, pp. 661-662. Niccanna, C. & Bean, CJ, Abstract of "The Use of a Parallel Virtual Machine (PVM) for Finite-Difference Wave Simulations.", Computers & Geosciences, vol. 23, No. 7, Aug. 1997, pp. 771-783, Publisher: Elsevier, UK. Sen, V., Sen, M.K., & Stoffa, P.L., "PVM Based 3-D Kirchhoff Depth Migration Using Dynamically Computed Travel-Times: An Application in Seismic Data Processing.", Parallel Computing, Mar. 1999, vol. 25, No. 3, pp. 231-248, Publisher: Elsevier, Netherlands. Shimshoni, Y. et al., "Classification of Seismic Signals by Integrating Ensembles of Neural Networks", IEEE Transactions on Signal Processing, vol. 46, No. 5, May 1998, pp. 1194-1201. (Abstract) (1 page). Singleterry, R. et al. "Field-Programmable Gate Array Computer in Structural Analysis: An Initial Exploration", American Institute of Aeronautics and Astronautics, Paper No. AIAA-2002-1761, 11 pages. Stammler, K. Abstract of "Seismic Handler-programmable Multichannel Data Handler for Interactive and Automatic Processing of Seismological Analyses", Computers & Geosciences, vol. 19, No. 2, Feb. 1993, pp. 135-140. UK. Thomson, Kimball, "From the Basement to the Stars: SBS Unleashes VIVA", Digital iQ, Apr. 2001, pp. 58-63. |
| void filter—trace( int npairs, int nstart, int nend, float *coeff—array, float |
| *trace—in, float *trace—out); |
| void bfdesign (float fpass, float apass, float fstop, float astop,int |
| *npoles, float |
| *f3db); |
| main( ) { |
| int i,npoles,npairs,jpair,filt—indx; |
| float fpass,apass,fstop,astop,f3db,coeff—array[50][30*3], |
| a,b1,b2,r,theta,scale,trace—in[1000],trace—out[1000]; |
| for(i=0; i< 50; i++) { /* Assign freq, nyquist = .5 */ |
| fpass = .50 - (float)i * .01; | |
| apass = .99; | |
| fstop = MIN(fpass + .05,.499); | |
| astop = .05; | |
| bfdesign ( fpass, apass, fstop, astop, &npoles, &f3db); | |
| if( npoles % 2 > 0) | |
| npoles ++; | |
| printf("fpass %f fstop %f npoles %d f3db |
| %f\n",fpass,fstop,npoles,f3db); |
| npairs = npoles / 2; | |
| coeff—array[i][0] = npairs; | |
| r = 2.0*tan(PI*fabs((double)f3db)); | |
| for(jpair=0; jpair< npairs; jpair++){ |
| theta = PI*(2*jpair+1)/(2*npoles); | |
| scale = 4.0+4.0*r*sin(theta)+r*r; | |
| a = r*r/scale; | |
| b1 = (2.0*r*r-8.0)/scale; | |
| b2 = (4.0-4.0*r*sin(theta)+r*r)/scale; | |
| coeff—array[i][jpair*3+1] = a; | |
| coeff—array[i][jpair*3+2] = b1; | |
| coeff—array[i][jpair+3+3] = b2;} } |
| filt—indx = 10; | |
| filter—trace( coeff—array[10][0], 600, 640, coeff—array[10], |
| trace—in, trace—out) } |
| void filter—trace( int npairs, int nstart, int nend, float *coeff—array, float |
| *trace—in, float *trace—out) |
| { |
| int j,jpair; |
| float a,b1,b2,pjm2,pjm1,pj,qjm2,qjm1; |
| for (j=nstart; j<nend; j++) |
| trace—out[j] = trace—in[j]; |
| for(jpair=0; jpair < npairs; jpair ++) { |
| a = coeff—array[jpair*3+1]; | |
| b1 = coeff—array[jpair*3+2]; | |
| b2 = coeff—array[jpair*3+3]; | |
| pjm1 = 0.0; | |
| pj = 0.0; | |
| qjm2 = 0.0; | |
| qjm1 = 0.0; | |
| for (j=nstart; j<nend; j++){ |
| pjm2 = pjm1; | |
| pjm1 = pj; | |
| pj = trace—out[j]; | |
| trace—out[j] = a*(pj+2.0*pjm1+pjm2)-b1*qjm1-b2*qjm2; | |
| qjm2 = qjm1; | |
| qjm1 = trace—out[j];}}return;} | |
| void mksinc—0( float d, int lsinc, float *sinc) { |
| int j; | |
| double s[20],a[20],c[20],work[20],fmax; | |
| fmax = 0.066+0.265*log((double)1sinc); | |
| fmax = (fmax<1.0)?fmax:1.0; | |
| for (j=0; j<1sinc; j++) { |
| a[j] = dsinc(fmax*j); | |
| c[j] = dsinc(fmax*(1sinc/2-j-1+d));} | |
| stoepd(1sinc,a,c,s,work); | |
| for (j=0;j<1sinc; j++) | |
| sinc[j] = s[j];} | |
| void stoepd (int n, double *r, double *g, double *f, double *a){ |
| int i,j; | |
| double v,e,c,w,bot; | |
| if(r[0] == 0.0) return; | |
| a[0] = 1.0; | |
| v = r[0]; | |
| f[0] = g[0]/r[0]; | |
| for (j=1; j<n; j++){ | |
| /*-----------------------------------------* | |
| * solve Ra=v as in Claerbout, FGDP, p. 57 * | |
| *-----------------------------------------*/ | |
| a[j] = 0.0; | |
| f[j] = 0.0; | |
| for (i=0,e=0.0; i<j; i++) |
| e += a[i]*r[j-i]; |
| c = e/v; | |
| v -= c*e; | |
| for (i=0; i<=j/2; i++) { |
| bot = a[j-i]-c*a[i]; | |
| a[i] -= c*a[j-i]; | |
| a[j-i] = bot;} |
| /*------------------------------------------------* | |
| * use a and v above to get f[i], i = 0,1,2,...,j * | |
| *------------------------------------------------*/ |
| for (i=0,w=0.0; i<j; i++) | |
| w += f[i]*r[j-i]; | |
| c = (w-g[j])/v; | |
| for (i=0; i<=j; i++) |
| f[i] -= c*a[j-i];}} | |
| float interp—samp—sinc( float *trace, int samp—base, float frac, int lsinc, |
| int nsamp) { |
| int j,lsinc—h,indx; | |
| float table[20],sum; | |
| frac = frac * -1.0; | |
| mksinc—0( frac, lsinc, table); | |
| if( samp—base + 1 - lsinc—h >= 0 && samp—base + 1 + lsinc—h < |
| nsamp) { |
| sum = 0; | |
| for(j=0; j< lsinc; j++) | |
| sum += table[j] * trace[samp—base+j+1-lsinc—h]; } |
| else { |
| sum = 0; | |
| for(j=0; j< lsinc; j++) { | |
| indx = MAX(0,samp—base+j+1-lsinc—h); | |
| indx = MIN(indx, nsamp-1); | |
| sum += table[j] * trace[indx];}} return sum;} | |
| Outer loop over output z grid locations (depth) |
| Center loop over output x grid locations |
| Inner loop over output y grid locations |
| Update the differencing equations | |
| Tri-diagonal matrix solver | |
| Thin lens adjustment ( vertical shift for changing | |
| velocity gradient) |
| End of all three loops | |
| Update the output image traces. | |