原创 C++排序算法(二路歸併排序)

C++排序算法(二路歸併排序) 歸併排序算法是一個可以在最壞情況下依然保持O(nlogn)運行時間的確定性排序算法。 歸併排序的主體結構屬典型的分治策略,我們可以先進行無序向量的遞歸分解,再進行有序向量的逐層歸併。 代碼實現 #

原创 C++ 廣度優先搜索(鄰接表+隊列實現)

C++ 廣度優先搜索(鄰接表+隊列實現) 廣度優先搜索的結果是圖的生成樹,也就是極小連通圖(n個頂點,n-1條邊) 廣度優先搜索 相當於 樹結構的層次遍歷,因此我們可以套用樹的層次遍歷,利用隊列去解決圖的廣度優先搜索 廣度優先搜索

原创 C++ 二分查找實現

C++ 二分查找 二分查找法是針對於有序向量中,查找該向量中某一個數。 二分查找法是通過將向量中點的值與要查找的值進行比較,然後每次減半去縮小查找範圍。 代碼實現 #include<iostream> using namespa

原创 C++ 深度優先搜索(鄰接表+棧實現)

C++ 深度優先搜索(鄰接表+棧實現) 深度優先搜索的結果是圖的生成樹,也就是極小連通圖(n個頂點有n-1條邊) 圖的生成樹的結果是不唯一的,它是根據你的存儲方式的變化而變化的。 深度搜索步驟: 1.確定一個開始頂點,並將該頂點標

原创 C++ 查找中位數

查找C++無序數列中位數 1.將無序數列轉化爲有序數列,然後直接通過索引找到中位數 2.已知中位數 要求左邊小於(大於)中位數,右邊大於(小於)中位數,且左邊數列大小等於右邊數列大小 。 而對左邊數列或者右邊數列數值的排列順序無要

原创 關於CUDA性能優化的補充

之前寫過一篇CUDA性能優化的博客https://blog.csdn.net/weixin_44444450/article/details/104535306 上面那篇博客是看完CUDA手冊裏面關於性能優化的內容後總結的,但是有

原创 CUDA歸約求和Debug版本結果與Release版本不同的解決方法

CUDA歸約求和Debug版本結果與Release版本不同的解決方法 近日,在寫一個CUDA項目時,裏面有一個核函數是要求均值,所以採用歸約求和算法,然後再去除以總數求得平均值,在Debug調試版本下,數據正常,但當在Releas

原创 梯度及梯度下降法

梯度 梯度是哈密爾頓算子(Nabla算子)直接作用於函數F( r )(不論F是矢量還是標量),當F是標量時,梯度即爲矢量。 這裏呢,解釋一下什麼是哈密爾頓算子 實際上,哈密爾頓算子就是一個微分算子,就是我們熟悉的倒三角符號∇\na

原创 做CUDA項目的一些心路歷程

做CUDA項目時的一些坑 1)要注意數據類型,在進行cudaMemcpy()的時候,要注意數據類型的統一,即使你float的數組裏存的是數據是沒有小數的整數類型,但當你想要把數據從設備端拷貝回主機端的時候,一定要new一個floa

原创 CUDA——流管理

CUDA 流(streams) 異步併發執行 當使用異步函數時,即實現了設備和宿主之間的併發執行。 異步函數:在設備完成請求的任務之前,控制就會返回到應用程序(宿主)。 這些函數包括: 1.核函數 2.執行內存複製並以Async爲

原创 CUDA——性能優化之循環展開

循環展開(#pragma unroll) 1)什麼是循環展開? 循環展開顧名思義就是將循環體展開,全部展開或者展開一部分都可以有效提高性能。 循環展開無論是在CPU還是GPU上,都可以有效的提高應用程序運行速度。 以下是一個循環體

原创 CUDA——紋理內存(紋理參考)

紋理內存(一) 1.1紋理類型 CUDA支持GPU上的一部分紋理硬件(它們原本是爲圖形處理而設計的)。從紋理內存而非全局內存讀取數據。 在內核中 ,使用名爲紋理拾取的設備函數讀取紋理內存。紋理拾取的第一個參數是一個名爲紋理參考的對

原创 CUDA——性能優化之共享內存

一、共享內存的結構 1)什麼是共享內存? 共享內存是GPU的一種稀缺資源,它位於芯片上,所以共享內存空間要比本地和全局內存空間快得多。對於warp裏的所有線程,只要線程之間沒有任何存儲體衝突(bank conflict),訪問共享