Skip to content
Merged
Show file tree
Hide file tree
Changes from 56 commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
b968692
- WIP
eng-flavio-teixeira Aug 7, 2026
6eda339
- Refactor logic to decide 64-bit indexing for transpose kernels.
eng-flavio-teixeira Aug 7, 2026
8821131
Merge commit '8d24cb478db3d2e3f85a692e6fea310b8fe16fea' into kernel_o…
eng-flavio-teixeira Aug 7, 2026
24a3313
- CHANGELOG.
eng-flavio-teixeira Aug 7, 2026
2bf92ff
Merge commit 'c4a1de3928b2c25d988fb06cb41f17baeadbe3cb' into kernel_o…
eng-flavio-teixeira Aug 10, 2026
c0001b2
- Refactor enum.
eng-flavio-teixeira Aug 10, 2026
72fdbe5
- Move LeafNode 64 bit indexing check to different translation unit.
eng-flavio-teixeira Aug 10, 2026
ba027df
- Fixes.
eng-flavio-teixeira Aug 10, 2026
ae1d37e
- Fix typo.
eng-flavio-teixeira Aug 11, 2026
3d3ffd1
WIP
eng-flavio-teixeira Aug 12, 2026
875f3b4
- Refactoring.
eng-flavio-teixeira Aug 13, 2026
2982417
- Clean up.
eng-flavio-teixeira Aug 14, 2026
2bc67de
- WIP.
eng-flavio-teixeira Aug 14, 2026
a557b87
- Fix issue with rtc test harness
eng-flavio-teixeira Aug 14, 2026
d15f0c9
- Merge with develop
eng-flavio-teixeira Aug 17, 2026
29aa734
Merge branch 'develop' into transpose_64_bit_indexing
eng-flavio-teixeira Aug 17, 2026
48ba6af
- WIP: Indexing for CC/CR/RC variants.
eng-flavio-teixeira Aug 19, 2026
17e4d11
- WIP: Fused 2D kernels
eng-flavio-teixeira Aug 19, 2026
53c36d8
- Implement review suggestion.
eng-flavio-teixeira Aug 20, 2026
4a1b304
Merge branch 'transpose_64_bit_indexing' of https://github.com/eng-fl…
eng-flavio-teixeira Aug 20, 2026
092d019
- Implement review suggestion.
eng-flavio-teixeira Aug 20, 2026
e52365f
- Implement review suggestion.
eng-flavio-teixeira Aug 20, 2026
1469e4c
- Add kernel index limit workaround for gfx1250.
eng-flavio-teixeira Aug 20, 2026
bea7417
- Rename.
eng-flavio-teixeira Aug 20, 2026
ece7456
- Merge with transpose_64_bit_indexing branch.
eng-flavio-teixeira Aug 20, 2026
91c1f5c
- Fix merge conflicts.
eng-flavio-teixeira Aug 20, 2026
052e392
- Merge with develop.
eng-flavio-teixeira Aug 21, 2026
22c112c
- Fix merge conflict.
eng-flavio-teixeira Aug 21, 2026
7fc5fea
- Merge with transpose_64_bit_indexing branch.
eng-flavio-teixeira Aug 21, 2026
4e5968d
- Fix merge conflicts.
eng-flavio-teixeira Aug 21, 2026
fbc492d
- Move GetKernelIndexType to base class and remove redudant subclass…
eng-flavio-teixeira Aug 21, 2026
725c347
- Fused Bluestein
eng-flavio-teixeira Aug 24, 2026
a815f25
- Bluestein single-kernel.
eng-flavio-teixeira Aug 24, 2026
02264c5
- Fix template in fused Bluestein.
eng-flavio-teixeira Aug 24, 2026
9f50424
- Partial-pass kernels.
eng-flavio-teixeira Aug 25, 2026
78ec558
- Clean up
eng-flavio-teixeira Aug 25, 2026
bc26cda
- Merge with develop
eng-flavio-teixeira Aug 25, 2026
9f9bde1
- Fix merge conflicts.
eng-flavio-teixeira Aug 25, 2026
137361a
- Real/Complex copy kernels.
eng-flavio-teixeira Aug 26, 2026
86bec91
- Clean up.
eng-flavio-teixeira Aug 26, 2026
7630918
- Clean up.
eng-flavio-teixeira Aug 26, 2026
ee3877a
- Add missing append_index in real/complex copy kernels.
eng-flavio-teixeira Aug 26, 2026
b25c3a8
- More.
eng-flavio-teixeira Aug 26, 2026
a01f8bc
- More fixes.
eng-flavio-teixeira Aug 26, 2026
227d2da
- More plumbing.
eng-flavio-teixeira Aug 26, 2026
d79e8a5
- Move index_type from subclasses to RTCKernel.
eng-flavio-teixeira Aug 26, 2026
d407e50
- Add index_type to chirp.
eng-flavio-teixeira Aug 26, 2026
21793c5
- Twiddle kernels
eng-flavio-teixeira Aug 27, 2026
4edd184
- Refactoring.
eng-flavio-teixeira Aug 27, 2026
e9f9939
- More refactoring.
eng-flavio-teixeira Aug 27, 2026
b512027
- Further fixes.
eng-flavio-teixeira Aug 27, 2026
db8927b
- Fix chirp for very large transforms.
eng-flavio-teixeira Aug 27, 2026
d15788a
- More fixes.
eng-flavio-teixeira Aug 27, 2026
fe9d7cf
- More.
eng-flavio-teixeira Aug 27, 2026
d698574
- Fix for lenghts above 32-bit.
eng-flavio-teixeira Aug 28, 2026
aac94e6
- Clang.
eng-flavio-teixeira Aug 28, 2026
ac055aa
- Add comment.
eng-flavio-teixeira Sep 2, 2026
bc4a399
- Address review suggestion.
eng-flavio-teixeira Sep 2, 2026
387e9bd
- Fix kernel harness test.
eng-flavio-teixeira Sep 3, 2026
a4bf137
- Add Bluestein check in maxkernelindex maxkernelstride
eng-flavio-teixeira Sep 3, 2026
5bc8561
Merge branch 'develop' into stockham_64_bit_indexing
eng-flavio-teixeira Sep 3, 2026
56be6b2
- Remove virtual keyword from GetKIntType.
eng-flavio-teixeira Sep 8, 2026
04b7431
Add adhoc test cases for copy kernels.
eng-flavio-teixeira Sep 8, 2026
44bec0c
- Add remaining ad-hoc test cases.
eng-flavio-teixeira Sep 8, 2026
e5465bb
- Address review suggestions.
eng-flavio-teixeira Sep 9, 2026
7425678
- fix windows build error.
eng-flavio-teixeira Sep 10, 2026
cccaf25
- Add windows build error fix to hipfft.
eng-flavio-teixeira Sep 10, 2026
cdd6811
Merge branch 'develop' into stockham_64_bit_indexing
eng-flavio-teixeira Sep 11, 2026
e29a94c
Merge branch 'develop' into stockham_64_bit_indexing
eng-flavio-teixeira Sep 14, 2026
9bbb159
- Fix unit tests.
eng-flavio-teixeira Sep 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions projects/rocfft/library/src/chirp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ void launch_chirp_kernel(const size_t N,
auto blockSize = CHIRP_THREADS;
auto numBlocks = DivRoundingUp<size_t>(N, blockSize);

auto kernel = RTCKernelChirp::generate(deviceProp.gcnArchName, precision);
RTCKernelArgs kargs;
kargs.append_size_t(N);
auto kernel = RTCKernelChirp::generate(deviceProp.gcnArchName, N, precision);
RTCKernelArgs kargs(RTCKernelChirp::itype(deviceProp.gcnArchName, N));
kargs.append_kint(N);
kargs.append_ptr(output);
kernel.get()->launch(kargs, dim3(numBlocks), dim3(blockSize), 0, deviceProp, stream);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

#pragma once

#include "../../include/rtc_kernel.h"
#include "generator.h"

enum BluesteinOperationType
Expand Down Expand Up @@ -47,14 +48,15 @@ struct BluesteinData
// templates
//
Variable scalar_type{"scalar_type", "typename"};
Variable integer_type{"integer_type", "typename"};

//
// internal variables
//
Variable chirp{"chirp", "const scalar_type", true, true};
Variable data_idx{"data_idx", "size_t"};
Variable data_voffset{"data_voffset", "size_t"};
Variable data_soffset{"data_soffset", "size_t"};
Variable data_idx{"data_idx", "integer_type"};
Variable data_voffset{"data_voffset", "integer_type"};
Variable data_soffset{"data_soffset", "integer_type"};
Variable data_rw_flag{"data_rw_flag", "bool"};
Variable buf_in{"buf_in", "scalar_type", true};
Variable buf_inre{"buf_inre", "real_type_t<scalar_type>", true, true};
Expand All @@ -66,21 +68,21 @@ struct BluesteinData
Variable data_bufre{"data_bufre", "real_type_t<scalar_type>", true, true};
Variable data_bufim{"data_bufim", "real_type_t<scalar_type>", true, true};
Variable data_elem{"data_elem", "scalar_type"};
Variable length_N_blue{"length_N_blue", "const size_t"};
Variable length_M_blue{"length_M_blue", "const size_t"};
Variable global_stride_in_0{"global_stride_in_0", "const size_t"};
Variable global_stride_in_1{"global_stride_in_1", "const size_t"};
Variable global_idist{"global_idist", "const size_t"};
Variable global_stride_out_0{"global_stride_out_0", "const size_t"};
Variable global_stride_out_1{"global_stride_out_1", "const size_t"};
Variable global_odist{"global_odist", "const size_t"};
Variable transform_idx{"transform_idx", "const size_t"};
Variable length_N_blue{"length_N_blue", "const integer_type"};
Variable length_M_blue{"length_M_blue", "const integer_type"};
Variable global_stride_in_0{"global_stride_in_0", "const integer_type"};
Variable global_stride_in_1{"global_stride_in_1", "const integer_type"};
Variable global_idist{"global_idist", "const integer_type"};
Variable global_stride_out_0{"global_stride_out_0", "const integer_type"};
Variable global_stride_out_1{"global_stride_out_1", "const integer_type"};
Variable global_odist{"global_odist", "const integer_type"};
Variable transform_idx{"transform_idx", "const integer_type"};

//
// variables borrowed from stockham_gen_base.h
//
Variable global_data_id{"global_data_id", "size_t"};
Variable global_transf_id{"global_transf_id", "size_t"};
Variable global_data_id{"global_data_id", "integer_type"};
Variable global_transf_id{"global_transf_id", "integer_type"};
Variable load_cb_data{"load_cb_data", "void*"};
Variable load_cb_fn{"load_cb_fn", "void", true, true};
Variable store_cb_data{"store_cb_data", "void*"};
Expand Down Expand Up @@ -602,7 +604,7 @@ class BluesteinFunction

std::string render_template()
{
return "<" + data.scalar_type.render() + ">";
return "<" + data.scalar_type.render() + "," + data.integer_type.render() + ">";
}

const std::vector<std::string> function_name = {"bluestein_load_cc_fwd_chirp_device",
Expand Down Expand Up @@ -716,6 +718,7 @@ class BluesteinKernel
{
TemplateList tpls;
tpls.append(blueData.scalar_type);
tpls.append(blueData.integer_type);

return tpls;
}
Expand Down
53 changes: 31 additions & 22 deletions projects/rocfft/library/src/device/generator/fftgenerator.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

#pragma once
#include "../../../../shared/arithmetic.h"
#include "../../include/rtc_kernel.h"
#include "generator.h"

#include <cmath>
Expand Down Expand Up @@ -244,10 +245,14 @@ struct FFTComputeOffsets

std::shared_ptr<Context> context;

Variable transform{"transform", "size_t"};
Variable remaining{"remaining", "size_t"};
Variable index_along_d{"index_along_d", "size_t"};
Variable d{"d", "int"};
// transform is blockIdx.x scaled by transforms_per_block, so it
// outgrows 32 bits while the grid itself is still legal; remaining
// and index_along_d are decomposed from it against lengths. d only
// counts dimensions, so it stays narrow.
Variable transform{"transform", "integer_type"};
Variable remaining{"remaining", "integer_type"};
Variable index_along_d{"index_along_d", "integer_type"};
Variable d{"d", rtc_kint_type(KIntType::U32)};

FFTComputeOffsets() = delete;
FFTComputeOffsets(unsigned int length0,
Expand Down Expand Up @@ -1059,18 +1064,20 @@ struct StockhamTransform
std::shared_ptr<Context> context;

FFTBuffer R{"R", Literal{0}, Literal{1}, 0};
FFTBuffer lds{"lds", Variable{"offset_lds", "int"}, Variable{"stride_lds", "int"}};
FFTBuffer X{"X", Variable{"offset_lds", "size_t"}, Literal{1}};
FFTBuffer lds{"lds",
Variable{"offset_lds", rtc_kint_type(KIntType::U32)},
Variable{"stride_lds", rtc_kint_type(KIntType::U32)}};
FFTBuffer X{"X", Variable{"offset_lds", rtc_kint_type(KIntType::U32)}, Literal{1}};

Variable dim{"dim", "unsigned int"};
Variable nbatch{"nbatch", "size_t"};
Variable lengths{"lengths", "size_t", true, true};
Variable stride{"stride", "size_t", true, true};
Variable offset{"offset", "size_t"};
Variable dim{"dim", rtc_kint_type(KIntType::U32)};
Variable nbatch{"nbatch", "integer_type"};
Variable lengths{"lengths", "integer_type", true, true};
Variable stride{"stride", "integer_type", true, true};
Variable offset{"offset", "integer_type"};

Variable write{"write", "bool"};
Variable thread{"thread", "size_t"};
Variable batch{"batch", "size_t"};
Variable thread{"thread", rtc_kint_type(KIntType::U32)};
Variable batch{"batch", "integer_type"};

Variable twiddles{"twiddles", "const scalar_type", true, true};
Variable load_cb_fn{"load_cb_fn", "void*"};
Expand Down Expand Up @@ -1152,23 +1159,25 @@ struct BluesteinTransform
// FFT registers
FFTBuffer R{"R", Literal{0}, Literal{1}, 0};
// LDS buffer
FFTBuffer A{"A", Variable{"offset_lds", "int"}, Variable{"stride_lds", "int"}};
FFTBuffer A{"A",
Variable{"offset_lds", rtc_kint_type(KIntType::U32)},
Variable{"stride_lds", rtc_kint_type(KIntType::U32)}};
// FFTed chirp signal (second half of chirp buffer)
FFTBuffer B{"B", Literal{0}, Literal{1}};
// chirp signal (first half of chirp buffer)
FFTBuffer a{"a", Literal{0}, Literal{1}};
// user data
FFTBuffer X{"X", Variable{"offset", "size_t"}, Variable{"stride0", "size_t"}};
FFTBuffer X{"X", Variable{"offset", "integer_type"}, Variable{"stride0", "integer_type"}};

Variable dim{"dim", "unsigned int"};
Variable nbatch{"nbatch", "size_t"};
Variable lengths{"lengths", "size_t", true, true};
Variable stride{"stride", "size_t", true, true};
Variable offset{"offset", "size_t"};
Variable dim{"dim", rtc_kint_type(KIntType::U32)};
Variable nbatch{"nbatch", "integer_type"};
Variable lengths{"lengths", "integer_type", true, true};
Variable stride{"stride", "integer_type", true, true};
Variable offset{"offset", "integer_type"};

Variable write{"write", "bool"};
Variable thread{"thread", "size_t"};
Variable batch{"batch", "size_t"};
Variable thread{"thread", rtc_kint_type(KIntType::U32)};
Variable batch{"batch", "integer_type"};
Variable val{"val", "scalar_type"};

Variable buf_temp{"buf_temp", "scalar_type", true, true};
Expand Down
26 changes: 20 additions & 6 deletions projects/rocfft/library/src/device/generator/stockham_gen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -854,14 +854,26 @@ int main()
if(direct_to_from_reg.size() != 2)
throw std::runtime_error("CS_3D_PP requires two direct_to_from_reg configuration");

StockhamGeneratorSpecs specs1(
factors1, {}, precision, gcn_arch_name, workgroup_size[0], scheme, transform_type);
StockhamGeneratorSpecs specs1(KIntType::U32,
factors1,
{},
precision,
gcn_arch_name,
workgroup_size[0],
scheme,
transform_type);
specs1.direct_to_from_reg = direct_to_from_reg[0];
specs1.threads_per_transform = threads_per_transform[0];
specs1.wgs_is_derived = true;

StockhamGeneratorSpecs specs2(
factors2, {}, precision, gcn_arch_name, workgroup_size[1], scheme, transform_type);
StockhamGeneratorSpecs specs2(KIntType::U32,
factors2,
{},
precision,
gcn_arch_name,
workgroup_size[1],
scheme,
transform_type);
specs2.direct_to_from_reg = direct_to_from_reg[1];
specs2.threads_per_transform = threads_per_transform[1];
specs2.wgs_is_derived = true;
Expand Down Expand Up @@ -900,7 +912,8 @@ int main()
++arg;
factors = parse_uints_csv(*arg);

StockhamGeneratorSpecs specs(factors,
StockhamGeneratorSpecs specs(KIntType::U32,
factors,
factors2d,
precision,
gcn_arch_name,
Expand All @@ -915,7 +928,8 @@ int main()
specs.threads_per_transform = threads_per_transform.front();

// second dimension for 2D_SINGLE
StockhamGeneratorSpecs specs2d(factors2d,
StockhamGeneratorSpecs specs2d(KIntType::U32,
factors2d,
factors,
precision,
gcn_arch_name,
Expand Down
8 changes: 6 additions & 2 deletions projects/rocfft/library/src/device/generator/stockham_gen.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

#pragma once
#include "../../../../shared/arithmetic.h"
#include "../../include/rtc_kernel.h"
#include "../kernels/device_enum.h"
#include "rocfft/rocfft.h"
#include <optional>
Expand All @@ -31,14 +32,16 @@

struct StockhamGeneratorSpecs
{
StockhamGeneratorSpecs(const std::vector<unsigned int>& factors,
StockhamGeneratorSpecs(const KIntType& itype,
const std::vector<unsigned int>& factors,
const std::vector<unsigned int>& factors2d,
unsigned int precision,
const std::string& gcn_arch_name,
unsigned int workgroup_size,
const std::string& scheme,
const std::optional<unsigned int>& transform_type = std::nullopt)
: factors(factors)
: itype(itype)
, factors(factors)
, factors2d(factors2d)
, precision(precision)
, gcn_arch_name(gcn_arch_name)
Expand All @@ -50,6 +53,7 @@ struct StockhamGeneratorSpecs
{
}

KIntType itype;
std::vector<unsigned int> factors;
std::vector<unsigned int> factors2d;
std::vector<unsigned int> factors_pp;
Expand Down
10 changes: 5 additions & 5 deletions projects/rocfft/library/src/device/generator/stockham_gen_2d.h
Original file line number Diff line number Diff line change
Expand Up @@ -238,12 +238,12 @@ struct StockhamKernelFused2D : public StockhamKernelRR
+ " threads per 2d transform",
" (1 2d slab per thread block)"};

Variable d{"d", "int"};
Variable index_along_d{"index_along_d", "size_t"};
Variable remaining{"remaining", "size_t"};
Variable plength{"plength", "size_t"};
Variable d{"d", rtc_kint_type(KIntType::U32)};
Variable index_along_d{"index_along_d", "integer_type"};
Variable remaining{"remaining", "integer_type"};
Variable plength{"plength", "integer_type"};

Variable batch0{"batch0", "size_t"};
Variable batch0{"batch0", "integer_type"};

Variable SB_1ST{"SB_1ST", "const StrideBin"};
Variable SB_2ND{"SB_2ND", "const StrideBin"};
Expand Down
Loading
Loading