Skip to content

Commit 507dc96

Browse files
876polshuklaayush
authored andcommitted
feat: rv64 cuda sha2 (#2749)
Resolves INT-7530.
1 parent f29cc7e commit 507dc96

5 files changed

Lines changed: 20 additions & 21 deletions

File tree

extensions/sha2/circuit/cuda/include/block_hasher/variant.cuh

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ namespace sha2 {
77

88
// Common VM constants across SHA-2 variants.
99
inline constexpr size_t SHA2_REGISTER_READS = 3;
10-
inline constexpr size_t SHA2_READ_SIZE = 4;
11-
inline constexpr size_t SHA2_WRITE_SIZE = 4;
12-
inline constexpr size_t SHA2_MAIN_READ_SIZE = 4;
10+
inline constexpr size_t SHA2_READ_SIZE = 8;
11+
inline constexpr size_t SHA2_WRITE_SIZE = 8;
1312

1413
template <
1514
typename WordT,
@@ -43,8 +42,8 @@ struct Sha2VariantBase {
4342

4443
static constexpr size_t NUM_READ_ROWS = BLOCK_U8S / SHA2_READ_SIZE;
4544
static constexpr size_t STATE_BYTES = HASH_WORDS * WORD_U8S;
46-
static constexpr size_t BLOCK_READS = BLOCK_U8S / SHA2_MAIN_READ_SIZE;
47-
static constexpr size_t STATE_READS = STATE_BYTES / SHA2_MAIN_READ_SIZE;
45+
static constexpr size_t BLOCK_READS = BLOCK_U8S / SHA2_READ_SIZE;
46+
static constexpr size_t STATE_READS = STATE_BYTES / SHA2_READ_SIZE;
4847
static constexpr size_t STATE_WRITES = STATE_BYTES / SHA2_WRITE_SIZE;
4948
static constexpr size_t TIMESTAMP_DELTA =
5049
BLOCK_READS + STATE_READS + STATE_WRITES + SHA2_REGISTER_READS;

extensions/sha2/circuit/cuda/include/main/columns.cuh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ template <typename T> struct Sha2MainInstructionCols {
2424
T dst_reg_ptr;
2525
T state_reg_ptr;
2626
T input_reg_ptr;
27-
T dst_ptr_limbs[RV32_REGISTER_NUM_LIMBS];
28-
T state_ptr_limbs[RV32_REGISTER_NUM_LIMBS];
29-
T input_ptr_limbs[RV32_REGISTER_NUM_LIMBS];
27+
T dst_ptr_limbs[RV64_WORD_NUM_LIMBS];
28+
T state_ptr_limbs[RV64_WORD_NUM_LIMBS];
29+
T input_ptr_limbs[RV64_WORD_NUM_LIMBS];
3030
};
3131

3232
template <typename V, typename T> struct Sha2MainMemoryCols {

extensions/sha2/circuit/cuda/src/sha2_main.cu

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ static __device__ __forceinline__ void sha2_main_row_body(
5353
SHA2_MAIN_WRITE_INSTR(V, row, state_reg_ptr, header->state_reg_ptr);
5454
SHA2_MAIN_WRITE_INSTR(V, row, input_reg_ptr, header->input_reg_ptr);
5555

56-
uint8_t dst_ptr_bytes[RV32_REGISTER_NUM_LIMBS];
57-
uint8_t state_ptr_bytes[RV32_REGISTER_NUM_LIMBS];
58-
uint8_t input_ptr_bytes[RV32_REGISTER_NUM_LIMBS];
56+
uint8_t dst_ptr_bytes[RV64_WORD_NUM_LIMBS];
57+
uint8_t state_ptr_bytes[RV64_WORD_NUM_LIMBS];
58+
uint8_t input_ptr_bytes[RV64_WORD_NUM_LIMBS];
5959
memcpy(dst_ptr_bytes, &header->dst_ptr, sizeof(uint32_t));
6060
memcpy(state_ptr_bytes, &header->state_ptr, sizeof(uint32_t));
6161
memcpy(input_ptr_bytes, &header->input_ptr, sizeof(uint32_t));
@@ -66,12 +66,12 @@ static __device__ __forceinline__ void sha2_main_row_body(
6666

6767
// Range checks on top limbs
6868
uint8_t needs_range_check[4] = {
69-
dst_ptr_bytes[RV32_REGISTER_NUM_LIMBS - 1],
70-
state_ptr_bytes[RV32_REGISTER_NUM_LIMBS - 1],
71-
input_ptr_bytes[RV32_REGISTER_NUM_LIMBS - 1],
72-
input_ptr_bytes[RV32_REGISTER_NUM_LIMBS - 1],
69+
dst_ptr_bytes[RV64_WORD_NUM_LIMBS - 1],
70+
state_ptr_bytes[RV64_WORD_NUM_LIMBS - 1],
71+
input_ptr_bytes[RV64_WORD_NUM_LIMBS - 1],
72+
input_ptr_bytes[RV64_WORD_NUM_LIMBS - 1],
7373
};
74-
uint32_t shift = 1u << (RV32_REGISTER_NUM_LIMBS * RV32_CELL_BITS - ptr_max_bits);
74+
uint32_t shift = 1u << (RV64_WORD_NUM_LIMBS * RV64_CELL_BITS - ptr_max_bits);
7575
for (int i = 0; i < 4; i += 2) {
7676
bitwise_lookup.add_range(
7777
static_cast<uint32_t>(needs_range_check[i]) * shift,

extensions/sha2/circuit/src/extension/cuda.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,18 @@ impl VmProverExtension<GpuBabyBearPoseidon2Engine, DenseRecordArena, Sha2> for S
7777
}
7878
}
7979

80-
pub struct Sha2Rv32GpuBuilder;
80+
pub struct Sha2Rv64GpuBuilder;
8181

8282
type E = GpuBabyBearPoseidon2Engine;
8383

84-
impl VmBuilder<E> for Sha2Rv32GpuBuilder {
85-
type VmConfig = Sha2Rv32Config;
84+
impl VmBuilder<E> for Sha2Rv64GpuBuilder {
85+
type VmConfig = Sha2Rv64Config;
8686
type SystemChipInventory = SystemChipInventoryGPU;
8787
type RecordArena = DenseRecordArena;
8888

8989
fn create_chip_complex(
9090
&self,
91-
config: &Sha2Rv32Config,
91+
config: &Sha2Rv64Config,
9292
circuit: AirInventory<<E as StarkEngine>::SC>,
9393
device_ctx: &openvm_stark_backend::EngineDeviceCtx<E>,
9494
) -> Result<

extensions/sha2/circuit/src/extension/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ cfg_if::cfg_if! {
3535
mod cuda;
3636
pub use self::cuda::*;
3737
pub use self::cuda::Sha2GpuProverExt as Sha2ProverExt;
38-
pub use self::cuda::Sha2Rv32GpuBuilder as Sha2Rv64Builder;
38+
pub use self::cuda::Sha2Rv64GpuBuilder as Sha2Rv64Builder;
3939
} else {
4040
pub use self::Sha2CpuProverExt as Sha2ProverExt;
4141
pub use self::Sha2Rv64CpuBuilder as Sha2Rv64Builder;

0 commit comments

Comments
 (0)