Fortran (veya C) kodunu ayrıştırarak Fortran (veya C) işlevlerinin aralık uzantılarını oluşturabilen bir araç var mı?


13

Doktora tezimdeki vaka çalışmaları, CHEMKIN-II'de Fortran altyordamlarının aralık uzantılarına sahip olmamı gerektiriyor (bağlantı için özür dilerim; artık Sandia Ulusal Laboratuvarı tarafından dağıtılmayan bir paket için bulabileceğim en iyisi). CHEMKIN-II yanma kimyasında kullanılan bir kimya paketidir; yanmada kullanılan standart paket olduğundan, orada farklı bir paket kullanamam (veya daha doğrusu tercih etmemeyi tercih ederim).

Gerekli aralık uzantılarını elde etmek için, şirket içinde geliştirilen DAEPACK adlı bir araç kullanıyorum. Bir kaç yıl önce 32 bit işletim sisteminde (gcc 2.95'e karşılık gelen bir libstdc sürümü ile) ihtiyaç duyduğum CHEMKIN-II altyordamlarının gerekli aralık uzantılarını oluşturabildiğim eski ikili dosyalar, ancak o zamandan beri düştü ve kullanmak için muazzam bir sıkıntı olurdu (çünkü kullandığım diğer tüm yazılımların 32 bit sürümlerini bulmak zorunda kalacaktım). Bu paket için kaynak kodu da tescillidir, ancak başlangıçta MIT'de geliştirildiğinden ve MIT'de çalıştığım için, (çok çaba sarf ettikten sonra) DAEPACK için kaynak kodunu alabildim. Sahip olduğum kaynak kodunu kullanarak, Linux'un 64 bit sürümleri ve gcc 4.xx'e karşılık gelen libstdc sürümleri ile uyumlu bir DAEPACK sürümünü derleyebildim. Ancak, bu kaynak kodun eski olduğunu, tezimi tamamlamak için gereken aralık uzantısı kodunu başarıyla oluşturmayan bir yürütülebilir dosya olarak derler. Kaynak kodunu düzeltme konusunda yardım almak için geliştiriciyle iletişime geçtim, ancak geliştiriciyle önceki temastan, kaynak kodunu düzeltmesinin zaman alacağını biliyorum.

İşte büyük sorun: mezun olmam gerekene kadar 6 ayım kaldı çünkü param tükendi. Geldiğiniz yerde doktora tezimi başarıyla tamamlayabilmem için DAEPACK'i hızlı bir şekilde düzeltmek için geliştiriciye güvenemiyorum.

Aşağıdakileri yapan bir pakete ihtiyacım var:

  • Aralık genişletmeleri, Taylor modelleri (aralık aritmetiği kullanarak) ve neredeyse keyfi Fortran 77 kodunun türevlerini üretir; DAEPACK tarafından ayrıştırılmayan yapıların yalnızca DOdöngüler ve IFifadeler olduğunu düşünüyorum. Taylor modellerine ihtiyacım olduğundan, kodun otomatik farklılaşma (AD) özelliğine de sahip olması gerekir.
  • Bu aralık uzantılarını ve Taylor modellerini Fortran 77 kodunun kaynaktan kaynağa çevirisiyle üretir (yani, aralık uzantılarını ve Taylor modellerini hesaplayan kaynak kodunu oluşturmak için kaynak kodunu bir derleyici gibi ayrıştırır).

Bir tutamda, yukarıdaki iki şeyi C kodu için Fortran 77 kodu yerine yapan yazılımı kullanabilir ve sonra her şeyi geçirebilirim f2c. Gerçekten bu şekilde yapmamayı tercih ederim, çünkü her şeyi geçip f2cgeçmeyeceğimi bile bilmiyorum, ama oldukça çaresizim.

Umutsuz bir doktora öğrencisine yardım edebilir misiniz?


Bazı olası önerileri tahmin etmek için, zaman kısıtlamaları göz önüne alındığında, benim için işe yaramayacak yaklaşımlar şunlardır:

  • DAEPACK'in çalışmasını sağlamak için daha fazla çaba gösterme; inan bana, denedim. Ve sık sık geliştirici sıkıyorum.
  • Nesne yönelimli (veya nesne yönelimli) yaklaşımlar kullanarak aralık uzantılarını veya Taylor modellerini hesaplayan araçlar. CHEMKIN-II'yi (veya benzer büyüklükteki herhangi bir kütüphaneyi) yeni türlerle yeniden kodlamak için zamanım yok; o çok büyük.
  • Fortran 77/90 veya C dışında bir dil kullanma CHEMKIN-II kodu Fortran'dadır. f2cTChem adı verilen CHEMKIN-II'nin Sandia tabanlı bir klonunu kullanarak veya gerekirse C'ye dönüştürebilirim . Eski sonuçlarım CHEMKIN-II kullanıyor; yeni sonuçlarım eski sonuçlarımı çoğaltmalı ve Cantera'nın CHEMKIN-II'nin vaka çalışmalarına ve birim testlerine dayanarak yaptıklarını çoğaltmayacağını zaten biliyorum. Dahası, benden önce gelen yüksek lisans öğrencisi, aralık aritmetiğinin özellikle iyi çalışması için CHEMKIN-II kaynak koduna biraz kara büyü yaptı. Bunu başka bir pakette çoğaltmak benim için zor olurdu.

Tez konunuzu hemen değiştirin. Bu aptal aralık aritmetiğinden kurtulun ve ideal olarak çalışan yazılımla yararlı bir şey yapın. ;-D
Jed Brown

6
Mevcut sonuçlarınızı alın, tez konunuzun yorumuna sokun, güzel bir yazı yazın ve savunma komitenize harika atıştırmalıklar alın.
Matt Knepley

@Geoff Oxberry: Aralık uzatma ile ne demek istediğinizi anlamama yardımcı olun; , genişletildi , nerede ? Fonksiyonlarınızın monotonluk vb. gibi güzel özelliklere sahip olmadığını varsayıyorum. Bu sağlam bir optimizasyon problemi mi?f:RRF:(R,R0+)((R,R0+)F(a,b)=f([ab,a+b])
Deathbreath

1
Aralık aritmetiğinin temel özeti Wikipedia'da (aralık genişletme kavramını içeren) ve bu sayfada belirtilen referanslarda bulunabilir . Bulabildiğim Taylor modellerine en iyi giriş burada . Otomatik farklılaşma genellikle Taylor modellerinin uygulanmasında kullanılır; Hiç kimsenin onun yerine sayısal yaklaşımlar kullandığını duymadım veya görmedim.
Geoff Oxberry

2
@MishaBrukman: Oh, bunların hepsini deldim.
Geoff Oxberry

Yanıtlar:


2

Sorunun DAEPACK32 bit modunda çalıştığı ancak 64 bit modunda çalışmadığı varsayılarak, bunu ele almak için bazı yaklaşımlar verilmiştir.

DAEPACK64 bit işletim sisteminde 32 bit modunda derleme

Bunu başka bir soruda nasıl yapacağınızı görün . Bu, onunla çalışmaya devam etmenin kolay bir yolu olabilir.

Sorun, oluşturulan kodun 64 bit modunda sorun yaşıyorsa, oluşturulan kodu benzer 32 bit bayraklarla veya 32 bit bir ortamda derleyin (64 bit işletim sistemi uygun kitaplıklar verildiğinde 32 bit kodu çalıştırabilir, ancak tam tersi değil ).

Güvenli bir DAEPACKortam yaratın

  1. VirtualBox'ı kullanarak DAEPACKeski bir ikili dosyadan veya bu ortamda yeniden derlenmiş gibi çalışmakta mutlu olan bir sanal makinede tam bir 32 bit ortam oluşturun . Yazılımın çalışan bir sürümünü edinmek için ihtiyaç duyduğunuz kadar eski bir açık kaynaklı işletim sistemi ve derleyicinin bir sürümünü alabilirsiniz.

  2. Çıktıyı alın DAEPACKve ortamın diğer yazılım için uygun olduğu ana makineye veya ayrı bir sanal makineye aktarın ve çalışmaya devam edin. Bu daha yeni bir 64 bit işletim sistemi olabilir ve orada çalışmaya devam edebilir.

    VirtualBox'ta paylaşılan klasörler özelliğini kullanmak bunu sizin için kolaylaştırmalıdır.

Düzeltmeye yardımcı olması için başkalarını dahil edin DAEPACK

Ne sizin ne de yazılım yazarının bunu düzeltmek için zamanınız olmadığını söylemiştiniz, ancak kimse başka birinin yardımına başvuramayacağınızı söylemedi! Şu seçenekleri göz önünde bulundurun:

  • 32 bit ve 64 bit sorunlarını düzeltmek için bazı lisans MIT CS öğrencilerini işe alın. Bunları üzerinde çalışmaya ikna etmek için, örneğin para veya pizza (ve / veya yasal içme çağındalarsa bira) olsun, bunları telafi etmeniz gerekebilir. Veya danışmanınıza bu konuda yardımcı olmak için bazı yarı zamanlı lisansüstü çalışanlar işe alıp alamayacağını sormayı düşünün (kendi fonunuz tükeniyorsa finansmanla ilgili bir sorun olabilir). Ya da bölümünüzdeki araştırma programcılarından bazı iyilikler isteyin.

  • İçin açık kaynaklı sürüm DAEPACK. Lisans durumunun belirsiz olduğu anlaşılıyor, ancak MIT'in oldukça iyi bilinen adsız bir açık kaynak lisansına sahip olduğunu unutmayın ; bunu açık bir lisans altında yayınlamak sorunla ilgili daha fazla bilgi edinmenize ve 32 bit ile 64 bit arasındaki sorunların çözülmesine yardımcı olabilir.

    Bölümünüze bağlı olarak, hukuk, idari vb. Ofislerin doktora dereceniz için bıraktığınız 6 aydan daha uzun sürebileceğini unutmayın, bu nedenle diğer alternatifleri takip ederken bu işe erken başlamayı düşünün.

İyi şanslar!


Bu yanıtı yazdıktan bir süre sonra, sorunuzu 2012'de 6 aylık bir süre ile yazdığınızı fark ettim, bu yüzden bu tartışma oldukça tartışmalı. Bunun için üzgünüm! Bu durumda ne yaptığınızı hala merak ediyorum.
Misha Brukman

Doktora programımda bahsettiğiniz üç yaklaşımı da başarıyla denedim. Sorun, IIRC, buggy kodu üretecekti; derlemek (kıçında bir ağrı olmasına rağmen, bazı bölümlerini modernize etmek zorunda kaldım) aslında problemlerimin en azıydı. DAEPACK, bir şirketin temel teknolojisi olduğu için açık kaynak yayınlaması pek olası değildir. Ayrıca, bu şirketin dışında başka kişileri ve eski danışman laboratuvarımın düzeltilmesi için de dikenli ve girişimci MIT CS öğrencilerinin bu işe yaramaz işi üstlenmek isteyeceklerinden şüpheliyim.
Geoff Oxberry

@GeoffOxberry bunu duyduğuma üzüldüm, ancak bu (maalesef) sözde "araştırma kalitesi" yazılımında çok yaygın. Yine de derecenizi ısrar ve tamamladığınız için tebrikler!
Misha Brukman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.