PP-HW5 ===================================== > 0716078 鄒義杰 ## Q1 - Host memory alloc `malloc` - 優點 - 為 Pageable Memory 不常使用到的可以 swap 到 virtual memory - 適合大量資料的情況 - 缺點 - 因為分配的 memory 是 pageable,所以在 cudaMemcpy 時,CUDA API 會隱性的將需要複製的 memory 先複製一份到所 Pinned Memory,所以 cudaMemcpy 會比較慢 `cudaHostAlloc` - 優點 - 為 Pinned Memory,直接在 physical memory 上分配,不會被 swap - cudaMemcpy 時可以直接以 DMA 的方式搬動資料到 Device 上,所以 cudaMemcpy 會比較快 - 缺點 - alloc 的速度相較 malloc 慢 - 要考慮 physical memory 的上限 - Device memory alloc `cudaMalloc` - 優點 - 為 linear memory,配置一塊連續的記憶體空間,使用起來必較方便 - 缺點 - 因為不一定 aligned 所以有可能效能不佳。 `cudaMallocPitch` - 優點 - 分配的記憶體會加 pitch 使記憶體 aligned,提升存取 memory 的速度 - 缺點 - 因為有 padding 所以使用上會比較麻煩 - 因為有 padding,所以在 cudaMemcpy 上會比較慢 (如果不用 padding 則速度相同) 基於以上優缺點,我認為表現上 Method 2 > Method 1 而 Method 3 則是一個 thread 處理多個 pixels,這樣可以減少 block 數,減少 GPU 使用率,但同時也會降低平行度,所以 Method 3 應該是裡面表現最差的。 ## Q2 ![](https://i.imgur.com/1W34Xgl.png) ![](https://i.imgur.com/rKLc3aC.png) ![](https://i.imgur.com/16Tvw7Q.png) ## Q3 根據實際跑出來的圖表來看 Method 3 確實是表現最差的。但是 Method 1 表現卻比 Method 2 來的好,這與我一開始想的不太一樣。 從數據上分析 ||alloc|copy| |:-:|:-:|:-:| |Method 1|0.002ms|3.7292ms| |Method 2|2.4624ms|2.0078ms| 雖然 Method 2 的 copy 比較快,但是 alloc 上的速度比 Method 1 慢太多了,所以導致 Method 2 的表現比 Method 1 還要來的差。 ## Q4 我是使用 Method 1,但是不在 host malloc 一次,就直接把 device img copy 到參數裡的 img