add init pxe cmd
This commit is contained in:
87
var/pkgs/cuda/13.0/nvml/example/Makefile
Normal file
87
var/pkgs/cuda/13.0/nvml/example/Makefile
Normal file
@@ -0,0 +1,87 @@
|
||||
ARCH := $(shell getconf LONG_BIT)
|
||||
OS := $(shell cat /etc/issue)
|
||||
|
||||
ifneq (,$(wildcard /etc/redhat-release))
|
||||
RHEL_OS := $(shell cat /etc/redhat-release)
|
||||
endif
|
||||
|
||||
# Gets Driver Branch
|
||||
DRIVER_BRANCH := $(shell nvidia-smi | grep Driver | cut -f 3 -d' ' | cut -f 1 -d '.')
|
||||
|
||||
# Location of the CUDA Toolkit
|
||||
CUDA_PATH ?= "/usr/local/cuda-8.0"
|
||||
|
||||
ifeq (${ARCH},$(filter ${ARCH},32 64))
|
||||
# If correct architecture and libnvidia-ml library is not found
|
||||
# within the environment, build using the stub library
|
||||
|
||||
ifneq (,$(findstring Ubuntu,$(OS)))
|
||||
DEB := $(shell dpkg -l | grep cuda)
|
||||
ifneq (,$(findstring cuda, $(DEB)))
|
||||
NVML_LIB := /usr/lib/nvidia-$(DRIVER_BRANCH)
|
||||
else
|
||||
NVML_LIB := /lib${ARCH}
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring SUSE,$(OS)))
|
||||
RPM := $(shell rpm -qa cuda*)
|
||||
ifneq (,$(findstring cuda, $(RPM)))
|
||||
NVML_LIB := /usr/lib${ARCH}
|
||||
else
|
||||
NVML_LIB := /lib${ARCH}
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring CentOS,$(RHEL_OS)))
|
||||
RPM := $(shell rpm -qa cuda*)
|
||||
ifneq (,$(findstring cuda, $(RPM)))
|
||||
NVML_LIB := /usr/lib${ARCH}/nvidia
|
||||
else
|
||||
NVML_LIB := /lib${ARCH}
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring Red Hat,$(RHEL_OS)))
|
||||
RPM := $(shell rpm -qa cuda*)
|
||||
ifneq (,$(findstring cuda, $(RPM)))
|
||||
NVML_LIB := /usr/lib${ARCH}/nvidia
|
||||
else
|
||||
NVML_LIB := /lib${ARCH}
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring Fedora,$(RHEL_OS)))
|
||||
RPM := $(shell rpm -qa cuda*)
|
||||
ifneq (,$(findstring cuda, $(RPM)))
|
||||
NVML_LIB := /usr/lib${ARCH}/nvidia
|
||||
else
|
||||
NVML_LIB := /lib${ARCH}
|
||||
endif
|
||||
endif
|
||||
|
||||
else
|
||||
NVML_LIB := ../../lib${ARCH}/stubs/
|
||||
$(info "libnvidia-ml.so.1" not found, using stub library.)
|
||||
endif
|
||||
|
||||
ifneq (${ARCH},$(filter ${ARCH},32 64))
|
||||
$(error Unknown architecture!)
|
||||
endif
|
||||
|
||||
NVML_LIB += ../lib/
|
||||
NVML_LIB_L := $(addprefix -L , $(NVML_LIB))
|
||||
|
||||
CFLAGS := -I ../../include -I ../include
|
||||
LDFLAGS := -lnvidia-ml $(NVML_LIB_L)
|
||||
|
||||
all: example supportedVgpus
|
||||
example: example.o
|
||||
$(CC) $< $(CFLAGS) $(LDFLAGS) -o $@
|
||||
supportedVgpus: supportedVgpus.o
|
||||
$(CC) $< $(CFLAGS) $(LDFLAGS) -o $@
|
||||
clean:
|
||||
-@rm -f example.o
|
||||
-@rm -f example
|
||||
-@rm -f supportedVgpus.o
|
||||
-@rm -f supportedVgpus
|
||||
10
var/pkgs/cuda/13.0/nvml/example/README.txt
Normal file
10
var/pkgs/cuda/13.0/nvml/example/README.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
The NVIDIA GDK provides a simple example program that shows how to build an
|
||||
NVML client. When running an NVML client while the GDK is installed, be
|
||||
sure your library path first includes the actual NVML library (installed
|
||||
with the driver), not the stub library that exists solely for
|
||||
compilation on systems without an NVIDIA driver available.
|
||||
|
||||
If you have installed this example code via your packaging system,
|
||||
you should first copy it to a user directory before compilation.
|
||||
The packaging system uninstall feature will not remove this directory if it
|
||||
contains new files beyond what were installed as part of the GDK.
|
||||
180
var/pkgs/cuda/13.0/nvml/example/example.c
Normal file
180
var/pkgs/cuda/13.0/nvml/example/example.c
Normal file
@@ -0,0 +1,180 @@
|
||||
/***************************************************************************\
|
||||
|* *|
|
||||
|* Copyright 2010-2016 NVIDIA Corporation. All rights reserved. *|
|
||||
|* *|
|
||||
|* NOTICE TO USER: *|
|
||||
|* *|
|
||||
|* This source code is subject to NVIDIA ownership rights under U.S. *|
|
||||
|* and international Copyright laws. Users and possessors of this *|
|
||||
|* source code are hereby granted a nonexclusive, royalty-free *|
|
||||
|* license to use this code in individual and commercial software. *|
|
||||
|* *|
|
||||
|* NVIDIA MAKES NO REPRESENTATION ABOUT THE SUITABILITY OF THIS SOURCE *|
|
||||
|* CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR *|
|
||||
|* IMPLIED WARRANTY OF ANY KIND. NVIDIA DISCLAIMS ALL WARRANTIES WITH *|
|
||||
|* REGARD TO THIS SOURCE CODE, INCLUDING ALL IMPLIED WARRANTIES OF *|
|
||||
|* MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR *|
|
||||
|* PURPOSE. IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, *|
|
||||
|* INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES *|
|
||||
|* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN *|
|
||||
|* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING *|
|
||||
|* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE *|
|
||||
|* CODE. *|
|
||||
|* *|
|
||||
|* U.S. Government End Users. This source code is a "commercial item" *|
|
||||
|* as that term is defined at 48 C.F.R. 2.101 (OCT 1995), consisting *|
|
||||
|* of "commercial computer software" and "commercial computer software *|
|
||||
|* documentation" as such terms are used in 48 C.F.R. 12.212 (SEPT 1995) *|
|
||||
|* and is provided to the U.S. Government only as a commercial end item. *|
|
||||
|* Consistent with 48 C.F.R.12.212 and 48 C.F.R. 227.7202-1 through *|
|
||||
|* 227.7202-4 (JUNE 1995), all U.S. Government End Users acquire the *|
|
||||
|* source code with only those rights set forth herein. *|
|
||||
|* *|
|
||||
|* Any use of this source code in individual and commercial software must *|
|
||||
|* include, in the user documentation and internal comments to the code, *|
|
||||
|* the above Disclaimer and U.S. Government End Users Notice. *|
|
||||
|* *|
|
||||
|* *|
|
||||
\***************************************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <nvml.h>
|
||||
|
||||
static const char * convertToComputeModeString(nvmlComputeMode_t mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case NVML_COMPUTEMODE_DEFAULT:
|
||||
return "Default";
|
||||
case NVML_COMPUTEMODE_EXCLUSIVE_THREAD:
|
||||
return "Exclusive_Thread";
|
||||
case NVML_COMPUTEMODE_PROHIBITED:
|
||||
return "Prohibited";
|
||||
case NVML_COMPUTEMODE_EXCLUSIVE_PROCESS:
|
||||
return "Exclusive Process";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
nvmlReturn_t result;
|
||||
unsigned int device_count, i;
|
||||
|
||||
// First initialize NVML library
|
||||
result = nvmlInit();
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to initialize NVML: %s\n", nvmlErrorString(result));
|
||||
|
||||
printf("Press ENTER to continue...\n");
|
||||
getchar();
|
||||
return 1;
|
||||
}
|
||||
|
||||
result = nvmlDeviceGetCount(&device_count);
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to query device count: %s\n", nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
printf("Found %u device%s\n\n", device_count, device_count != 1 ? "s" : "");
|
||||
|
||||
printf("Listing devices:\n");
|
||||
for (i = 0; i < device_count; i++)
|
||||
{
|
||||
nvmlDevice_t device;
|
||||
char name[NVML_DEVICE_NAME_BUFFER_SIZE];
|
||||
nvmlPciInfo_t pci;
|
||||
nvmlComputeMode_t compute_mode;
|
||||
|
||||
// Query for device handle to perform operations on a device
|
||||
// You can also query device handle by other features like:
|
||||
// nvmlDeviceGetHandleBySerial
|
||||
// nvmlDeviceGetHandleByPciBusId
|
||||
result = nvmlDeviceGetHandleByIndex(i, &device);
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to get handle for device %u: %s\n", i, nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
|
||||
result = nvmlDeviceGetName(device, name, NVML_DEVICE_NAME_BUFFER_SIZE);
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to get name of device %u: %s\n", i, nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
|
||||
// pci.busId is very useful to know which device physically you're talking to
|
||||
// Using PCI identifier you can also match nvmlDevice handle to CUDA device.
|
||||
result = nvmlDeviceGetPciInfo(device, &pci);
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to get pci info for device %u: %s\n", i, nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
|
||||
printf("%u. %s [%s]\n", i, name, pci.busId);
|
||||
|
||||
// This is a simple example on how you can modify GPU's state
|
||||
result = nvmlDeviceGetComputeMode(device, &compute_mode);
|
||||
if (NVML_ERROR_NOT_SUPPORTED == result)
|
||||
printf("\t This is not CUDA capable device\n");
|
||||
else if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to get compute mode for device %u: %s\n", i, nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
else
|
||||
{
|
||||
// try to change compute mode
|
||||
printf("\t Changing device's compute mode from '%s' to '%s'\n",
|
||||
convertToComputeModeString(compute_mode),
|
||||
convertToComputeModeString(NVML_COMPUTEMODE_PROHIBITED));
|
||||
|
||||
result = nvmlDeviceSetComputeMode(device, NVML_COMPUTEMODE_PROHIBITED);
|
||||
if (NVML_ERROR_NO_PERMISSION == result)
|
||||
printf("\t\t Need root privileges to do that: %s\n", nvmlErrorString(result));
|
||||
else if (NVML_ERROR_NOT_SUPPORTED == result)
|
||||
printf("\t\t Compute mode prohibited not supported. You might be running on\n"
|
||||
"\t\t windows in WDDM driver model or on non-CUDA capable GPU\n");
|
||||
else if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("\t\t Failed to set compute mode for device %u: %s\n", i, nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\t Restoring device's compute mode back to '%s'\n",
|
||||
convertToComputeModeString(compute_mode));
|
||||
result = nvmlDeviceSetComputeMode(device, compute_mode);
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("\t\t Failed to restore compute mode for device %u: %s\n", i, nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result = nvmlShutdown();
|
||||
if (NVML_SUCCESS != result)
|
||||
printf("Failed to shutdown NVML: %s\n", nvmlErrorString(result));
|
||||
|
||||
printf("All done.\n");
|
||||
|
||||
printf("Press ENTER to continue...\n");
|
||||
getchar();
|
||||
return 0;
|
||||
|
||||
Error:
|
||||
result = nvmlShutdown();
|
||||
if (NVML_SUCCESS != result)
|
||||
printf("Failed to shutdown NVML: %s\n", nvmlErrorString(result));
|
||||
|
||||
printf("Press ENTER to continue...\n");
|
||||
getchar();
|
||||
return 1;
|
||||
}
|
||||
160
var/pkgs/cuda/13.0/nvml/example/supportedVgpus.c
Normal file
160
var/pkgs/cuda/13.0/nvml/example/supportedVgpus.c
Normal file
@@ -0,0 +1,160 @@
|
||||
/***************************************************************************\
|
||||
|* *|
|
||||
|* Copyright 2010-2016 NVIDIA Corporation. All rights reserved. *|
|
||||
|* *|
|
||||
|* NOTICE TO USER: *|
|
||||
|* *|
|
||||
|* This source code is subject to NVIDIA ownership rights under U.S. *|
|
||||
|* and international Copyright laws. Users and possessors of this *|
|
||||
|* source code are hereby granted a nonexclusive, royalty-free *|
|
||||
|* license to use this code in individual and commercial software. *|
|
||||
|* *|
|
||||
|* NVIDIA MAKES NO REPRESENTATION ABOUT THE SUITABILITY OF THIS SOURCE *|
|
||||
|* CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR *|
|
||||
|* IMPLIED WARRANTY OF ANY KIND. NVIDIA DISCLAIMS ALL WARRANTIES WITH *|
|
||||
|* REGARD TO THIS SOURCE CODE, INCLUDING ALL IMPLIED WARRANTIES OF *|
|
||||
|* MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR *|
|
||||
|* PURPOSE. IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, *|
|
||||
|* INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES *|
|
||||
|* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN *|
|
||||
|* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING *|
|
||||
|* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE *|
|
||||
|* CODE. *|
|
||||
|* *|
|
||||
|* U.S. Government End Users. This source code is a "commercial item" *|
|
||||
|* as that term is defined at 48 C.F.R. 2.101 (OCT 1995), consisting *|
|
||||
|* of "commercial computer software" and "commercial computer software *|
|
||||
|* documentation" as such terms are used in 48 C.F.R. 12.212 (SEPT 1995) *|
|
||||
|* and is provided to the U.S. Government only as a commercial end item. *|
|
||||
|* Consistent with 48 C.F.R.12.212 and 48 C.F.R. 227.7202-1 through *|
|
||||
|* 227.7202-4 (JUNE 1995), all U.S. Government End Users acquire the *|
|
||||
|* source code with only those rights set forth herein. *|
|
||||
|* *|
|
||||
|* Any use of this source code in individual and commercial software must *|
|
||||
|* include, in the user documentation and internal comments to the code, *|
|
||||
|* the above Disclaimer and U.S. Government End Users Notice. *|
|
||||
|* *|
|
||||
|* *|
|
||||
\***************************************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <nvml.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
nvmlReturn_t result;
|
||||
unsigned int device_count, i;
|
||||
|
||||
// First initialize NVML library
|
||||
result = nvmlInit();
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to initialize NVML: %s\n", nvmlErrorString(result));
|
||||
return 1;
|
||||
}
|
||||
|
||||
result = nvmlDeviceGetCount(&device_count);
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to query device count: %s\n", nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
|
||||
printf("Found %u device%s\n", device_count, device_count != 1 ? "s" : "");
|
||||
printf("Listing devices:\n");
|
||||
|
||||
for (i = 0; i < device_count; i++)
|
||||
{
|
||||
nvmlDevice_t device;
|
||||
char name[NVML_DEVICE_NAME_BUFFER_SIZE];
|
||||
nvmlPciInfo_t pci;
|
||||
|
||||
// Query for device handle to perform operations on a device
|
||||
// You can also query device handle by other features like:
|
||||
// nvmlDeviceGetHandleBySerial
|
||||
// nvmlDeviceGetHandleByPciBusId
|
||||
result = nvmlDeviceGetHandleByIndex(i, &device);
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to get handle for device %u: %s\n", i, nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
|
||||
result = nvmlDeviceGetName(device, name, NVML_DEVICE_NAME_BUFFER_SIZE);
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to get name of device %u: %s\n", i, nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
|
||||
// pci.busId is very useful to know which device physically you're talking to
|
||||
// Using PCI identifier you can also match nvmlDevice handle to CUDA device.
|
||||
result = nvmlDeviceGetPciInfo(device, &pci);
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to get pci info for device %u: %s\n", i, nvmlErrorString(result));
|
||||
goto Error;
|
||||
}
|
||||
|
||||
printf("%u. %s [%s]\n", i, name, pci.busId);
|
||||
|
||||
// This is an example to get the supported vGPUs type names
|
||||
unsigned int vgpuCount = 0;
|
||||
nvmlVgpuTypeId_t *vgpuTypeIds = NULL;
|
||||
unsigned int j;
|
||||
|
||||
result = nvmlDeviceGetSupportedVgpus(device, &vgpuCount, NULL);
|
||||
if (NVML_ERROR_INSUFFICIENT_SIZE != result)
|
||||
goto Error;
|
||||
|
||||
if (vgpuCount != 0)
|
||||
{
|
||||
vgpuTypeIds = malloc(sizeof(nvmlVgpuTypeId_t) * vgpuCount);
|
||||
if (!vgpuTypeIds)
|
||||
{
|
||||
printf("Memory allocation of %d bytes failed \n", (int)(sizeof(*vgpuTypeIds)*vgpuCount));
|
||||
goto Error;
|
||||
}
|
||||
|
||||
result = nvmlDeviceGetSupportedVgpus(device, &vgpuCount, vgpuTypeIds);
|
||||
if (NVML_SUCCESS != result)
|
||||
{
|
||||
printf("Failed to get the supported vGPUs with status %d \n", (int)result);
|
||||
goto Error;
|
||||
}
|
||||
|
||||
printf(" Displaying vGPU type names: \n");
|
||||
for (j = 0; j < vgpuCount; j++)
|
||||
{
|
||||
char vgpuTypeName[NVML_DEVICE_NAME_BUFFER_SIZE];
|
||||
unsigned int bufferSize = NVML_DEVICE_NAME_BUFFER_SIZE;
|
||||
|
||||
if (NVML_SUCCESS == (result = nvmlVgpuTypeGetName(vgpuTypeIds[j], vgpuTypeName, &bufferSize)))
|
||||
{
|
||||
printf(" %s\n",vgpuTypeName);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Failed to query the vGPU type name with status %d \n", (int)result);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (vgpuTypeIds)
|
||||
free(vgpuTypeIds);
|
||||
}
|
||||
|
||||
result = nvmlShutdown();
|
||||
if (NVML_SUCCESS != result)
|
||||
printf("Failed to shutdown NVML: %s\n", nvmlErrorString(result));
|
||||
|
||||
printf("All done.\n");
|
||||
return 0;
|
||||
|
||||
Error:
|
||||
result = nvmlShutdown();
|
||||
if (NVML_SUCCESS != result)
|
||||
printf("Failed to shutdown NVML: %s\n", nvmlErrorString(result));
|
||||
|
||||
return 1;
|
||||
}
|
||||
Reference in New Issue
Block a user