Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re^6: Inline::CUDA : looking for feedback

by bliako (Monsignor)
on Jul 30, 2021 at 12:33 UTC ( [id://11135525] : note . print w/replies, xml ) Need Help??

in reply to Re^5: Inline::CUDA : looking for feedback
in thread Inline::CUDA : looking for feedback

I have updated the github repository with a new version which uses ShellQuote::Any to do (some of) the quoting. I have also added a test which tries to run some perl-scripts with space in their name. That's in t/002-spaces-spaces-spaces.t.

I have also added another repository: which takes over nvidia::ml, fixes its compilation errors and adds 1 more binding. If you install this first, it will be easier to enquire the GPU in current module. It requires nvidia-ml binary library which must be in the toolkit you downloaded. If you can't install that then it's not a problem but 1 test will fail (t/001-enquire-nvidia-gpu.t).

I suggest you run perl Makefile.PL and if successful, then inspect config/Inline-CUDA.conf to see if cc, cxx, nvcc, ld are all set to valid names (unquoted).

Following that, run just a few tests: t/000-require-modules.t, t/002-spaces-spaces-spaces.t, t/008-config.t, t/011-basic.t . The last two are compiling CUDA code. If all goes well, then it's likely that all tests will succeed. 031-matrix-multiplication-pass-parameters.t does a matrix multiplication with data passed from the Perl script and results returned back. That's a good base for any CUDA code you may want to write.

The prompting during installation is only for windows, the user must somehow indicate where a c-compiler is if not in path already.

BTW, you will be using a newer version of nvcc than mine. So a lot can go wrong there too.

bw, bliako

Replies are listed 'Best First'.
Re^7: Inline::CUDA : looking for feedback
by kcott (Archbishop) on Jul 31, 2021 at 01:42 UTC
    "I suggest you run perl Makefile.PL ..."
    $ perl Makefile.PL PACK001=HASH(0x800172c08) Changes PACK001=HASH(0x800172c08) ignore.txt PACK001=HASH(0x800172c08) lib PACK001=HASH(0x800172c08) nvidia-ml-pl.pdf PACK001=HASH(0x800172c08) nvml.h PACK001=HASH(0x800172c08) nvml_wrap.c PACK001=HASH(0x800172c08) README PACK001=HASH(0x800172c08) PACK001=HASH(0x800172c08) xt PACK001=HASH(0x800172c08) . PACK001=HASH(0x800172c08) nvidia2 PACK001=HASH(0x800172c08) blib/lib/nvidia2/ PACK001=HASH(0x800172c08) blib/lib/nvidia2/ PACK001=HASH(0x800172c08) ml PACK001=HASH(0x800172c08) blib/lib/nvidia2/ml/ PACK001=HASH(0x800172c08) blib/lib/nvidia2/ml/ Warning (mostly harmless): No library found for -lnvidia-ml Generating a Unix-style Makefile Writing Makefile for nvidia2::ml::bindings Writing MYMETA.yml and MYMETA.json
    "... and if successful, then inspect config/Inline-CUDA.conf ..."

    Couldn't find Inline-CUDA.conf even with a case-insensitive search.

    I tried a make anyway:

    $ make cp lib/nvidia2/ blib/lib/nvidia2/ cp lib/nvidia2/ml/ blib/lib/nvidia2/ml/ cp lib/nvidia2/ml/ blib/lib/nvidia2/ml/ cp lib/nvidia2/ blib/lib/nvidia2/ Running Mkbootstrap for bindings () chmod 644 "" "/home/ken/perl5/perlbrew/perls/perl-5.34.0/bin/perl.exe" -MExtUtils:: +Command::MM -e 'cp_nonempty' -- blib/arch/auto/nvidia2/ml +/bindings/ 644 gcc -c -I. -DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -D_GNU_SOURCE -fw +rapv -fno-strict-aliasing -pipe -fstack-protector-strong -D_FORTIFY_S +OURCE=2 -DUSEIMPORTLIB -O3 -DVERSION=\"5.00\" -DXS_VERSION=\"5.00\" + "-I/home/ken/perl5/perlbrew/perls/perl-5.34.0/lib/5.34.0/cygwin-thr +ead-multi/CORE" nvml_wrap.c rm -f blib/arch/auto/nvidia2/ml/bindings/bindings.dll g++ --shared -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,- +-enable-auto-image-base -L/usr/local/lib -fstack-protector-strong nv +ml_wrap.o -o blib/arch/auto/nvidia2/ml/bindings/bindings.dll \ /home/ken/perl5/perlbrew/perls/perl-5.34.0/lib/5.34.0/cygwin-thread- +multi/CORE/cygperl5_34_0.dll -lpthread -ldl \ /usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: +nvml_wrap.o:nvml_wrap.c:(.text+0x6af5): undefined reference to `nvmlI +nit' /usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: +nvml_wrap.o:nvml_wrap.c:(.text+0x6c05): undefined reference to `nvmlS +hutdown' ... several screenfuls of lines like that ... /usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: +nvml_wrap.o:nvml_wrap.c:(.text+0x1e977): undefined reference to `nvml +DeviceGetSupportedMemoryClocks' /usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: +nvml_wrap.o:nvml_wrap.c:(.text+0x1e9ca): undefined reference to `nvml +DeviceGetSupportedGraphicsClocks' collect2: error: ld returned 1 exit status make: *** [Makefile:482: blib/arch/auto/nvidia2/ml/bindings/bindings.d +ll] Error 1

    — Ken

      nvidia2-ml's Makefile.PL contains the directive to link to nvida-ml dll . Spexify there the dir this library resides prepending a -L adir use quotes if spaces in adir.

      re: the config file etc., i was referring to Inline::CUDA. let me know