Remoev unnecessary logging of cuLibraryGetModule (#529)
Some checks are pending
ZLUDA / Build (Linux) (push) Waiting to run
ZLUDA / Build (Windows) (push) Waiting to run
ZLUDA / Build AMD GPU unit tests (push) Waiting to run
ZLUDA / Run AMD GPU unit tests (push) Blocked by required conditions

The content of the Module gets logged in `cuLibraryLoadData` anyway, current logging leads to duplicate logs
This commit is contained in:
Andrzej Janik 2025-09-29 14:34:28 -07:00 committed by GitHub
commit 78c431fd40
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 1 additions and 35 deletions

View file

@ -847,7 +847,6 @@ cuda_function_declarations!(
cuDeviceGetAttribute, cuDeviceGetAttribute,
cuDeviceComputeCapability, cuDeviceComputeCapability,
cuModuleLoadFatBinary, cuModuleLoadFatBinary,
cuLibraryGetModule,
cuLibraryLoadData cuLibraryLoadData
], ],
override_fn_core <= [cuGetProcAddress, cuGetProcAddress_v2], override_fn_core <= [cuGetProcAddress, cuGetProcAddress_v2],
@ -1388,20 +1387,6 @@ pub(crate) fn cuModuleLoadFatBinary_Post(
state.record_new_library(unsafe { *module }, fatbin_header.cast(), fn_logger) state.record_new_library(unsafe { *module }, fatbin_header.cast(), fn_logger)
} }
#[allow(non_snake_case)]
pub(crate) fn cuLibraryGetModule_Post(
module: *mut cuda_types::cuda::CUmodule,
library: cuda_types::cuda::CUlibrary,
state: &mut trace::StateTracker,
fn_logger: &mut FnCallLog,
_result: CUresult,
) {
match state.libraries.get(&library).copied() {
None => fn_logger.log(log::ErrorEntry::UnknownLibrary(library)),
Some(code) => state.record_new_library(unsafe { *module }, code.0, fn_logger),
}
}
#[allow(non_snake_case)] #[allow(non_snake_case)]
pub(crate) fn cuLibraryLoadData_Post( pub(crate) fn cuLibraryLoadData_Post(
library: *mut cuda_types::cuda::CUlibrary, library: *mut cuda_types::cuda::CUlibrary,
@ -1416,9 +1401,6 @@ pub(crate) fn cuLibraryLoadData_Post(
fn_logger: &mut FnCallLog, fn_logger: &mut FnCallLog,
_result: CUresult, _result: CUresult,
) { ) {
state
.libraries
.insert(unsafe { *library }, trace::CodePointer(code));
// TODO: this is not correct, but it's enough for now, we just want to // TODO: this is not correct, but it's enough for now, we just want to
// save the binary to disk // save the binary to disk
state.record_new_library(unsafe { CUmodule((*library).0.cast()) }, code, fn_logger); state.record_new_library(unsafe { CUmodule((*library).0.cast()) }, code, fn_logger);

View file

@ -2,7 +2,6 @@ use super::Settings;
use crate::FnCallLog; use crate::FnCallLog;
use crate::LogEntry; use crate::LogEntry;
use cuda_types::cuda::*; use cuda_types::cuda::*;
use format::CudaDisplay;
use std::error::Error; use std::error::Error;
use std::ffi::c_void; use std::ffi::c_void;
use std::ffi::NulError; use std::ffi::NulError;
@ -302,7 +301,6 @@ pub(crate) enum ErrorEntry {
overriden: [u64; 2], overriden: [u64; 2],
}, },
NullPointer(&'static str), NullPointer(&'static str),
UnknownLibrary(CUlibrary),
SavedModule(String), SavedModule(String),
} }
@ -426,12 +424,6 @@ impl Display for ErrorEntry {
ErrorEntry::NullPointer(type_) => { ErrorEntry::NullPointer(type_) => {
write!(f, "Null pointer of type {type_} encountered") write!(f, "Null pointer of type {type_} encountered")
} }
ErrorEntry::UnknownLibrary(culibrary) => {
write!(f, "Unknown library: ")?;
let mut temp_buffer = Vec::new();
CudaDisplay::write(culibrary, "", 0, &mut temp_buffer).ok();
f.write_str(&unsafe { String::from_utf8_unchecked(temp_buffer) })
}
ErrorEntry::SavedModule(file) => write!(f, "Saved module to {file}"), ErrorEntry::SavedModule(file) => write!(f, "Saved module to {file}"),
} }
} }

View file

@ -4,7 +4,7 @@ use crate::{
}; };
use cuda_types::cuda::*; use cuda_types::cuda::*;
use goblin::{elf, elf32, elf64}; use goblin::{elf, elf32, elf64};
use rustc_hash::{FxHashMap, FxHashSet}; use rustc_hash::FxHashSet;
use std::{ use std::{
ffi::{c_void, CStr, CString}, ffi::{c_void, CStr, CString},
fs::{self, File}, fs::{self, File},
@ -20,23 +20,15 @@ use unwrap_or::unwrap_some_or;
// * writes out relevant state change and details to disk and log // * writes out relevant state change and details to disk and log
pub(crate) struct StateTracker { pub(crate) struct StateTracker {
writer: DumpWriter, writer: DumpWriter,
pub(crate) libraries: FxHashMap<CUlibrary, CodePointer>,
saved_modules: FxHashSet<CUmodule>, saved_modules: FxHashSet<CUmodule>,
library_counter: usize, library_counter: usize,
pub(crate) override_cc: Option<(u32, u32)>, pub(crate) override_cc: Option<(u32, u32)>,
} }
#[derive(Clone, Copy)]
pub(crate) struct CodePointer(pub *const c_void);
unsafe impl Send for CodePointer {}
unsafe impl Sync for CodePointer {}
impl StateTracker { impl StateTracker {
pub(crate) fn new(settings: &Settings) -> Self { pub(crate) fn new(settings: &Settings) -> Self {
StateTracker { StateTracker {
writer: DumpWriter::new(settings.dump_dir.clone()), writer: DumpWriter::new(settings.dump_dir.clone()),
libraries: FxHashMap::default(),
saved_modules: FxHashSet::default(), saved_modules: FxHashSet::default(),
library_counter: 0, library_counter: 0,
override_cc: settings.override_cc, override_cc: settings.override_cc,