簡體   English   中英

使用SIMD范例在256位向量上應用給定函數

[英]Apply a given function on a 256 bit vector using SIMD paradigm

有沒有辦法評估__m256d/s向量的函數? 像這樣:

#include <immintrin.h>

inline __m256d func(__m256d *a, __m256d *b)
{
    return 1 / ((*a + *b) * (*a + *b));
}

int main()
{
    __m256d a = _mm256_set_pd(1.0f, 2.0f, 3.0f, 4.0f);
    __m256d b = _mm256_set_pd(1.0f, 2.0f, 3.0f, 4.0f);
    __m256d c = func(a, b);

    return 0;
}

我想使用SIMD范例評估任何給定的數學函數。 如果這不可能,這不是SIMD編程Vs GPGPU的最大限制嗎? 我的意思是我已經意識到CPU的FLOPS計算能力越來越接近GPU,一些比較:

  • Nvidia Quadro K6000~5196 GFLOPS
  • Nvidia Quadro K5000~2169 GFLOPS
  • Intel Xeon E5-2699 v3~1728 GFLOPS(18核* 32 FLOP /周期* 3 Ghz)

未來的猜測:

  • AVX-512和可能的20核Xeon CPUs 3840 GLOPS(20核* 64 FLOP /周期* 3 Ghz)

  • 騎士降落5907 GFLOPS(71芯* 64 FLOP /周期* 1.3 Ghz)

你的問題非常有趣。 您使用現有編譯器無法完成所描述的內容。 如果覆蓋處理256b向量的基本運算符,您可能能夠接近所需的功能。

但是我不會說這是SIMD編程與GPGPU的最大限制 GPGPU的主要優點是FLOPS計數,但這需要一些成本。 一個是GPGPU不能很好地處理分支,不能處理處理大型本地數據的線程等。另一個限制是與傳統編碼相比,GPGPU編程模型相當復雜。

在CPU上,您可以運行更多通用代碼,編譯器將在大多數情況下進行向量化,而無需要求程序員編寫特定的內部函數。

所以我會進一步說, 簡單的代碼實際上是CPU的優勢 考慮將20年FORTRAN軟件移植到GPGPU所需的工作量。 如果你有一個好的編譯器和一個好的CPU(具有良好的FLOP計數),你可能會獲得預期的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM