first commit with printing info

This commit is contained in:
antonl 2026-01-11 14:53:55 +01:00
parent 3e4bc19996
commit 2571bd17e3
4 changed files with 768 additions and 0 deletions

531
.gitignore vendored Normal file
View File

@ -0,0 +1,531 @@
# ---> C
# Prerequisites
*.d
# Object files
*.o
*.ko
*.obj
*.elf
# Linker output
*.ilk
*.map
*.exp
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf
# ---> C++
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
# ---> CUDA
*.i
*.ii
*.gpu
*.ptx
*.cubin
*.fatbin
# ---> VisualStudio
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
# ---> SublimeText
# Cache files for Sublime Text
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
# Workspace files are user-specific
*.sublime-workspace
# Project files should be checked into the repository, unless a significant
# proportion of contributors will probably not be using Sublime Text
# *.sublime-project
# SFTP configuration file
sftp-config.json
sftp-config-alt*.json
# Package control specific files
Package Control.last-run
Package Control.ca-list
Package Control.ca-bundle
Package Control.system-ca-bundle
Package Control.cache/
Package Control.ca-certs/
Package Control.merged-ca-bundle
Package Control.user-ca-bundle
oscrypto-ca-bundle.crt
bh_unicode_properties.cache
# Sublime-github package stores a github token in this file
# https://packagecontrol.io/packages/sublime-github
GitHub.sublime-settings
# Build dir
build/

20
build.bat Normal file
View File

@ -0,0 +1,20 @@
@echo off
setlocal
@rem set CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4
@rem set CUDSS_PATH=C:\Program Files\NVIDIA\cuDSS
nvcc -o build/cudss_test.exe src/cudss_test.cu ^
-I"%CUDA_PATH%\include" ^
-I"%CUDSS_PATH%\include" ^
-L"%CUDA_PATH%\lib\x64" ^
-L"%CUDSS_PATH%\lib\12" ^
-lcudss -lcudart ^
-Xcompiler "/W3 /O2"
if %ERRORLEVEL% EQU 0 (
echo Build successful: cudss_test.exe
) else (
echo Build failed
exit /b 1
)

20
build.sh Normal file
View File

@ -0,0 +1,20 @@
#!/bin/bash
set -e
# Detect architecture
ARCH=$(uname -m)
# Default paths (adjust as needed)
CUDA_PATH="${CUDA_PATH:-/usr/local/cuda}"
CUDSS_PATH="${CUDSS_PATH:-/usr/local/cudss}"
nvcc -o cudss_test cudss_test.cu \
-I"${CUDA_PATH}/include" \
-I"${CUDSS_PATH}/include" \
-L"${CUDA_PATH}/lib64" \
-L"${CUDSS_PATH}/lib" \
-lcudss -lcudart \
-ccbin clang++ \
-Xcompiler "-Wall -O2"
echo "Build successful: cudss_test (${ARCH})"

197
src/cudss_test.cu Normal file
View File

@ -0,0 +1,197 @@
/*
* cuDSS Test Program
*
* A standalone test/reproduction tool for cuDSS linear system solving.
* Designed to import matrices and configurations exported from other programs.
*/
#include <cuda_runtime.h>
#include <cudss.h>
#include <stdio.h>
#include <stdlib.h>
/* ============================================================================
* Logging
* ============================================================================ */
#define LOG(fmt, ...) fprintf(stdout, "[cudss_test] " fmt "\n", ##__VA_ARGS__)
#define LOG_ERROR(fmt, ...) fprintf(stderr, "[cudss_test ERROR] " fmt "\n", ##__VA_ARGS__)
/* ============================================================================
* Error Checking Macros
* ============================================================================ */
#define CUDA_CHECK(call) \
do { \
cudaError_t err = (call); \
if (err != cudaSuccess) { \
LOG_ERROR("CUDA error at %s:%d - %s", __FILE__, __LINE__, \
cudaGetErrorString(err)); \
exit(EXIT_FAILURE); \
} \
} while (0)
#define CUDSS_CHECK(call) \
do { \
cudssStatus_t status = (call); \
if (status != CUDSS_STATUS_SUCCESS) { \
LOG_ERROR("cuDSS error at %s:%d - status %d", __FILE__, __LINE__, \
(int)status); \
exit(EXIT_FAILURE); \
} \
} while (0)
/* ============================================================================
* Type Definitions
* ============================================================================ */
/* CSR (Compressed Sparse Row) matrix representation */
struct CsrMatrix {
int numRows;
int numCols;
int numNonZeros;
int *rowOffsets; /* Size: numRows + 1 */
int *colIndices; /* Size: numNonZeros */
double *values; /* Size: numNonZeros */
/* Device pointers */
int *d_rowOffsets;
int *d_colIndices;
double *d_values;
};
/* Dense matrix representation (column-major for cuDSS compatibility) */
struct DenseMatrix {
int numRows;
int numCols;
int leadingDim; /* Leading dimension (stride between columns) */
double *values; /* Size: leadingDim * numCols */
/* Device pointer */
double *d_values;
};
/* ============================================================================
* Matrix Initialization/Cleanup Functions
* ============================================================================ */
void initCsrMatrix(struct CsrMatrix *mat) {
mat->numRows = 0;
mat->numCols = 0;
mat->numNonZeros = 0;
mat->rowOffsets = NULL;
mat->colIndices = NULL;
mat->values = NULL;
mat->d_rowOffsets = NULL;
mat->d_colIndices = NULL;
mat->d_values = NULL;
}
void freeCsrMatrix(struct CsrMatrix *mat) {
if (mat->rowOffsets) free(mat->rowOffsets);
if (mat->colIndices) free(mat->colIndices);
if (mat->values) free(mat->values);
if (mat->d_rowOffsets) cudaFree(mat->d_rowOffsets);
if (mat->d_colIndices) cudaFree(mat->d_colIndices);
if (mat->d_values) cudaFree(mat->d_values);
initCsrMatrix(mat);
}
void initDenseMatrix(struct DenseMatrix *mat) {
mat->numRows = 0;
mat->numCols = 0;
mat->leadingDim = 0;
mat->values = NULL;
mat->d_values = NULL;
}
void freeDenseMatrix(struct DenseMatrix *mat) {
if (mat->values) free(mat->values);
if (mat->d_values) cudaFree(mat->d_values);
initDenseMatrix(mat);
}
/* ============================================================================
* Version Information
* ============================================================================ */
void printCudaVersion(void) {
int runtimeVersion = 0;
int driverVersion = 0;
CUDA_CHECK(cudaRuntimeGetVersion(&runtimeVersion));
CUDA_CHECK(cudaDriverGetVersion(&driverVersion));
int runtimeMajor = runtimeVersion / 1000;
int runtimeMinor = (runtimeVersion % 1000) / 10;
int driverMajor = driverVersion / 1000;
int driverMinor = (driverVersion % 1000) / 10;
LOG("CUDA Runtime Version: %d.%d", runtimeMajor, runtimeMinor);
LOG("CUDA Driver Version: %d.%d", driverMajor, driverMinor);
}
void printCudssVersion(void) {
int major = 0;
int minor = 0;
int patch = 0;
CUDSS_CHECK(cudssGetProperty(MAJOR_VERSION, &major));
CUDSS_CHECK(cudssGetProperty(MINOR_VERSION, &minor));
CUDSS_CHECK(cudssGetProperty(PATCH_LEVEL, &patch));
LOG("cuDSS Version: %d.%d.%d", major, minor, patch);
}
void printDeviceInfo(void) {
int deviceCount = 0;
CUDA_CHECK(cudaGetDeviceCount(&deviceCount));
if (deviceCount == 0) {
LOG_ERROR("No CUDA-capable devices found");
exit(EXIT_FAILURE);
}
int device = 0;
CUDA_CHECK(cudaGetDevice(&device));
struct cudaDeviceProp props;
CUDA_CHECK(cudaGetDeviceProperties(&props, device));
LOG("Device: %s (compute %d.%d)", props.name, props.major, props.minor);
LOG("Memory: %.2f GB", (double)props.totalGlobalMem / (1024.0 * 1024.0 * 1024.0));
}
/* ============================================================================
* Main Entry Point
* ============================================================================ */
int main(int argc, char **argv) {
LOG("cuDSS Test Program");
LOG("==================");
/* Print version information */
printCudaVersion();
printCudssVersion();
printDeviceInfo();
/* Initialize cuDSS */
cudssHandle_t handle = NULL;
CUDSS_CHECK(cudssCreate(&handle));
LOG("cuDSS handle created successfully");
/* TODO: Parse command line arguments for config/matrix files */
/* TODO: Load matrix from binary file */
/* TODO: Load cuDSS configuration */
/* TODO: Run factorization + solve */
/* Cleanup */
CUDSS_CHECK(cudssDestroy(handle));
LOG("cuDSS handle destroyed");
LOG("Done.");
return 0;
}