diff options
| author | Wilson Fung <[email protected]> | 2012-04-08 17:41:45 -0800 |
|---|---|---|
| committer | Andrew Boktor <[email protected]> | 2014-08-14 13:19:05 -0700 |
| commit | 163d057e0a771b236a452b01d656b72175350234 (patch) | |
| tree | ffb37a98e4965d4516877b762ced4bf15ecd0a61 | |
| parent | 05b7b2485886db63dc901f73c226d93c16a43abe (diff) | |
Adding 64-bit support for atomicAdd, atomicExch, atomicCAS and created a brief directed test. Added floating point support for atomicAdd without testing.
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 11894]
| -rw-r--r-- | src/cuda-sim/instructions.cc | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/cuda-sim/instructions.cc b/src/cuda-sim/instructions.cc index 74e3bd2..550a076 100644 --- a/src/cuda-sim/instructions.cc +++ b/src/cuda-sim/instructions.cc @@ -910,12 +910,17 @@ void atom_callback( const inst_t* inst, ptx_thread_info* thread ) op_result.u32 = MY_CAS_I(data.u32, src2_data.u32, src3_data.u32); data_ready = true; break; + case B64_TYPE: + case U64_TYPE: + op_result.u64 = MY_CAS_I(data.u64, src2_data.u64, src3_data.u64); + data_ready = true; + break; case S32_TYPE: op_result.s32 = MY_CAS_I(data.s32, src2_data.s32, src3_data.s32); data_ready = true; break; default: - printf("Execution error: type mismatch (%x) with instruction\natom.CAS only accepts b32\n", to_type); + printf("Execution error: type mismatch (%x) with instruction\natom.CAS only accepts b32 and b64\n", to_type); assert(0); break; } @@ -931,6 +936,11 @@ void atom_callback( const inst_t* inst, ptx_thread_info* thread ) op_result.u32 = MY_EXCH(data.u32, src2_data.u32); data_ready = true; break; + case B64_TYPE: + case U64_TYPE: + op_result.u64 = MY_EXCH(data.u64, src2_data.u64); + data_ready = true; + break; case S32_TYPE: op_result.s32 = MY_EXCH(data.s32, src2_data.s32); data_ready = true; @@ -956,8 +966,16 @@ void atom_callback( const inst_t* inst, ptx_thread_info* thread ) op_result.s32 = data.s32 + src2_data.s32; data_ready = true; break; + case U64_TYPE: + op_result.u64 = data.u64 + src2_data.u64; + data_ready = true; + break; + case F32_TYPE: + op_result.f32 = data.f32 + src2_data.f32; + data_ready = true; + break; default: - printf("Execution error: type mismatch with instruction\natom.ADD only accepts u32 and s32\n"); + printf("Execution error: type mismatch with instruction\natom.ADD only accepts u32, s32, u64, and f32\n"); assert(0); break; } |
