トップ 一覧 Farm 検索 ヘルプ RSS ログイン

Diary/2020-9-26の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!Microsoft Igniteをみた
@ogawa_tterさんに教えてもらった[Inside Azure Datacenter Architecture with Mark Russinovich|https://myignite.microsoft.com/sessions/40aca11c-8e28-4914-a6d8-b3a7efb4eee1]をみた.
1:04あたりからFPGA関連の話.
Cっぽいシンタックスの言語から,SystemVerilog生成するらしい.
Quantum Inspired AlgorithmのFPGA実装のデモ.
紹介されてる言語はこんな感じか.
見えてる範囲だと{}の対応がとれてないけど,一行目の行末は{なのかな.
たしかに,Cっぽい見た目で処理記述しつつ,ハードウェア向けの属性も書ける,って感じだなあ.

 [[max_threads(MAX_FIFO_DEPTH), async]] void ExecuteInstruction(uint 32 instrId_in, Instruction instr_in, float32 beta_in, InstrFenceType sweepInstrFenceBase_in, b...
     {
         uint32 randomVal = m_random.next();
         uint32 valve;
 
         if (!instr_in.m_instruction.m_accumulate)
         {
             float32 prob = from_uint<32>(randomVal);
             float32 recip = rcp(beta_in);
             float32 prob_tmp = sub<Denorm::Off>(log2(prob), 32.0);
             float32 valve_f = mul<Denorm::Off>(prob_tmp, recip);
             sim_assert(lt<Denorm::Off>(0.0, valve_f));
             auto convert = to_int<32>(valve_f);
             sim_assert(convert.is_valid);
         }
         if(!accumulate)
         {
             uint1[PipelinePerEngine] values;
 
             unrolled_for(const auto pipe_id : PipelinePerEngine)
             {
                 EnergyType deltaEnerty = ALG::sum<EnergyType, EnergyType, MAX_TERMS_IN_INSTRUCTION>(tempEnergy[pipe_id]);
 
                 uint1 cur_val = cast<uint1>(independent_vals >> pipe_id);
                 if(deltaEnergy <= 0)
                 {
                     // fliping must happen
                     cur_val = ~cur_val;
                 }
                 else
                 {
                     if (deltaEnergy <= valve)
                     {
                         cur_val = ~cur_val;
                         if (probing)
                         {
                             atomic
                             {
                                 m_accept_incr_energy++;
                             }
                         }
                     }
                 }
                 values[pipe_id] = cur_val;
             }
         }
 
     }
 }