mirror of
https://github.com/vosen/ZLUDA.git
synced 2025-04-23 18:08:57 +03:00
Revert "Fix offset calculation in kernel launch"
This reverts commit d7d38256e0580c3cfb649a641d9ed62c6ff0fc20.
This commit is contained in:
@ -110,24 +110,23 @@ pub fn launch_kernel(
|
|||||||
match (buffer_size, buffer_ptr) {
|
match (buffer_size, buffer_ptr) {
|
||||||
(Some(buffer_size), Some(buffer_ptr)) => {
|
(Some(buffer_size), Some(buffer_ptr)) => {
|
||||||
let sum_of_kernel_argument_sizes =
|
let sum_of_kernel_argument_sizes =
|
||||||
func.arg_size
|
func.arg_size.iter().fold(0, |offset, size_of_arg| {
|
||||||
.iter()
|
size_of_arg + round_up_to_multiple(offset, *size_of_arg)
|
||||||
.fold(0, |sum_of_arg_sizes, size_of_arg| {
|
|
||||||
sum_of_arg_sizes + align_to_usize(*size_of_arg)
|
|
||||||
});
|
});
|
||||||
if buffer_size != sum_of_kernel_argument_sizes {
|
if buffer_size != sum_of_kernel_argument_sizes {
|
||||||
return Err(CUresult::CUDA_ERROR_INVALID_VALUE);
|
return Err(CUresult::CUDA_ERROR_INVALID_VALUE);
|
||||||
}
|
}
|
||||||
let mut offset = 0;
|
let mut offset = 0;
|
||||||
for (i, arg_size) in func.arg_size.iter().enumerate() {
|
for (i, arg_size) in func.arg_size.iter().enumerate() {
|
||||||
|
let buffer_offset = round_up_to_multiple(offset, *arg_size);
|
||||||
unsafe {
|
unsafe {
|
||||||
func.base.set_arg_raw(
|
func.base.set_arg_raw(
|
||||||
i as u32,
|
i as u32,
|
||||||
*arg_size,
|
*arg_size,
|
||||||
buffer_ptr.add(offset) as *const _,
|
buffer_ptr.add(buffer_offset) as *const _,
|
||||||
)?
|
)?
|
||||||
};
|
};
|
||||||
offset += align_to_usize(*arg_size);
|
offset = buffer_offset + *arg_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => return Err(CUresult::CUDA_ERROR_INVALID_VALUE),
|
_ => return Err(CUresult::CUDA_ERROR_INVALID_VALUE),
|
||||||
@ -160,9 +159,8 @@ pub fn launch_kernel(
|
|||||||
})?
|
})?
|
||||||
}
|
}
|
||||||
|
|
||||||
fn align_to_usize(value: usize) -> usize {
|
fn round_up_to_multiple(x: usize, multiple: usize) -> usize {
|
||||||
let multiple = std::mem::size_of::<usize>();
|
((x + multiple - 1) / multiple) * multiple
|
||||||
((value + multiple - 1) / multiple) * multiple
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn get_attribute(
|
pub(crate) fn get_attribute(
|
||||||
|
@ -573,24 +573,24 @@ fn dump_arguments(
|
|||||||
}
|
}
|
||||||
match (buffer_size, buffer_ptr) {
|
match (buffer_size, buffer_ptr) {
|
||||||
(Some(buffer_size), Some(buffer_ptr)) => {
|
(Some(buffer_size), Some(buffer_ptr)) => {
|
||||||
let sum_of_kernel_argument_sizes =
|
let sum_of_kernel_argument_sizes = args.iter().fold(0, |offset, size_of_arg| {
|
||||||
args.iter().fold(0, |sum_of_arg_sizes, size_of_arg| {
|
size_of_arg + round_up_to_multiple(offset, *size_of_arg)
|
||||||
sum_of_arg_sizes + align_to_usize(*size_of_arg)
|
|
||||||
});
|
});
|
||||||
if buffer_size != sum_of_kernel_argument_sizes {
|
if buffer_size != sum_of_kernel_argument_sizes {
|
||||||
return Err("Malformed `extra` parameter to kernel launch")?;
|
return Err("Malformed `extra` parameter to kernel launch")?;
|
||||||
}
|
}
|
||||||
let mut offset = 0;
|
let mut offset = 0;
|
||||||
for (i, arg_size) in args.iter().enumerate() {
|
for (i, arg_size) in args.iter().enumerate() {
|
||||||
|
let buffer_offset = round_up_to_multiple(offset, *arg_size);
|
||||||
unsafe {
|
unsafe {
|
||||||
dump_argument_to_file(
|
dump_argument_to_file(
|
||||||
&dump_dir,
|
&dump_dir,
|
||||||
i,
|
i,
|
||||||
*arg_size,
|
*arg_size,
|
||||||
buffer_ptr.add(offset) as *const _,
|
buffer_ptr.add(buffer_offset) as *const _,
|
||||||
)?
|
)?
|
||||||
};
|
};
|
||||||
offset += align_to_usize(*arg_size);
|
offset = buffer_offset + *arg_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => return Err("Malformed `extra` parameter to kernel launch")?,
|
_ => return Err("Malformed `extra` parameter to kernel launch")?,
|
||||||
@ -599,9 +599,8 @@ fn dump_arguments(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn align_to_usize(value: usize) -> usize {
|
fn round_up_to_multiple(x: usize, multiple: usize) -> usize {
|
||||||
let multiple = std::mem::size_of::<usize>();
|
((x + multiple - 1) / multiple) * multiple
|
||||||
((value + multiple - 1) / multiple) * multiple
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe fn dump_argument_to_file(
|
unsafe fn dump_argument_to_file(
|
||||||
|
Reference in New Issue
Block a user