色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

利用NVIDIA CUDA 11.5實現(xiàn)128十進制算法

星星科技指導員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-04-11 09:16 ? 次閱讀

計算的歷史已經(jīng)證明,用計算機硬件實現(xiàn)的相對簡單的算法所能實現(xiàn)的是無限的。但計算機用有限大小的數(shù)字表示的“真相”基本上是近似的。正如大衛(wèi)·戈德伯格所寫,“ 將無限多個實數(shù)壓縮成有限位數(shù)需要一個近似表示 。”浮點是實數(shù)最廣泛使用的表示形式,在許多處理器中都有實現(xiàn),包括 GPU 。它之所以受歡迎,是因為它能夠代表一個大的動態(tài)范圍的價值觀,并權衡范圍和精度。

不幸的是,浮點的靈活性和范圍可能會在某些應用程序中造成麻煩,因為在固定范圍內(nèi)的精度更為重要:想想美元和美分。二進制浮點數(shù)不能準確地代表每一個十進制值,它們的近似值和舍入可能會導致累積錯誤,例如,在會計計算中可能是不可接受的。此外,添加非常大和非常小的浮點數(shù)可能會導致截斷錯誤。由于這些原因,許多貨幣和會計計算都是使用定點十進制算法實現(xiàn)的,該算法存儲固定數(shù)量的小數(shù)位數(shù)。根據(jù)所需的范圍,定點算法可能需要更多的位。

NVIDIA GPU 不在硬件中實現(xiàn)定點算法,但 GPU 加速的軟件實現(xiàn)可能是高效的。事實上, RAPIDS cuDF 庫已經(jīng)提供了高效的 32 位和 64 位定點十進制數(shù)和計算。但是 RAPIDS cuDF 和 GPU 加速的 Apache Spark 的一些用戶需要 128 位小數(shù)提供的更高范圍和精度,現(xiàn)在 NVIDIA CUDA 11.5 提供了對 128 位整數(shù)類型(int128)的預覽支持,這是實現(xiàn) 128 位十進制算法所需的。

在本文中,在介紹 CUDA 新的 int128 支持后,我們將詳細介紹如何在其上實現(xiàn)十進制定點算法。然后,我們將演示 RAPIDS cuDF 中的 128 位定點支持如何使關鍵的 Apache Spark 工作負載完全在 GPU 上運行。

介紹 CUDA __int128

在 NVIDIA CUDA 11.5 中, NVCC 離線編譯器在主機編譯器支持的平臺上為有符號和無符號__int128數(shù)據(jù)類型添加了預覽支持。nvrtc JIT 編譯器還增加了對 128 位整數(shù)的支持,但需要一個命令行選項--device-int128來啟用這種支持。算術、邏輯和位運算都支持 128 位整數(shù)。請注意, DWARF 調(diào)試對 128 位整數(shù)的支持目前還不可用,并將在后續(xù)的 CUDA 版本中提供。在 11.6 版本中, cuda gdb 和 Nsight Visual Studio Code Edition 增加了對檢查這種新變量類型的支持。

NVIDIA GPU 以 32 位的數(shù)量計算整數(shù),因此 128 位整數(shù)用四個 32 位無符號整數(shù)表示。加法、減法和乘法算法非常簡單,使用內(nèi)置的 PTX addc / madc 指令處理多個精度值。除法和余數(shù)使用簡單的 O ( n ^ 2 )除法算法實現(xiàn),類似于 Brent 和 Zimmermann 的書 現(xiàn)代計算機算法 中的算法 1.6 ,并進行了一些優(yōu)化,以改進商選擇步驟并最小化校正步驟。 128 位整數(shù)的一個令人振奮的用例是使用它們實現(xiàn)十進制定點算法。的 21.12 版本中包含 128 位十進制定點支持 RAPIDS libcudf .繼續(xù)閱讀,了解更多關于定點算法的信息,以及__int128如何用于實現(xiàn)高精度計算。

不動點算法

定點數(shù)字通過存儲小數(shù)部分的固定位數(shù)來表示實數(shù)。定點數(shù)字也可用于“省略”整數(shù)值的低階數(shù)字(即,如果你想表示 1000 的倍數(shù),你可以使用一個 10 進制的定點數(shù)字,其刻度等于 3 )。記住定點和浮點之間區(qū)別的一個簡單方法是,對于定點數(shù)字,小數(shù)點是固定的,而在浮點數(shù)字中,小數(shù)點可以浮動(移動)。

