heterodb/pg-strom

GPUでlogの計算結果が不正

Closed this issue · 7 comments

0-kaz commented

logの計算結果が不正になります。

SELECT id, log(@a)
  INTO test03p
  FROM rt_data
 WHERE id > 0;

結果の比較

  id  |      gpu_result       |      cpu_result       
------+-----------------------+-----------------------
 1857 |      4.18872352220267 |    1.8191395119109728
 1858 |    -0.773075682166485 |   -0.3357425028584966
 1859 |    3.5137997314326848 |    1.5260238338743433
 1860 |    3.7243584646643333 |     1.617468329833387
 1861 |     4.275122519146093 |    1.8566621195254773
 1862 |     4.335088098893453 |    1.8827048399138853
 1863 |     4.218546039302069 |    1.8320912665237072
 1864 |    3.3228816382142163 |     1.443109159494072
 1865 |    1.8774897777046273 |    0.8153834502868826
 1866 |    4.3556516111355075 |    1.8916354598091594
 1867 |    3.6577153110306333 |    1.5885255759536405
 1868 |    3.6802494540950446 |    1.5983120299409328
 1869 |     3.987606352808934 |    1.7317954350272715
 1870 |    3.9018373587564277 |    1.6945464341918755

結果比較クエリ

select g.id,g.log as gpu_result,p.log as cpu_result from test03g g, test03p p WHERE g.id = p.id AND @(g.log - p.log) > 0.00001;

全体クエリ

SET pg_strom.regression_test_mode = on;
SET client_min_messages = error;
DROP SCHEMA IF EXISTS regtest_dfunc_math_temp CASCADE;
CREATE SCHEMA regtest_dfunc_math_temp;
RESET client_min_messages;

CREATE TABLE rt_data (
  id   int,
  a    float8   -- values between -1.0 and 1.0
);
SELECT pgstrom.random_setseed(20190610);

INSERT INTO rt_data (
  SELECT x, 
    pgstrom.random_float(1, -100.0, 100.0)
FROM generate_series(1,2000) x);

SET pg_strom.enabled = on;
EXPLAIN(verbose)
SELECT id, log(@a)
  INTO test03g
  FROM rt_data
 WHERE id > 0;
SELECT id, log(@a)
  INTO test03g
  FROM rt_data
 WHERE id > 0;
SET pg_strom.enabled = off;
SELECT id, log(@a)
  INTO test03p
  FROM rt_data
 WHERE id > 0;
0-kaz commented

dlog10でも同様に値不一致発生

     gpu_result      |     cpu_result      
---------------------+---------------------
   6.506057044571892 |  2.8255446734053518
   6.013274292111318 |   2.611531843234628
    5.82887909844951 |   2.531450028137823
   6.569015521748754 |  2.8528871926322945
   6.505775479921639 |   2.825422391431448
    6.26766856470166 |  2.7220138720484055
  5.0929267628081805 |  2.2118299898249845
   5.606565950342345 |  2.4349006546603413
   6.536715443598813 |  2.8388594469267314
   5.433663446126519 |  2.3598100511721545
0-kaz commented

sin関数でも値不一致発生

       gpu_result        |       cpu_result       
-------------------------+------------------------
      0.9860931274365792 |    -0.1661936942917703
     -0.8637871732780296 |    -0.5038568440344454
      0.6691453044862408 |     0.7431315909608581
      0.9644891756736244 |     0.2641223769551014
      0.9901306762041981 |   -0.14014722273173047
      0.9381171801641532 |    0.34631799878270486
     0.47925026278390903 |     0.8776782927824717
     0.33055356669023656 |     0.9437872321388774
     0.21213967707174317 |    -0.9772393552307933
      0.7943059427891177 |    -0.6075179579649402
kaigai commented

pgfn_sin() を確認したら、コサインを計算していました…。

pgfn_log() も、対数の底の違いですね…。
急いで移植したので慌てていたようです。

kaigai commented

80fc61d7879f08faad6736e3f09f945c4044310e で修正しました。

確認したところ、log,dlog10,sinは一致していましたが、dlog1で発生しておりました(デグレード?)

SELECT g.dlog1, p.dlog1
  FROM test03g g JOIN test03p p ON g.id = p.id
 WHERE @(g.dlog1 - p.dlog1)    > 0.000001;
        dlog1        |        dlog1        
---------------------+---------------------
  2.9643775406446657 |   6.825731535094758
   2.549124574110272 |   5.869576244531108
   2.254515958884451 |   5.191214838844513
  2.9637022188648423 |   6.824176549231562
   2.855262661197327 |   6.574485240255473
   2.419403411919831 |   5.570882230225536
  1.7833664528952506 |   4.106353009782272
  2.9478770013626368 |   6.787737639317595
   2.661932580617754 |   6.129326278685611
   2.629185631808387 |   6.053923642516124
  2.3656996139568705 |   5.447224665598859
   2.986200791491819 |   6.875981427176082
  2.7527630826929057 |    6.33847123875302
  2.8802042511646997 |   6.631915373509916
   1.990740226672146 |   4.583848769958871

a3799fbb91a64c254b27b600c8ad86a9fa8b8ec3 で修正しました。ありがとうございます。

修正確認しました。ありがとうございました。