https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104714

--- Comment #1 from Tom de Vries <vries at gcc dot gnu.org> ---
(In reply to Tom de Vries from comment #0)

> [ FWIW, it would be great if we could simply specify -march=native, and have
> gcc query the nvidia driver to see what board there is using
> cuDeviceGetAttribute and CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR and
> CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR.  And possibly handle the
> situation of multiple boards by using the minimum.  But, much more involved
> to realize. ]

Though, it might be better to handle this externally, so have a tool:
...
$ cat test.c
#include <stdio.h>
#include <cuda.h>

int compute_capability_major;
int compute_capability_minor;

int
main (void)
{
  cuInit(0);

  int num_devices;
  cuDeviceGetCount (&num_devices);

  for (int i = 0; i < num_devices; ++i)
    {
      CUdevice device;
      cuDeviceGet (&device, i);

      cuDeviceGetAttribute (&compute_capability_major,
                            CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR,
                            device);

      cuDeviceGetAttribute (&compute_capability_minor,
                            CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR,
                            device);

      printf ("sm_%d%d\n", compute_capability_major, compute_capability_minor);
    }

  return 0;
}
...
that compiles like so:
...
$ gcc test.c -I ~/cuda/11.6.0/include -lcuda -o a.out -g
...
and prints:
...
$ ./a.out 
sm_75
...
and then name the tool nvptx-print-native or some such and use:
...
native=$(nvptx-print-native)
$cc ... -march=$native
...
in scripts.

Reply via email to