2011-09-28 20 views
9

CUSP'u, GPU'nun gücünü kullanmak için Mathematica için harici bir doğrusal çözücü olarak kullanmaya çalışıyorum. İşte CUSP Project webpage. CUSP'u Mathematica ile nasıl entegre edebileceğimize dair bir öneri talep ediyorum. Eminim ki birçoğunuz bunu tartışmak isteyecektir. Bir giriş matrisi yazmayı ve sonra CUSP programına beslemenin yolunun gitmesi gerektiğini düşünüyorum. Mathematica'nın LibrarayFunctionLoad'u kullanarak, giriş matrisini GPU tabanlı çözücüye anında aktarmanın daha iyi bir yolu olacaktır. Matematiği ve sağ taraf matrisini doğrudan Mathematica'dan temin etmenin yolu ne olacak?Mathematica'nın kütüphane fonksiyon yetenekleri

Bazı CUSP kod snippet'i aşağıdadır.

#include <cusp/hyb_matrix.h> 
#include <cusp/io/matrix_market.h> 
#include <cusp/krylov/cg.h> 

int main(void) 
{ 
// create an empty sparse matrix structure (HYB format) 
cusp::hyb_matrix<int, float, cusp::device_memory> A; 

// load a matrix stored in MatrixMarket format 
cusp::io::read_matrix_market_file(A, "5pt_10x10.mtx"); 

// allocate storage for solution (x) and right hand side (b) 
cusp::array1d<float, cusp::device_memory> x(A.num_rows, 0); 
cusp::array1d<float, cusp::device_memory> b(A.num_rows, 1); 

// solve the linear system A * x = b with the Conjugate Gradient method 
cusp::krylov::cg(A, x, b); 

return 0; 
} 

Bu soru bize MMA mathlink arayüzünün konuyu çağırmak da mümkündür Mathematica 8. derlenmesi yeteneklerini tartışmak imkanı verir. Umarım buradaki insanlar bu problemi düşünmeye değer ve ilgi çekici bulmaktadır.

BR

+1

Lütfen StackOverflow formatının tartışmalar için uygun olmadığını unutmayın. Bu bir forum değil. Soru ve Cevap biçiminde olabildiğince fazla kalmaya çalışın. –

+1

@belisarius Anladım. Bana biraz zaman ver, somut bir soruyu çerçeveleyecek. Ama soru bu soruna nasıl saldırılacağıydı. Hatırlattığın için teşekkürler .. – PlatoManiac

cevap

1

Eğer LibraryFunctions makine çift veya makinenin Mathematica tensörleri alabilir LibraryLink (bunlar için LibraryFunctionLoad bir Mathematica downvalue olarak dinamik bir kütüphane işlevi erişmek için kullanılır) tartışmaya açık değil fazla oda aslında orada kullanmak isterseniz tamsayılar ve bitti.

Mathematica MTensor biçimi, C içinde doğal olarak kullandığınız gibi yoğun bir dizidir, bu nedenle CUSP başka bir biçim kullanıyorsa, temsiller arasında çeviri yapmak için bir miktar kod yazmanız gerekir. Tüm detaylar için LibraryLink tutorial'a başvurun.

Özellikle Interaction with Mathematica sayfasındaki "MTensors Bellek Yönetimi" bölümüne dikkat etmek ve referans olarak bir Mathematica tensörünü geçmek için "Paylaşılan" modunu seçmek isteyeceksiniz.