c++ cuda fortran intel-fortran cusp-library

c++ - Referencias no resueltas usando IFORT con nvcc y CUSP



cuda fortran (1)

ipo es bastante complicado cuando hay varios archivos involucrados. En realidad, está volviendo a ejecutar el compilador en todos los módulos en el momento del enlace. No soy un experto en esto, pero eso suena como algo bastante difícil de atravesar.

Una opción posible podría ser que intente compilar su código de cuda en una biblioteca compartida (.so) y crear un vínculo en contra de eso. Debería evitar que la cadena de herramientas del compilador de inteligencia trate de recompilar y optimizar el código generado por nvcc / gcc. Creo que esto lo limitará a "optimizaciones de archivo único". No sé si eso afectará significativamente tu rendimiento o no.

Usando mi ejemplo aquí , modificaría los comandos de compilación de la siguiente manera:

$ nvcc -Xcompiler="-fPIC" -shared bicgstab.cu -o bicgstab.so -I/home-2/robertc/misc/cusp/cusplibrary-master $ ifort -c -fast bic.f90 $ ifort bic.o bicgstab.so -L/shared/apps/cuda/CUDA-v6.0.37/lib64 -lcudart -o program ipo: remark #11001: performing single-file optimizations ipo: remark #11006: generating object file /tmp/ipo_ifortxEdpin.o $

No indica en qué parte del proceso de compilación está agregando el (los) conmutador (s) -fast (s). Si solo en los comandos de compilación ifort , creo que el enfoque anterior funcionará. Si también lo desea / necesita en el comando de enlace, parece que ifort desea construir un ejecutable enlazado completamente estáticamente (y hacer optimización de intermodule ...), que no funcionará utilizando el proceso anterior.

Tengo un programa que estoy compilando así:

(...) Some ifort *.f -c nvcc -c src/bicgstab.cu -o bicgstab.o -I/home/ricardo/apps/cusp/cusplibrary (...) Some more *.for -c ifort *.o -L/usr/local/cuda-5.5/lib64 -lcudart -lcublas -lcusparse -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -openmp -o program

Todo funcionó bien hasta que agregué el soporte CUSP donde tengo este wrapper (bicgstab.cu):

#include <cusp/csr_matrix.h> #include <cusp/krylov/bicgstab.h> #if defined(__cplusplus) extern "C" { #endif void bicgstab_(int * device_I, int * device_J, float * device_V, float * device_x, float * device_b, int N, int NNZ){ // *NOTE* raw pointers must be wrapped with thrust::device_ptr! thrust::device_ptr<int> wrapped_device_I(device_I); thrust::device_ptr<int> wrapped_device_J(device_J); thrust::device_ptr<float> wrapped_device_V(device_V); thrust::device_ptr<float> wrapped_device_x(device_x); thrust::device_ptr<float> wrapped_device_b(device_b); // use array1d_view to wrap the individual arrays typedef typename cusp::array1d_view< thrust::device_ptr<int> > DeviceIndexArrayView; typedef typename cusp::array1d_view< thrust::device_ptr<float> > DeviceValueArrayView; DeviceIndexArrayView row_indices (wrapped_device_I, wrapped_device_I + (N+1)); DeviceIndexArrayView column_indices(wrapped_device_J, wrapped_device_J + NNZ); DeviceValueArrayView values (wrapped_device_V, wrapped_device_V + NNZ); DeviceValueArrayView x (wrapped_device_x, wrapped_device_x + N); DeviceValueArrayView b (wrapped_device_b, wrapped_device_b + N); // combine the three array1d_views into a csr_matrix_view typedef cusp::csr_matrix_view<DeviceIndexArrayView, DeviceIndexArrayView, DeviceValueArrayView> DeviceView; // construct a csr_matrix_view from the array1d_views DeviceView A(N, N, NNZ, row_indices, column_indices, values); // set stopping criteria: // iteration_limit = 100 // relative_tolerance = 1e-5 cusp::verbose_monitor<float> monitor(b, 100, 1e-5); // solve the linear system A * x = b with the Conjugate Gradient method cusp::krylov::bicgstab(A, x, b, monitor); } #if defined(__cplusplus) } #endif

Nvcc compila y genera el objeto, pero en el último comando cuando estoy vinculando todos, aparece un montón de errores debido a la vinculación:

ipo: warning #11021: unresolved __gxx_personality_v0 Referenced in bicgstab.o ipo: warning #11021: unresolved _ZTVSt9exception Referenced in bicgstab.o ipo: warning #11021: unresolved _ZTVSt9bad_alloc Referenced in bicgstab.o ipo: warning #11021: unresolved _ZdlPv Referenced in bicgstab.o ipo: warning #11021: unresolved __cxa_guard_acquire Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSaIcEC1Ev Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSsC1EPKcRKSaIcE Referenced in bicgstab.o ipo: warning #11021: unresolved __cxa_guard_release Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSsD1Ev Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSaIcED1Ev Referenced in bicgstab.o ipo: warning #11021: unresolved __cxa_guard_abort Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSsC1ERKSs Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSt13runtime_errorD2Ev Referenced in bicgstab.o ipo: warning #11021: unresolved __cxa_call_unexpected Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSt13runtime_errorC2ERKSs Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSsC1Ev Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNKSs5emptyEv Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNKSt13runtime_error4whatEv Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSsaSEPKc Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSspLEPKc Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSspLERKSs Referenced in bicgstab.o ipo: warning #11021: unresolved __cxa_begin_catch Referenced in bicgstab.o ipo: warning #11021: unresolved __cxa_end_catch Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNKSs5c_strEv Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNKSt9bad_alloc4whatEv Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSt9bad_allocD2Ev Referenced in bicgstab.o ipo: warning #11021: unresolved __cxa_allocate_exception Referenced in bicgstab.o ipo: warning #11021: unresolved __cxa_free_exception Referenced in bicgstab.o ipo: warning #11021: unresolved __cxa_throw Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSt9exceptionD2Ev Referenced in bicgstab.o ipo: warning #11021: unresolved _ZSt4cout Referenced in bicgstab.o ipo: warning #11021: unresolved _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSolsEf Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSolsEm Referenced in bicgstab.o ipo: warning #11021: unresolved _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSolsEPFRSoS_E Referenced in bicgstab.o ipo: warning #11021: unresolved _ZSt9terminatev Referenced in bicgstab.o ipo: warning #11021: unresolved _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St5_Setw Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSolsEPFRSt8ios_baseS0_E Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSt9bad_allocD1Ev Referenced in bicgstab.o ipo: warning #11021: unresolved _ZTISt9bad_alloc Referenced in bicgstab.o ipo: warning #11021: unresolved __cxa_pure_virtual Referenced in bicgstab.o ipo: warning #11021: unresolved _ZTVN10__cxxabiv120__si_class_type_infoE Referenced in bicgstab.o ipo: warning #11021: unresolved _ZTISt9exception Referenced in bicgstab.o ipo: warning #11021: unresolved _ZTISt13runtime_error Referenced in bicgstab.o ipo: warning #11021: unresolved _ZTVN10__cxxabiv117__class_type_infoE Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSt8ios_base4InitC1Ev Referenced in bicgstab.o ipo: warning #11021: unresolved _ZNSt8ios_base4InitD1Ev Referenced in bicgstab.o

Creo que es porque ifort está agregando o eliminando guiones bajos, añadiendo mayúsculas / minúsculas o cualquier otra cosa porque el archivo está compilando escritura y si genero el binario fuera de mi programa, solo para probarlo, funciona muy bien.

¡Muchas gracias por adelantado!