1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*!
# Kernel cache management for rocFFT
This module provides functions to serialize and deserialize the rocFFT
compiled kernel cache, allowing kernel caches to be saved and loaded
between application runs.
*/
use cratebindings;
use crate;
use ptr;
use slice;
/// A buffer containing serialized kernel cache data
/// Serialize the current compiled kernel cache into a buffer
///
/// This function captures the current state of the rocFFT compiled kernel cache
/// and serializes it into a buffer that can be saved and later deserialized.
/// This can significantly improve startup performance for applications that
/// use the same FFT configurations repeatedly.
///
/// # Returns
///
/// A result containing the serialized cache buffer
///
/// # Example
///
/// ```no_run
/// use crate::rocfft;
/// use std::fs::File;
/// use std::io::Write;
///
/// fn main() -> Result<(), Box<dyn std::error::Error>> {
/// rocfft::setup()?;
///
/// // After running some transforms, serialize the cache
/// let buffer = rocfft::cache::serialize()?;
///
/// // Save to a file
/// let mut file = File::create("rocfft_cache.bin")?;
/// file.write_all(buffer.as_slice())?;
///
/// rocfft::cleanup()?;
/// Ok(())
/// }
/// ```
/// Deserialize a buffer into the compiled kernel cache
///
/// This function loads a previously serialized kernel cache into the rocFFT
/// runtime, which can avoid recompilation of kernels and improve startup
/// performance.
///
/// # Arguments
///
/// * `data` - Slice containing the serialized cache data
///
/// # Returns
///
/// A result indicating success or an error
///
/// # Example
///
/// ```no_run
/// use crate::rocfft;
/// use std::fs::File;
/// use std::io::Read;
///
/// fn main() -> Result<(), Box<dyn std::error::Error>> {
/// // Load from a file before initializing rocFFT
/// let mut file = File::open("rocfft_cache.bin")?;
/// let mut data = Vec::new();
/// file.read_to_end(&mut data)?;
///
/// rocfft::setup()?;
///
/// // Deserialize into the cache
/// rocfft::cache::deserialize(&data)?;
///
/// // Now use rocFFT with precompiled kernels
///
/// rocfft::cleanup()?;
/// Ok(())
/// }
/// ```