<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 3.11。使用 CUDA 模擬器 調試 CUDA Python > 原文: [http://numba.pydata.org/numba-doc/latest/cuda/simulator.html](http://numba.pydata.org/numba-doc/latest/cuda/simulator.html) Numba 包含一個 CUDA Simulator,它使用 Python 解釋器和一些額外的 Python 代碼實現 CUDA Python 中的大部分語義。這可以用于調試 CUDA Python 代碼,方法是在代碼中添加 print 語句,或者使用調試器逐步執行單個線程。 內核的執行由模擬器一次一個塊執行。為塊中的每個線程生成一個線程,并且將這些線程的執行調度留給操作系統。 ## 3.11.1。使用模擬器 通過將環境變量 [`NUMBA_ENABLE_CUDASIM`](../reference/envvars.html#envvar-NUMBA_ENABLE_CUDASIM) 設置為 1 來啟用模擬器。然后可以正常執行 CUDA Python 代碼。在內核中使用調試器的最簡單方法是僅停止單個線程,否則難以處理與調試器的交互。例如,下面的內核將在線程`&lt;&lt;&lt;(3,0,0), (1, 0, 0)&gt;&gt;&gt;`中停止: ```py @cuda.jit def vec_add(A, B, out): x = cuda.threadIdx.x bx = cuda.blockIdx.x bdx = cuda.blockDim.x if x == 1 and bx == 3: from pdb import set_trace; set_trace() i = bx * bdx + x out[i] = A[i] + B[i] ``` 當使用一維網格和一維塊調用時。 ## 3.11.2。支持的功能 該模擬器旨在盡可能在真實 GPU 上提供完整的執行模擬 - 特別是,支持以下內容: * 原子操作 * 恒定記憶 * 本地記憶 * 共享內存:共享內存數組的聲明必須位于不同的源代碼行上,因為模擬器使用源代碼行信息來跟蹤跨線程的共享內存分配。 * 支持 [`syncthreads()`](../cuda-reference/kernel.html#numba.cuda.syncthreads "numba.cuda.syncthreads") - 但是,在發散線程進入不同的 [`syncthreads()`](../cuda-reference/kernel.html#numba.cuda.syncthreads "numba.cuda.syncthreads") 調用的情況下,啟動不會失敗,但會發生意外行為。未來版本的模擬器可以檢測到這種情況。 * 支持流 API,但與實際設備不同,所有操作都按順序和同步進行。因此,在流上進行同步是一種無操作。 * 還支持事件 API,但不提供有意義的計時信息。 * 與 GPU 之間的數據傳輸 - 特別是使用 [`device_array()`](../cuda-reference/memory.html#numba.cuda.device_array "numba.cuda.device_array") 和 [`device_array_like()`](../cuda-reference/memory.html#numba.cuda.device_array_like "numba.cuda.device_array_like") 創建數組對象。固定存儲器 [`pinned()`](../cuda-reference/memory.html#numba.cuda.pinned "numba.cuda.pinned") 和 [`pinned_array()`](../cuda-reference/memory.html#numba.cuda.pinned_array "numba.cuda.pinned_array") 的 API 也受支持,但不會發生釘扎。 * 支持 GPU 上下文列表(`cuda.gpus`和`cuda.cudadrv.devices.gpus`)的驅動程序 API 實現,并報告單個 GPU 上下文。這個上下文可以像真正的那樣關閉和重置。 * 支持 [`detect()`](../cuda-reference/host.html#numba.cuda.detect "numba.cuda.detect") 功能,并報告一個名為 &lt;cite&gt;SIMULATOR&lt;/cite&gt; 的設備。 模擬器的一些限制包括: * 它不執行類型檢查/類型推斷。如果 jitted 函數的任何參數類型不正確,或者任何局部變量類型的規范不正確,模擬器將無法檢測到。 * 僅模擬一個 GPU。 * 不支持對單個 GPU 的多線程訪問,這將導致意外行為。 * 大多數驅動程序 API 未實現。 * 無法將 PTX 代碼與 CUDA Python 函數鏈接。 * Warp 和 warp 級操作尚未實現。 顯然,模擬器的速度也遠低于真實設備的速度。可能需要減小輸入數據的大小和 CUDA 網格的大小,以便使模擬器易于調試。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看