定點數(shù)字背后的基本思想是,即使所表示的值可以有小數(shù)位數(shù)(也就是 1.23 中的 0.23 ),實際上也可以將值存儲為整數(shù)。例如,為了表示 1.23 ,可以用scale = -2和值 123 構造一個fixed_point數(shù)字。通過將數(shù)值乘以小數(shù)位數(shù),可以將這種表示轉換為浮點數(shù)。在我們的例子中, 1.23 是通過 123 (值)乘以 0.001 ( 10 (基數(shù))乘以 -2 (刻度)的冪)得到的。當構造一個定點數(shù)時,會出現(xiàn)相反的情況,您可以“移位”該值,以便將其存儲為整數(shù)(如果使用的是小數(shù)點 -2 ( 0.001 ( 10 (基數(shù))與 -2 (小數(shù)點)的冪之比),則浮點數(shù)為 1.23 時,您將除以 0.001 )。

請注意,定點表示不是唯一的,因為可以選擇多個比例。對于 1.23 的示例,可以使用小于 -2 的任何比例,例如 -3 或 -4 。唯一的區(qū)別是存儲在磁盤上的數(shù)字不同; 123 表示刻度 -2 , 1230 表示刻度 -3 , 12300 表示刻度 -4 。當您知道您的用例只需要一組小數(shù)位時,您應該使用 least precise (又名最大)刻度來最大化可表示值的范圍。使用 -2 刻度時,范圍約為 -2000 萬至+ 2000 萬(小數(shù)點后兩位),而使用 -3 刻度時,范圍約為 -2 萬至+ 200 萬(小數(shù)點后三位)。如果你知道你是在為錢建模,而且不需要小數(shù)點后三位,那么 scale-2 是一個更好的選擇。

定點類型的另一個參數(shù)是 base 。在本文的例子中,以及在 RAPIDS cuDF 中,我們使用 10 進制,或十進制定點。十進制定點是最容易考慮的,因為我們對十進制(以 10 為基數(shù))數(shù)字很熟悉。定點數(shù)的另一個常用基數(shù)是基數(shù) 2 ,也稱為二進制定點。這僅僅意味著,不是將數(shù)值按 10 的冪移動,而是將數(shù)值按 2 的冪移動。您可以在后面的“示例”部分中看到一些二進制和十進制定點值的示例。

定點與浮點

表 1 :浮點和定點的比較。

絕對誤差是實際值與其計算機表示(以定點或浮點表示)之間的差值。相對誤差是絕對誤差與代表值之比。

為了演示定點可以解決的浮點表示問題,讓我們看看浮點是如何表示的。浮點數(shù)不能完全代表所有值。例如,與值 1.1 最接近的 32 位浮點數(shù)為 1.10000002384185791016 ( 看浮子。讓我們想象一下 )。在執(zhí)行算術運算時,尾隨的“不精確”可能會導致錯誤。例如, 1.1 + 1.1 的收益率為 2.2000000476837158231 。

圖 1 :浮點 1.1 的可視化。

相比之下,使用定點表示時,使用整數(shù)存儲 exact 值。為了使用比例等于 -1 的定點數(shù)字表示 1.1 ,存儲值 11 。算術運算是在基礎整數(shù)上執(zhí)行的,因此將 1.1 + 1.1 作為定點數(shù)相加,只需將 11 + 11 相加,就可以得到 22 ,正好代表值 2.2

為什么定點運算很重要?

如前一個例子所示,定點算法避免了浮點數(shù)固有的精度和舍入誤差,同時還提供了表示小數(shù)的能力。通過保持相對誤差恒定,浮點提供了更大的值范圍。然而,這意味著,當添加非常大和非常小的數(shù)字時,它可能會出現(xiàn)較大的絕對(截斷)錯誤,并會遇到舍入錯誤。固定點表示法總是有相同的 absolute 錯誤,代價是能夠表示縮小的值范圍。如果您知道小數(shù)點/二進制點后需要特定精度,則定點允許您在不截斷這些數(shù)字的情況下保持其精度,即使值增長到范圍的極限。如果你需要更多的范圍,你必須添加更多的位。因此,小數(shù) 128 對一些用戶來說變得很重要。

表 2 :小數(shù)點 32 的范圍,小數(shù)點= 2 。

fixed_point編號有許多應用程序和用例。您可以找到使用fixed_point數(shù)字 on Wikipedia 的實際應用程序列表

fixed_point inRAPIDSlibcudf

概述

RAPIDS lib cuDF ` fixed _ point `類型的核心是一個簡單的類模板。

template 
class fixed_point { Rep _value; scale_type _scale;
}

fixed_point類的模板是:

  • Rep:表示fixed_point數(shù)字(例如,使用的整數(shù)類型)
  • Rad:數(shù)字的Radix(例如,基數(shù) 2 或基數(shù) 10 )

decimal32decimal64類型分別使用int32_tint64_t作為 Rep ,并且都有Radix::BASE_10.scale是一個強類型的運行時變量(請參見下面的運行時刻度和強類型小節(jié)等)。

fixed_point類型有幾個構造函數(shù)(請參見下面的“構造方法”小節(jié))、可轉換為整型和浮點型的顯式轉換運算符,以及完整的運算符(加法、減法等)。

規(guī)模的跡象

在大多數(shù) C ++定點實現(xiàn)(包括 RAPIDS LIbcUDF )中,negative scale指示小數(shù)位數(shù)。positive scale表示可表示的倍數(shù)(例如,如果scale = 2表示decimal32,則可以表示 100 的倍數(shù))。

auto const number_with_pos_scale = decimal32{1.2345, scale_type{-2}}; // 1.23
auto const number_with_neg_scale = decimal32{12345, scale_type{2}}; // 12300

建設者

libcudf中提供了以下(簡化的)構造函數(shù):

fixed_point(T const& value, scale_type const& scale)
fixed_point(scaled_integer s) // already "shifted" value
fixed_point(T const& value) // scale = 0
fixed_point() // scale = 0, value = 0

其中,Rep是有符號整數(shù)類型,T可以是整數(shù)類型或浮點數(shù)。

設計與動機

libcudf 的fixed_point類型有許多設計目標。這些措施包括:

  • 需要運行時量表
  • 與潛在標準 C ++固定點類型的一致性
  • 強類型

下面詳細介紹了這些設計動機。

運行時規(guī)模和第三方定點庫

在設計階段,我們研究了八個現(xiàn)有定點 C ++庫。不使用第三方庫的主要原因是,所有現(xiàn)有的定點類型/庫都是以scale作為編譯時參數(shù)設計的。這不適用于 RAPIDSlibcudf,因為它需要 scale 作為運行時參數(shù)。

雖然RAPIDS?libcudf是一個 C ++庫,可以在 C ++應用程序中使用,它也是后端RAPIDS cuDF,這是一個 Python 庫。 Python 是一種解釋(而非編譯,如 C ++)語言。此外, cuDF 必須能夠從其他數(shù)據(jù)源讀取或接收定點數(shù)據(jù)。這意味著我們不知道編譯時定點值的scale。因此,我們需要在fixed_pointRAPIDS 中輸入fixed_point類型,該類型具有運行時刻度參數(shù)。

我們引用的主要庫是CNL,John McFarlane的組成數(shù)字庫,目前是[VZX97 ]向C++標準中添加定點類型的參考。我們的目標是使 RAPIDSlibcudf fixed_point類型盡可能與潛在的標準化類型相似。下面是 RAPIDSlibcudf和CNL之間的一個簡單比較。

CNL (Godbolt Link

using namespace cnl;
auto x = fixed_point{1.23};

RAPIDS libcudf

using namespace numeric;
auto x = fixed_point{1.23, scale_type{-2}};

或者:

using namespace numeric;
auto x = decimal32{1.23, scale_type{-2}};

這里需要注意的最重要的區(qū)別是,在 CNL 示例中,-2作為模板(又稱編譯時參數(shù)),而在 cuDF lib cuDF 示例中,scale_type{-2}作為運行時參數(shù)。

強類型

fixed_point類型的設計中融入了強類型。這方面的兩個例子是:

RAPIDS lib cuDF 堅持強類型最佳實踐和強類型API,因為強類型提供了保護和表達能力。與強大的打字相比,我不會進入較弱的兔子洞,但是如果你想了解更多關于它的信息,那么有很多很棒的資源,包括Jonathon Bocarra的VC++上的流暢的C++帖子。

添加對decimal128的支持

RAPIDSlibcudf21.12 將 CUDA 添加為受支持的fixed_point類型。這需要進行一些更改,第一個是添加依賴于decimal12811.5 提供的__int128類型的decimal128類型別名。

using decimal32 = fixed_point;
using decimal64 = fixed_point;
using decimal128 = fixed_point<__int128_t, Radix::BASE_10>;

這需要進行一些內(nèi)部更改,包括更新類型特征函數(shù)__int128_t對某些函數(shù)的專門化,以及添加支持,以便cudf::column_view和朋友使用decimal128。以下簡單示例演示了 lib cuDF API 與decimal128的配合使用(注意,所有這些示例對decimal32decimal64的作用相同)。

例子

簡單貨幣

一個簡單的貨幣示例使用libcudf提供的decimal32類型,其刻度為 -2 ,正好代表 17.29 美元:

auto const money = decimal32{17.29, scale_type{-2}};

大數(shù)和小數(shù)之和

當求大值和小值之和時,定點非常有用。作為一個簡單的玩具示例,下面的代碼將指數(shù) -2 到 9 的 10 的冪相加。

template 
auto sum_powers_of_10() { auto iota = std::views::iota(-2, 10); return std::transform_reduce( iota.begin(), iota.end(), T{}, std::plus{}, [](auto e) -> T { return std::pow(10, e); });
}

比較 32 位浮點和十進制定點可以得出以下結果:

sum_powers_of_10(); // 1111111168.000000
sum_powers_of_10(); // 1111111111.11

其中decimal_type是 32 位的 10 進制定點類型。使用 Godbolthere上的 CNL 庫可以看到一個例子。

避免浮點舍入問題

下面是一段代碼(見Godbolt中),舉例說明浮點值遇到問題(在 C ++中):

std::cout << std::roundf(256.49999) << '
'; // prints 257

RAPIDS lib cuDF 中的等效代碼不會有相同的問題(請參見Github上的內(nèi)容):

auto col = // decimal32 column with scale -5 and value 256.49999
auto result = cudf::round(input); // result is 256

256.4999 的值不能用 32 位二進制浮點表示,因此在調(diào)用 std :: roundf 函數(shù)之前,將其舍入到 256.5 。使用定點表示法可以避免這個問題,因為 256.4999 可以用任何具有五個或五個以上精度分數(shù)值的 10 進制(十進制)類型來表示。

二進制與十進制定點

// Decimal Fixed Point
using decimal32 = fixed_point;
auto const a = decimal32{17.29, scale_type{-2}}; // 17.29
auto const b = decimal32{4.2, scale_type{ 0}}; // 4
auto const c = decimal32{1729, scale_type{ 2}}; // 1700 // Binary Fixed Point
using binary32 = fixed_point;
auto const x = binary{17.29, scale_type{-2}}; // 17.25
auto const y = binary{4.2, scale_type{ 0}}; // 4
auto const z = binary{1729, scale_type{ 2}}; // 1728

小數(shù) 128

// Multiplying two decimal128 numbers
auto const x = decimal128{1.1, scale_type{-1});
auto const y = decimal128{2.2, scale_type{-1}};
auto const z = x * y; // 2.42 with scale equal to -2 // Adding two decimal128 numbers
auto const x = decimal128{1.1, scale_type{-1});
auto const y = decimal128{2.2, scale_type{-1}};
auto const z = x * y; // 3.3 with scale equal to -1 

DecimalType和 RAPIDS Spark

Apache Spark SQL 中的 DecimalType 是一種可以表示 Java BigDecimal 值的數(shù)據(jù)類型。對財務數(shù)據(jù)進行操作的 SQL 查詢大量使用十進制類型。與定點十進制數(shù)的 RAPIDS lib cuDF 實現(xiàn)不同, Spark 中的 DecimalType 可能的最大精度限制為 38 位。小數(shù)點后的位數(shù)也被限制在 38 。這個定義是 C ++刻度的否定。例如,像 0.12345 這樣的十進制值在 Spark 中的刻度為 5 ,但在 libcudf 中的刻度為 -5 。

Spark 嚴格遵循 Apache Hive 操作精度計算規(guī)范,并為用戶提供配置十進制操作精度損失的選項。 Spark SQL 在執(zhí)行聚合、窗口、強制轉換等操作時積極提高結果列的精度。這種行為本身就是使小數(shù) 128 與現(xiàn)實世界的查詢極其相關的原因,它回答了一個問題:“為什么我們需要支持高精度的小數(shù)列?”。考慮下面的例子,特別是哈希骨灰,它有一個乘法表達式,涉及一個十進制 64 列,價格,和一個非十進制列,數(shù)量。 Spark 首先將非十進制列強制轉換為適當?shù)氖M制列。然后確定結果精度,該精度大于輸入精度。因此,即使涉及小數(shù) 64 個輸入,結果精度也是小數(shù) 128 的情況也很常見。

scala> val queryDfGpu = readPar.agg(sum('price*'quantity))
queryDfGpu1: org.apache.spark.sql.DataFrame = [sum((price * quantity)): decimal(32,2)] scala> queryDfGpu.explain
== Physical Plan ==
*(2) HashAggregate(keys=[], functions=[sum(CheckOverflow((promote_precision(cast(price#19 as decimal(12,2))) * promote_precision(cast(cast(quantity#20 as decimal(10,0)) as decimal(12,2)))), DecimalType(22,2), true))])
+- Exchange SinglePartition, true, [id=#429] +- *(1) HashAggregate(keys=[], functions=[partial_sum(CheckOverflow((promote_precision(cast(price#19 as decimal(12,2))) * promote_precision(cast(cast(quantity#20 as decimal(10,0)) as decimal(12,2)))), DecimalType(22,2), true))]) +- *(1) ColumnarToRow +- FileScan parquet [price#19,quantity#20] Batched: true,DataFilters: [], Format: Parquet, Location: InMemoryFileIndex[file:/tmp/dec_walmart.parquet], PartitionFilters: [], PushedFilters: [], ReadSchema: struct

隨著在 lib cuDF 中引入了新的小數(shù) 128 數(shù)據(jù)類型, Spark 的 RAPIDS 插件能夠利用更高的精度,并將計算保持在 GPU 上,而之前需要返回到 CPU 上。

作為一個例子,讓我們來看一個在以下模式下運行的簡單查詢。

{ id : IntegerType // Unique ID prodName : StringType // Product name will be used to aggregate / partition price	: DecimalType(11,2) // Decimal64 quantity : IntegerType // Quantity of product }

此查詢計算 totalCost 上的無界窗口,即總和(價格*數(shù)量)。然后,它會在排序后由 prodName 對結果進行分組,并返回最小總成本。

// Run window operation
val byProdName = Window.partitionBy('prodName)
val queryDfGpu = readPar.withColumn( "totalCost", sum('price*'quantity) over byProdName).sort( "prodName").groupBy( "prodName").min( "totalCost")

RAPIDS Spark 插件設置為僅當所有表達式都可以在 GPU 上計算時,才在 GPU 上運行運算符。讓我們先看看下面這個查詢的物理計劃,不支持小數(shù) 128 。)

如果不支持十進制 128 ,每個運算符都會返回 CPU ,因為無法支持包含十進制 128 類型的子表達式。因此,包含 exec 或父表達式的表達式也不會在 GPU 上執(zhí)行,以避免低效的行到列和列到行轉換。

== Physical Plan ==
*(3) HashAggregate(keys=[prodName#18], functions=[min(totalCost#66)])
+- *(3) HashAggregate(keys=[prodName#18], functions=[partial_min(totalCost#66)]) +- *(3) Project [prodName#18, totalCost#66] +- Window [sum(_w0#67) windowspecdefinition(prodName#18, specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())) AS totalCost#66], [prodName#18] +- *(2) Sort [prodName#18 ASC NULLS FIRST], false, 0 +- Exchange hashpartitioning(prodName#18, 1), true, [id=#169] +- *(1) Project [prodName#18, CheckOverflow((promote_precision(cast(price#19 as decimal(12,2))) * promote_precision(cast(cast(quantity#20 as decimal(10,0)) as decimal(12,2)))), DecimalType(22,2), true) AS _w0#67] +- *(1) ColumnarToRow +- FileScan parquet [prodName#18,price#19,quantity#20] Batched: true, DataFilters: [], Format: Parquet, Location: InMemoryFileIndex[file:/tmp/dec_walmart.parquet], PartitionFilters: [], PushedFilters: [], ReadSchema: struct

啟用小數(shù) 128 支持后的查詢計劃顯示,所有操作現(xiàn)在都可以在 GPU 上運行。由于沒有 ColumnarToRow 和 RowToColumnar 轉換(在查詢中顯示為 collect 操作),因此通過在 GPU 上運行整個查詢,可以獲得更好的性能。

== Physical Plan ==
GpuColumnarToRow false
+- GpuHashAggregate(keys=[prodName#18], functions=[gpumin(totalCost#31)]),
filters=ArrayBuffer(None)) +- GpuHashAggregate(keys=[prodName#18], functions=[partial_gpumin(totalCost#31)]), filters=ArrayBuffer(None)) +- GpuProject [prodName#18, totalCost#31] +- GpuWindow [prodName#18, _w0#32, gpusum(_w0#32, DecimalType(32,2)) gpuwindowspecdefinition(prodName#18, gpuspecifiedwindowframe(RowFrame, gpuspecialframeboundary(unboundedpreceding$()), gpuspecialframeboundary(unboundedfollowing$()))) AS totalCost#31], [prodName#18] +- GpuCoalesceBatches batchedbykey(prodName#18 ASC NULLS FIRST) +- GpuSort [prodName#18 ASC NULLS FIRST], false, com.nvidia.spark.rapids.OutOfCoreSort$@3204b591 +- GpuShuffleCoalesce 2147483647 +- GpuColumnarExchange gpuhashpartitioning(prodName#18, 1), true, [id=#57] +- GpuProject [prodName#18, gpucheckoverflow((gpupromoteprecision(cast(price#19 as decimal(12,2))) * gpupromoteprecision(cast(cast(quantity#20 as decimal(10,0)) as decimal(12,2)))), DecimalType(22,2), true) AS _w0#32] +- GpuFileGpuScan parquet [prodName#18,price#19,quantity#20] Batched: true, DataFilters: [], Format: Parquet, Location: InMemoryFileIndex[file:/tmp/dec_walmart.parquet], PartitionFilters: [], PushedFilters: [], ReadSchema: struct

對于乘法運算,數(shù)量列轉換為小數(shù) 64 (精度= 10 ),價格列(已為小數(shù) 64 類型)轉換為精度 12 ,使兩列的類型相同。結果列的大小調(diào)整為精度 22 ,這是小數(shù) 128 類型,因為精度大于 18 。這顯示在上面計劃的 GpuProject 節(jié)點中。

對 sum ()的窗口操作也將精度進一步提升到 32 。

我們使用 NVIDIA 決策支持( NDS )來衡量加速比, NDS 是 Spark 客戶和提供商經(jīng)常使用的 TPC-DS 數(shù)據(jù)科學基準的一種改編。 NDS 包含與行業(yè)標準基準相同的 100 多個 SQL 查詢,但修改了數(shù)據(jù)集生成和執(zhí)行腳本的部分。? NDS 的結果與 TPC-DS 不可比。

NDS 查詢子集的初步運行表明,由于支持小數(shù) 128 ,性能顯著提高,如下圖所示。它們在八個節(jié)點組成的集群上運行,每個節(jié)點有一個 A100 GPU 和 1024 CPU 內(nèi)核,在 Spark 3.1.1 上運行 16 個內(nèi)核的執(zhí)行器。每個執(zhí)行器在內(nèi)存中使用 240GiB 。這些查詢顯示了接近 8 倍的出色加速,這可以歸因于以前的操作回到了現(xiàn)在在 GPU 上運行的 CPU ,從而避免了行到列和列到行的轉換以及其他相關的開銷。所有 NDS 查詢的端到端運行時間平均提高了 2 倍。這(希望)只是一個開始!

Performance evaluation of a subset of NDS queries.Performance evaluation of a subset of NDS queries.圖 2 :NDS 查詢子集的性能評估.

隨著 Spark Spark 插件的 21.12 版本發(fā)布,大多數(shù)操作員都可以使用十進制 128 支持。需要對溢出條件進行一些特殊處理,以保持 CPU 和 GPU 之間的結果兼容性。這項工作的最終目標是通過 RAPIDS for Spark 插件,讓零售和金融查詢充分受益于 GPU 的加速。

總結

RAPIDS libcudf 中的固定點類型、 DecimalType 的添加以及 Spark 的 RAPIDS 插件的 decimal128 支持,使得以前只有在 CPU 上才可能在 GPU 上運行的激動人心的用例成為可能。

關于作者

Conor Hoekstra 是 NVIDIA 的高級圖書館軟件工程師,在 RAPIDS 團隊工作。他對編程語言、算法和漂亮的代碼非常熱衷。他是編程語言虛擬 Meetup 的創(chuàng)始人和組織者,他有一個 YouTube 頻道,他是兩個播客的主持人:算法+數(shù)據(jù)結構=程序和 ArrayCast 。康納還是 CPPNNorth 會議的項目主席,也是一位熱心的會議發(fā)言人。

Kuhu Shukla 是 NVIDIA Spark- GPU 團隊的高級軟件工程師。在此之前,她是雅虎 Hadoop 核心團隊的成員!在伊利諾伊州香檳市的 Apache Tez 、 Thread 和 HDFS 等大數(shù)據(jù)平臺上工作。她是 Apache Tez 項目的 PMC 。她在北卡羅來納州立大學獲得了計算機科學碩士學位。

Mark Harris 是 NVIDIA 杰出的工程師,致力于 RAPIDS 。 Mark 擁有超過 20 年的 GPUs 軟件開發(fā)經(jīng)驗,從圖形和游戲到基于物理的模擬,到并行算法和高性能計算。當他還是北卡羅來納大學的博士生時,他意識到了一種新生的趨勢,并為此創(chuàng)造了一個名字: GPGPU (圖形處理單元上的通用計算)。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    4994

    瀏覽量

    103200
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4743

    瀏覽量

    129009
  • 編譯器
    +關注

    關注

    1

    文章

    1634

    瀏覽量

    49164
收藏 人收藏

    評論

    相關推薦

    bcd與十進制之間的關系

    BCD(Binary-Coded Decimal)即二進制編碼的十進制數(shù),是一種用二進制來表示十進制數(shù)的編碼方式。以下是BCD與十進制之間關
    的頭像 發(fā)表于 12-20 17:15 ?682次閱讀

    bcd編碼的應用 bcd與二進制的區(qū)別

    BCD(Binary-Coded Decimal)編碼是一種二進制編碼形式,用于表示十進制數(shù)字。它將每個十進制數(shù)字(0-9)直接編碼為一個四位二進制數(shù)。BCD編碼的主要優(yōu)點是易于閱讀和
    的頭像 發(fā)表于 12-20 17:11 ?664次閱讀

    Tlv320AIc23B配置時,采用十六進制,可以采用十進制嗎?

    Tlv320AIc23B配置時,采用十六進制,可以采用十進制嗎? 2初始化完成后,還可以單獨修改某一項配置嗎?還是要全部更新? void ancRenewINCodecRegs(uint16
    發(fā)表于 11-05 07:05

    矩陣4x4個按鍵,如何把識別結果按編號01-16(十進制)顯示在兩個七段數(shù)碼管上?

    矩陣4x4個按鍵,并把識別結果按編號01-16(十進制)顯示在兩個七段數(shù)碼管上,按鍵按下時顯示,不按時消失編號消失。 2.為了更加實用,要求加上去抖動電路模塊
    發(fā)表于 10-31 20:43

    十進制數(shù)據(jù)轉十六進制字符_轉ASCII碼

    十進制數(shù)據(jù)轉十六進制字符_轉ASCII碼
    發(fā)表于 09-18 10:17 ?0次下載

    進制處理中的一些技巧

    在二進制十進制的處理中,有時候一些小技巧是很有用的。 1、把十進制數(shù)轉換成二進制數(shù) (1)在MATLAB中有一個函數(shù)dec2bin,可以把正整數(shù)轉換為2
    的頭像 發(fā)表于 07-05 11:51 ?590次閱讀

    十進制和4位二進制計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《十進制和4位二進制計數(shù)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 05-31 09:32 ?1次下載
    <b class='flag-5'>十進制</b>和4位二<b class='flag-5'>進制</b>計數(shù)器數(shù)據(jù)表

    NVIDIA 通過 CUDA-Q 平臺為全球各地的量子計算中心提供加速

    —— NVIDIA 于今日宣布將通過開源的 NVIDIA CUDA-Q? 量子計算平臺,助力全球各地的國家級超算中心加快量子計算的研究發(fā)展。 ? 德國、日本和波蘭的超算中心將使用該平臺來賦能他們由
    發(fā)表于 05-13 15:21 ?201次閱讀
    <b class='flag-5'>NVIDIA</b> 通過 <b class='flag-5'>CUDA</b>-Q 平臺為全球各地的量子計算中心提供加速

    雙4位十進制和二進制計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《雙4位十進制和二進制計數(shù)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 05-13 11:12 ?0次下載
    雙4位<b class='flag-5'>十進制</b>和二<b class='flag-5'>進制</b>計數(shù)器數(shù)據(jù)表

    同步4位十進制和二進制計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《同步4位十進制和二進制計數(shù)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 05-09 11:29 ?3次下載
    同步4位<b class='flag-5'>十進制</b>和二<b class='flag-5'>進制</b>計數(shù)器數(shù)據(jù)表

    CD74HC390、CDx4HCT390 高速 CMOS 邏輯雙路十進制紋波計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CD74HC390、CDx4HCT390 高速 CMOS 邏輯雙路十進制紋波計數(shù)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 04-29 10:12 ?0次下載
    CD74HC390、CDx4HCT390 高速 CMOS 邏輯雙路<b class='flag-5'>十進制</b>紋波計數(shù)器數(shù)據(jù)表

    使用EDIT_SetDecMode()函數(shù)設置十進制編輯后變成了一個黑塊的原因?

    使用了EDIT_SetDecMode()函數(shù)設置十進制編輯后,就變成這樣;但是在電腦上仿真界面的時候,數(shù)字和背景是會自動反色的,但下載到單片機上就是一個黑色塊。請問會是什么原因?
    發(fā)表于 04-12 06:12

    BCD碼在PLC中的應用與含義

    BCD是英文"Binary-Coded Decimal"的縮寫,直譯的意思是“二進制編碼的十進制數(shù)”,這種編碼的數(shù)制本質(zhì)上是十進制。BCD碼用4個二進制數(shù)表示一個
    發(fā)表于 03-21 11:17 ?3006次閱讀
    BCD碼在PLC中的應用與含義

    如何實現(xiàn)進制和BCD碼數(shù)據(jù)的相互轉變?

    如何實現(xiàn)進制和BCD碼數(shù)據(jù)的相互轉變? 二進制碼是將十進制數(shù)字表示為二進制數(shù)和十進制數(shù)的一種表
    的頭像 發(fā)表于 02-18 14:51 ?3693次閱讀

    10進制轉換為二進制算法

    十進制轉換為二進制是計算機科學中非常基礎且重要的概念之一。在理解和應用計算機科學的基礎知識時,掌握這個算法是至關重要的。 在開始講解十進制轉換為二
    的頭像 發(fā)表于 01-15 10:32 ?3352次閱讀
    主站蜘蛛池模板: 成人免费看片45分钟| 18禁黄久久久AAA片| 男人女人边摸边吃奶边做| 激情内射亚洲一区二区三区| 国产精品嫩草影视在线观看| 父亲猜女儿在线观看| 扒开她的黑森林让我添动态图| 99国产这里只有精品视频| 91天堂国产在线 在线播放| 中文字幕亚洲无线码在线| 在线观看中文字幕国产| 在线a亚洲视频| 最近免费中文字幕大全免费| 永久adc视频| 中文字幕在线播放视频| 最新国自产拍天天更新| 777黄色片| bl高h乱肉辣文| 芭乐视频免费资源在线观看| 凹凸精品视频分类视频| 成人无码国产AV免费看直播| 丰满少妇67194视频| 国产精品久久精品视| 国产一级特黄aa毛片| 国产中文字幕乱码免费| 精品国产国产综合精品| 久久成人无码国产免费播放| 久久亚洲午夜牛牛影视| 蜜臀AV浪潮99国产麻豆| 欧美性xxx免费看片| 色内射无码AV| 先锋影音av资源站av| 亚洲免费黄色| 2018三级网站免费观看| xxxx88| 国产成人久久精品AV| 国精产品砖一区二区三区糖心| 久久国产乱子伦精品免费不卡| 秘密教学26我们在做一次吧免费 | 蜜柚影院在线观看免费高清中文 | 97视频免费在线|